КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
Использование системы CASE Studio для проектирования концептуальной и физической моделей базы данных
CASE Studio является профессиональным инструментом проектирования баз данных. Система предназначена для визуального создания и модификации диаграмм "сущность-связь" (ERD) и диаграмм потоков данных (DFD). Уровень представления ER-диаграмм может быть различен: от простейшего вида (имена сущностей и связи между ними) и до полной физической модели для выбранной СУБД. Сложные модели данных могут быть разбиты на отдельные логические фрагменты - субмодели. Для разработанных диаграмм далее может быть сгенерирован программный код для создания таблиц, индексов, связей, хранимых процедур, пользователей и других компонентов различных СУБД (см. табл. 3.7.). Кроме того, предусмотрена возможность генерации ER-диаграмм для существующей базы данных (Reverse Engineering) с использованием для связи с БД прямого соединения, ODBC или ADO-драйверов. При создании новой модели данных следует задать, для какой СУБД она проектируется, т.к. CASE Studio имеет возможность построения полной физической модели базы данных с использованием индивидуальных свойств каждой БД - типы и свойства атрибутов (стандартные БД и пользователя), возможности описания ключей (первичные и внешние), связей, условий соблюдения ссылочной целостности, пользователей и их групп (ролей); возможности написания хранимых процедур и пр. В последующем можно будет выполнить конверсию физической модели для другой СУБД (меню Model - Database Convertion) с сохранением в виде копии. Создание новой модели может начинаться с задания только имен сущностей и связей между ними, как показано на рис. 3.2, который соответствует описанному выше примеру. Связи (неидентифицирующего типа) следует создавать в направлении от предполагаемого первичного ключа к внешнему. Для всех связей в модели заданы условия соблюдения ссылочной целостности: каскадные изменения при изменении и удалении данных в главной таблице и контроль с запретом неверного ввода (restrict) в операциях обновления и добавления данных в дочерних таблицах (см. рис. 3.3). Далее для каждой сущности в окне свойств (рис. рис. 3.4) можно задать название соответствующей ей таблицы в физической модели, названия атрибутов концептуальной модели и полей физической модели с указанием их типа, размера, с заданием ключей, надписей (Notes), описаний и пр. Следует отметить, что для описания полей физической модели необходимо знать типы данных той СУБД, для которой она разрабатывается. В последующем будут разобраны типы данных полей в системах Visual FoxPro, Microsoft Access и Microsoft SQL Server. После описания всех атрибутов и полей может быть использована различная детализация показа концептуальной (в меню View - Display Level, см. рис. 3.5) и физической (в меню View нужно поставить галочку у позиции Physical View) моделей. На рис. 3.6 показана концептуальная модель для описанного выше примера, на рис. рис. 3.7 - физическая модель для СУБД Oracle 9i. Далее можно описать права групп пользователей и права отдельных пользователей (меню системы пункт Model - Users Roles и Model - Users), если эту информацию нужно использовать при создании базы данных. На основе описания физической модели был сгенерирован текст программ для создания базы данных в СУБД Oracle (в меню системы пункт Model - Script Generation) и, после конвертации модели, - для Microsoft Access. Сгенерированная Case Studio SQL-программа создания таблиц базы данных для сервера Oracle /*Created 02.02.2006Modified 03.02.2006Project KontingentModel StudentsCompany AGTUAuthor GroshevVersion 2006.1Database Oracle 9i */Create table "Student" ("Nz" Char(7) NOT NULL, "Fio" Char(45), "date_p" Date, "n_fclt" Decimal(2,0) NOT NULL, "n_spect" Char(9) NOT NULL, "kurs" Decimal(1,0), "n_grup" Char(10), "n_pasp" Char(10)) /Create table "Ocenki" ("semestr" Decimal(2,0), "n_predm" Decimal(2,0) NOT NULL, "ball" Char(1), "data_b" Date, "Prepod" Char(45), "Nz" Char(7) NOT NULL) /Create table "Predmet" ("n_predm" Decimal(2,0) NOT NULL, "name_p" Char(120)) /Create table "FCLT" ("n_fclt" Decimal(2,0) NOT NULL, "name_f" Char(120)) /Create table "SPECT" ("n_spect" Char(9) NOT NULL, "name_S" Char(120)) /Alter table "Student" add primary key ("Nz") /Alter table "Predmet" add primary key ("n_predm") /Alter table "FCLT" add primary key ("n_fclt") /Alter table "SPECT" add primary key ("n_spect")/Alter table "Ocenki" add foreign key ("Nz") references "Student" ("Nz") on delete cascade/Alter table "Ocenki" add foreign key ("n_predm") references "Predmet" ("n_predm") on delete cascade/Alter table "Student" add foreign key ("n_fclt") references "FCLT" ("n_fclt") on delete cascade/Alter table "Student" add foreign key ("n_spect") references "SPECT" ("n_spect") on delete cascade/-- Update trigger for StudentCreate Trigger "tu_Student" after update of "Nz","n_fclt","n_spect"on "Student" referencing new as new_upd old as old_upd for each rowdeclare numrows integer;begin -- cascade child Ocenki update when parent Student changed if (:old_upd."Nz"!=:new_upd."Nz") then begin update "Ocenki" set "Nz" =:new_upd."Nz" where "Ocenki"."Nz" =:old_upd."Nz"; end; end if; -- restrict parent SPECT when child Student updated if:new_upd."n_spect"!=:old_upd."n_spect" then begin select count(*) into numrows from "SPECT" where:new_upd."n_spect" = "SPECT"."n_spect"; if (numrows = 0) then begin RAISE_APPLICATION_ERROR(-20002,'Parent does not exist. Cannot update child.'); end; end if; end; end if; -- restrict parent FCLT when child Student updated if:new_upd."n_fclt"!=:old_upd."n_fclt" then begin select count(*) into numrows from "FCLT" where:new_upd."n_fclt" = "FCLT"."n_fclt"; if (numrows = 0) then begin RAISE_APPLICATION_ERROR(-20002,'Parent does not exist. Cannot update child.'); end; end if; end; end if; end;/-- Update trigger for OcenkiCreate Trigger "tu_Ocenki" after update of "n_predm","Nz"on "Ocenki" referencing new as new_upd old as old_upd for each rowdeclare numrows integer;begin -- restrict parent Predmet when child Ocenki updated if:new_upd."n_predm"!=:old_upd."n_predm" then begin select count(*) into numrows from "Predmet" where:new_upd."n_predm" = "Predmet"."n_predm"; if (numrows = 0) then begin RAISE_APPLICATION_ERROR(-20002,'Parent does not exist. Cannot update child.'); end; end if; end; end if; -- restrict parent Student when child Ocenki updated if:new_upd."Nz"!=:old_upd."Nz" then begin select count(*) into numrows from "Student" where:new_upd."Nz" = "Student"."Nz"; if (numrows = 0) then begin RAISE_APPLICATION_ERROR(-20002,'Parent does not exist. Cannot update child.'); end; end if; end; end if; end;/-- Update trigger for PredmetCreate Trigger "tu_Predmet" after update of "n_predm"on "Predmet" referencing new as new_upd old as old_upd for each rowdeclare numrows integer;begin -- cascade child Ocenki update when parent Predmet changed if (:old_upd."n_predm"!=:new_upd."n_predm") then begin update "Ocenki" set "n_predm" =:new_upd."n_predm" where "Ocenki"."n_predm" =:old_upd."n_predm"; end; end if;end;/-- Update trigger for FCLTCreate Trigger "tu_FCLT" after update of "n_fclt"on "FCLT" referencing new as new_upd old as old_upd for each rowdeclare numrows integer;begin -- cascade child Student update when parent FCLT changed if (:old_upd."n_fclt"!=:new_upd."n_fclt") then begin update "Student" set "n_fclt" =:new_upd."n_fclt" where "Student"."n_fclt" =:old_upd."n_fclt"; end; end if;end;/-- Update trigger for SPECTCreate Trigger "tu_SPECT" after update of "n_spect"on "SPECT" referencing new as new_upd old as old_upd for each rowdeclare numrows integer;begin -- cascade child Student update when parent SPECT changed if (:old_upd."n_spect"!=:new_upd."n_spect") then begin update "Student" set "n_spect" =:new_upd."n_spect" where "Student"."n_spect" =:old_upd."n_spect"; end; end if;end;/-- Insert trigger for StudentCreate Trigger "ti_Student" after inserton "Student" referencing new as new_ins for each rowdeclare numrows integer;begin-- restrict child Student when parent SPECT insertif (:new_ins."n_spect" is not null) then begin select count(*) into numrows from "SPECT" where:new_ins."n_spect" = "SPECT"."n_spect"; IF (numrows = 0) then begin RAISE_APPLICATION_ERROR(-20004,'Parent does not exist. Cannot insert child.'); end; end if; end;end if;-- restrict child Student when parent FCLT insertif (:new_ins."n_fclt" is not null) then begin select count(*) into numrows from "FCLT" where:new_ins."n_fclt" = "FCLT"."n_fclt"; IF (numrows = 0) then begin RAISE_APPLICATION_ERROR(-20004,'Parent does not exist. Cannot insert child.'); end; end if; end;end if;end;/-- Insert trigger for OcenkiCreate Trigger "ti_Ocenki" after inserton "Ocenki" referencing new as new_ins for each rowdeclare numrows integer;begin-- restrict child Ocenki when parent Predmet insertif (:new_ins."n_predm" is not null) then begin select count(*) into numrows from "Predmet" where:new_ins."n_predm" = "Predmet"."n_predm"; IF (numrows = 0) then begin RAISE_APPLICATION_ERROR(-20004,'Parent does not exist. Cannot insert child.'); end; end if; end;end if;-- restrict child Ocenki when parent Student insertif (:new_ins."Nz" is not null) then begin select count(*) into numrows from "Student" where:new_ins."Nz" = "Student"."Nz"; IF (numrows = 0) then begin RAISE_APPLICATION_ERROR(-20004,'Parent does not exist. Cannot insert child.'); end; end if; end;end if;end;/Create role "Stud_admin"/Create role "Dekan"/Grant "Stud_admin" to "Petrov_P_P"/Grant "Dekan" to "Иванов_И_И"//* Roles permissions */Grant select on "Student" to "Stud_admin"/Grant update on "Student" to "Stud_admin"/Grant delete on "Student" to "Stud_admin"/Grant insert on "Student" to "Stud_admin"/Grant references on "Student" to "Stud_admin"/Grant select on "Student" to "Dekan"/Grant update on "Student" to "Dekan"/Grant delete on "Student" to "Dekan"/Grant insert on "Student" to "Dekan"/Grant references on "Student" to "Dekan"/Grant select on "Ocenki" to "Stud_admin"/Grant update on "Ocenki" to "Stud_admin"/Grant delete on "Ocenki" to "Stud_admin"/Grant insert on "Ocenki" to "Stud_admin"/Grant references on "Ocenki" to "Stud_admin"/Grant select on "Ocenki" to "Dekan"/Grant update on "Ocenki" to "Dekan"/Grant delete on "Ocenki" to "Dekan"/Grant insert on "Ocenki" to "Dekan"/Grant references on "Ocenki" to "Dekan"/Grant select on "Predmet" to "Stud_admin"/Grant update on "Predmet" to "Stud_admin"/Grant delete on "Predmet" to "Stud_admin"/Grant insert on "Predmet" to "Stud_admin"/Grant references on "Predmet" to "Stud_admin"/Grant select on "FCLT" to "Stud_admin"/Grant update on "FCLT" to "Stud_admin"/Grant delete on "FCLT" to "Stud_admin"/Grant insert on "FCLT" to "Stud_admin"/Grant references on "FCLT" to "Stud_admin"/Grant select on "SPECT" to "Stud_admin"/Grant update on "SPECT" to "Stud_admin"/Grant delete on "SPECT" to "Stud_admin"/Grant insert on "SPECT" to "Stud_admin"/Grant references on "SPECT" to "Stud_admin"//* Users permissions */Сгенерированная Case Studio программа создания таблиц базы данных для СУБД Access | ||
© 2003-2005 INTUIT.ru. Все права защищены. |
Интернет-Университет Информационных Технологий
http://www.INTUIT.ru
Генерация страницы за: 0.01 сек. |