Використання мови макрокоманд в AllFusion ERwin Data Modeler, Комерція, Різне, статті

На сучасному етапі рідко яке підприємство має єдину інформаційну структуру. Як правило, інформаційний відділ організації має мозаїчну структуру, де кожен елемент мозаїки є рішенням окремої задачі або підрозділи і реалізований відповідно до параметрів цього завдання. Така мозаїка багато в чому визначається історичним розвитком організації. Приміром, на гіпотетичному підприємстві спочатку був автоматизований бухгалтерський облік за допомогою власної розробки, далі була впроваджена стороння програма з обліку заробітної плати і т.д. Не секрет що така доля була уготована і системам управління баз даних – від настільних баз MS Access до високопродуктивних баз даних Oracle. У підсумку практично перед будь-якою організацією стоїть завдання уніфікації процесу створення баз даних з використанням різних СУБД, Документування та супроводження вже існуючих напрацювань. Саме таким інструментом є AllFusion ERwin Data Modeler (раніше: ERwin). Даний програмний продукт випускається американською компанією Computer Associates. ERwin DM підтримує більше 20 типів СУБД, як настільних, так і реляційних. Серед функціональних можливостей ERwin DM можна виділити наступні:



Цей список можна продовжити. Однак метою даної статті є не перерахування всіх функціональних можливостей ERwin DM, а розповідь про допоміжні засоби, включених в ERwin DM, які дозволяють істотно розширити функціональність даного продукту. До таких можна зарахувати:



Далі ми розглянемо саме мова макрокоманд, сфери його застосування, а також наведемо ряд практичних прикладів, що демонструють вигоду від використання макрокоманд.


Будь СУБД увазі підтримку певної моделі даних, яка визначає структуру даних, і правила, за якими ця структура створюється. На даний момент найбільш використовуваною моделлю даних є реляційна модель. Перша практична реалізація реляційної моделі була зроблена компанією IBM в сімдесяті роки (1973-1978) минулого сторіччя в продукті System R. Ця система була основою для всіх послідували за нею комерційних продуктів, що реалізують реляційний підхід. У даному продукті був запропонований мова маніпулювання даними, який носив назву SEQUEL (structured English query language), надалі отримав назву SQL. У комерційних продуктах мову SQL доповнювався, і в підсумку з’явилася велика кількість діалектів, не сумісних між собою. У 1987 році американським комітетом стандартизації був запропонований перший стандарт мови SQL, в 1992 році був створений стандарт SQL-92, що доповнює SQL-87, в 1999 році запропонована його третя версія, головним доповненням якої були об’єктні можливості і збережені процедури. Незважаючи на процес стандартизації, версії мови SQL дуже сильно відрізняються від виробника до виробника. Мова макрокоманд ERwin DM дозволяє розширити стандартний синтаксис мови SQL до діалектів конкретних баз даних. Однак це не єдина можливість використання макрокоманд в ERwin DM. Дії можуть бути використані:



Як свідчить реляційна теорія, домен є областю визначення значень атрибута. Однак, незважаючи на те, що деякі виробники СУБД заявляють про повну підтримку реляційного підходу у своїх продуктах, насправді всі положення цього підходу не реалізовані в жодній комерційній СУБД, та й навряд чи коли будуть реалізовані повністю. Одним з таких нереалізованих моментів є поняття домену – в сучасних СУБД воно підмінене поняттям типу даних, що є досить примітивним рішенням. В ERwin DM теж існує поняття домену і його можна представити шаблоном атрибута, що володіє набором властивостей, в числі яких тип даних, значення за замовчуванням, правило перевірки і деякі інші. В процесі роботи рекомендується використовувати саме домени, і тільки потім створювати атрибути, що належать конкретному домену. Такий підхід не позбавлений певної гнучкості і дозволяє більш ефективно редагувати схему даних. Дійсно, набагато зручніше створити домен ВД, привласнити йому набір властивостей і тільки потім створювати атрибути на основі даного домена. У разі зміни, наприклад, довжини поля домену ВД, набагато простіше виправити дані цього домену – і всі вхідні в нього атрибути автоматично будуть змінені. Використання макрокоманд в доменах є найпростішим прикладом застосування макрокоманд в ERwin DM.

Рис. 1. Використання макрокоманд у визначенні доменів


На наведеному вище малюнку використовується ряд макрокоманд, в результаті дії яких ім’я атрибута буде виглядати наступним чином: названіе_сущності домен_атрібута.


% Lower – макрокоманда, що знижує регістр
% OwnerEntity – макрокоманда, що повертає ім’я суті, до якої належить атрибут
% AttDomain – макрокоманда, що повертає ім’я домену, до якого належить атрибут

При розробці великих інформаційних систем, коли над моделлю даних працюють кілька фахівців, необхідно дотримуватися правил іменування об’єктів схеми даних. Наприклад: назви сутностей повинні бути представлені у верхньому регістрі, назви атрибутів – в нижньому, таблиці на фізичному рівні подання повинні мати префікс tbl і т.д. Звичайно, можна створити документ, що описує правила іменування об’єктів схеми даних і потім адміністративними заходами домагатися виконання положень цього документа. Однак, у випадку, коли кількість таблиць у схемі починає обчислюватися сотнями, це завдання стає важкоздійснюваним. В ERwin DM є спеціальні механізми, що дозволяють задати правила іменування як логічного, так і фізичного рівня схеми даних. У загальному випадку дії використовуються для перетворення імен об’єктів на логічному рівні у відповідні імена на фізичному рівні. Використовуючи різні комбінації макрокоманд, можна добитися потрібного поведінки при іменуванні об’єктів схеми даних.

Рис. 2. Приклад використання макрокоманд в редакторі іменування об’єктів моделі.


У наведеному прикладі використовується макрокоманда виду% 4EntityName, яка вказує на те, що таблиця на фізичному рівні подання буде мати ім’я відповідної суті, обмежене чотирма першими символами.


Вище були розглянуті найбільш прості приклади використання мови макрокоманд ERwin DM. Перед тим, як розглянути більш складні приклади, познайомимося трохи ближче з самим мовою макрокоманд.


Мова макрокоманд складається з 195 команд.


В ERwin DM включена спеціальна панель інструментів – Macro Toolbox для роботи з макрокомандами. За допомогою даної панелі можна вибрати потрібну макрокоманду зі списку, переглянути синтаксис вибраної дії і отримати довідку щодо її використання.

Рис. 3. Панель інструментів Marco Toolbox.


Розглянемо синтаксис однієї з макрокоманд ERwin DM.


%ForEachColumn(<table>,<separator>,<sort order>) { <macro code> }


Фраза %ForEachColumn є назвою дії. Всі фрази, укладені в лапки (<>), є змінними дії, дужки і коми вказують на необхідний синтаксис.


%ForEachColumn(cust,”,”){%ColName} – В результаті дії цієї дії буде виведений список стовпців таблиці cust.


Дії, що виконуються за допомогою мови макрокоманд ERwin DM подібні діям, що виконуються в інших мовах програмування, і включають в себе:

























Тип дії Макрокоманда
визначення змінних

%ChildFKDecl
%ChildNKDec
l%ChildParamDecl
%ChildPKDecl
%Decl
%NKDecl
%ParamDecl
%ParentNKDecl
%ParentParamDecl
%ParentPKDecl
%PKDecl

виконання арифметичних операцій %-
%*
%/
%+
використання операцій порівняння і логічних операцій

%!=
%<
%<=
%= =
%>
%>=
%And
%Not
%Or

розгалуження %If
%Else
%Switch
організація циклів %ForEachAtt
%ForEachAttribute
%ForEachChildRel
%ForEachColumn
%ForEachDefault
%ForEachDomain
%ForEachEntity
%ForEachFKAtt
%ForEachFKAttribute
%ForEachFKColumn
%ForEachIndex
%ForEachIndexMem
%ForEachKey
%ForEachKeyMem
%ForEachLogEntity
%ForEachParentRel
%ForEachTable
%ForEachValidation
%ForEachValidValue
%ForEachView
%ForEachViewColumn
робота з зовнішніми файлами %File
%Include
%Lookup

Перейдемо до використання макрокоманд в тригерах. Як відомо, одним із завдань, що стоять перед сучасними СУБД, стоїть завдання підтримки логічної цілісності даних. Реляційні бази складаються з таблиць, пов’язаних між собою за допомогою механізму ключів. Для підтримки цілісності між двома таблицями використовується тригер посилальної цілісності (RI тригер). У загальному випадку текст тригера залежить від типу зв’язку таблиці, з якою він пов’язаний (тригер для батьківської таблиці, тригер для дочірньої таблиці) і від дії, при якому він спрацьовує (додавання, зміна, видалення запису в таблиці). В ERwin DM використовується набір шаблонів для реалізації тригерів посилальної цілісності. Тексти шаблонів залежать від типу сервера бази даних. Шаблони являють собою спеціальні скрипти, в яких використовуються макрокоманди ERwin DM. При генерації тригерів замість макрокоманд підставляються імена таблиць, колонок, змінних і інших фрагментів коду, що відповідають синтаксису вибраної дії. Для кожної комбінації посилальної цілісності (наприклад, Parent-Delete Cascade) в ERwin DM існує зумовлений шаблон, однак у користувача є можливість перевизначити цей шаблон, причому зробити це можна на трьох рівнях: на рівні всієї схеми, на рівні окремої таблиці і на рівні окремої зв’язку. Надалі на етапі генерації коду DDL використовуватиметься шаблон, перевизначення користувачем.


Розглянемо, яким чином використовуються макрокоманди в шаблонах тригерів посилальної цілісності. У схемі даних існують дві таблиці: відділ і співробітник, між ними існує неідентіфіцірующей зв’язок між полями отдел.ід_отд і сотруднік.ід_отд. У правилах посилальної цілісності цьому зв’язку була обрана опція Parent-Delete RESTRICT, в результаті якої забороняється видаляти рядок в таблиці відділ, Якщо існують записи, що посилаються на цей рядок з таблиці співробітник.


Шаблон на даний тригер виглядає наступним чином:


/* ERwin Builtin %Datetime */
/* %Parent %VerbPhrase %Child ON PARENT DELETE RESTRICT */
select count(*) into numrows
from %Child
where
/* %%JoinFKPK(%Child,:%%Old,” = “,” and”) */
%JoinFKPK(%Child,:%Old,” = “,” and”);
if (numrows > 0)
then
raise_application_error(
-20001,
“Cannot DELETE %Parent because %Child exists.”
);
end if;


При генерації буде створено наступний тригер


create trigger tD_Отдел after DELETE on Відділ for each row
— ERwin Builtin Wed Oct 15 17:06:44 2003
– DELETE trigger on Відділ
declare numrows INTEGER;
begin
/* ERwin Builtin Wed Oct 15 17:06:44 2003 */
/ * Відділ R / 2 Співробітник ON PARENT DELETE RESTRICT * /
select count(*) into numrows
from Співробітник
where
Сотруднік.ід_отд =: old.ід_отд;
if (numrows > 0)
then
raise_application_error(
-20001,
“Cannot DELETE Відділ because Співробітник exists.”
);
end if;
end;


Крім використання стандартних шаблонів користувач може створити свій власний шаблон. Наведемо приклад створення користувацького шаблона тригера.


create trigger %TriggerName
%Fire %Actions(” or “)
on %TableName
%RefClause
%Scope
/* ERwin Builtin %Datetime */
/* default body for %TriggerName */
begin
Insert into Security (OldName, NewName, UserUpdate, UpdateDate)
values (:old1.CustomerName, :new1.CustomerName, User, Sysdate);
end;
/


В результаті використання цієї дії будь-яка зміна в таблиці Customer, буде фіксуватися в таблиці Security, а саме колишнє значення імені, нове значення, дата зміни та ім’я користувача, провадила зміни. На етапі генерації коду SQL ця макрокоманда буде виглядати наступним чином.


create trigger SecurWrite
BEFORE UPDATE OF
CustomerName
on CUSTOMER
REFERENCING OLD AS old1 NEW AS new1
for each row
/* ERwin Builtin %Datetime */
/* default body for %TriggerName */
begin
Insert into Security (OldName, NewName, UserUpdate, UpdateDate)
values (:old1.CustomerName, ;new1.CustomerName, User, Sysdate);
end;
/


Перенесення логіки додатки з клієнтської частини на серверну частину надає цілий ряд переваг, серед яких: зниження вартості супроводу системи, збільшення рівня безпеки додатки, зменшення мережевого трафіку. Основним засобом реалізації даного підходу є використання збережених процедур. Для написання збережених процедур в ERwin DM можна також використовувати мову макрокоманд.


Створення збережених процедур за допомогою мови макрокоманд не відрізняється від створення тригерів.


Як вже було сказано вище, мова макрокоманд ERwin DM, також може бути використаний для створення пре-і пост-скриптів. В ERwin DM є можливість створення шаблонів скриптів, які можуть бути використані на етапі прямого генерування. Можуть бути скрипти рівня всієї схеми і рівня таблиці. За часом генерації скрипти можуть ділитися на прескріпти і постскріпти. Генерація коду прескріпта відбувається перед генерацією основного об’єкта, з яким цей скрипт пов’язаний, і відповідно генерація коду постскріпта здійснюється після генерації об’єкта. Проілюструємо використання макрокоманд на прикладі створення прескріпта рівня всієї схеми і постскріпта рівня таблиці.


Скрипт рівня схеми буде виконуватися для всієї схеми всього лише раз, на відміну від скрипта рівня таблиці, текст якого може дублюватися для ряду – як таблиць, так і уявлень.


Наступний прескріпт рівня схеми дозволяє перед генерацією SQL коду перевірити базу даних на наявність таблиць з іменами, збігаються з таблицями у схемі даних, і в разі якщо такі є, попередньо їх видалити.


%ForEachTable() {
If Exists (select * from sysobjects where name = “%TableName”) Drop table %TableName
%DMBSDelim
}


примітка – скрипт написаний для СУБД MS SQL Server 2000


Цей скрипт легко можна перетворити до скрипта рівня таблиці, видаливши макрокоманду% ForEachTable (), в цьому випадку скрипт буде виглядати наступним чином


If Exists (select * from sysobjects where name = “%TableName”) Drop table %TableName
%DMBSDelim


Наступний скрипт використовується для надання привілеїв на вибірку з таблиці певному користувачеві.


grant select on %TableName to %TableProp(GrantSelect)
%DBMSDelim


В ERwin DM існує механізм властивостей, визначених користувачем (UDP – user defined property), які дозволяють істотно розширити функціональність продукту. У наведеному вище прикладі використовується UDP під назвою GrantSelect, в якому перераховані всі користувачі бази даних. На етапі моделювання кожної таблиці присвоюється даний UDP і в ньому зазначаються користувачі, які будуть мати привілей на вибірку з таблиці. На етапі генерації коду SQL обраним користувачам буде надано привілей на вибір з відповідних таблиць.


AllFusion ERwin Data Modeler є потужним засобом, що дозволяє створювати, документувати і супроводжувати бази даних. Мова макрокоманд, включений до складу даного продукту, дозволяє генерувати SQL-код, наближений до коду діалектів SQL конкретних виробників СУБД.


Додаткова інформація



Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*