
- •Лабораторная работа №5 по курсу субд oracle
- •Введение
- •Справочные материалы
- •Модели данных и нотации моделей в PowerDesigner
- •Знакомство с PowerDesigner
- •Создание концептуальной модели данных
- •Генерация физическоймодели данных для субдoracle
- •Генерация sql сценария базы данных
- •Проверка и запуск sql сценария на субдoracle
Какую работу нужно написать?
Генерация sql сценария базы данных
На основе созданной физической модели данных PowerDesigner может автоматически сгенерироватьSQL сценарий базы данных
Перед генерацией SQL сценария создайте последовательность значений (SEQUENCE)и триггер для автоматического заполнения колонкиLIBNUMBER таблицыLIBRARY: Откройте свойства таблицыLIBRARY, щелкните на закладкеColumns, откройте свойства колонкиLIBNUMBERи создайте новую последовательностьSEQ_LIBNUMBERдля этой колонки. Выполните генерацию триггеров: Tools\RebuildObjects\RebuildTriggers
При генерации SQL сценария необходимо учитывать ограничения целевой СУБД, в частности в СУБДORACLE(8.1.6i) длина идентификаторов ограничена 30 символами.
Для генерации SQL сценария базы данных перейдите к физической модели и в выберите командуDatabase\GenerateDatabase…:
Проверьте параметры генерации SQL сценария (в частности убедитесь, что на закладкеDatabase включена генерация последовательностейCreate/Drop Sequences), укажите имя файла в который следует сохранитьSQL сценарий и нажмитеOk.
В результате будет создан следующий сценарий:
/*==============================================================*/
/* DBMS name: ORACLE Version 8 */
/* Created on: 05.08.2004 12:39:11 */
/*==============================================================*/
alter table BOOK
drop constraint FK_BOOK_TOOKBOOK_PERSON;
alter table PERSON
drop constraint FK_PERSON_WORKSATLI_LIBRARY;
alter table REGISTEREDINLIBRARY
drop constraint FK_REGISTER_REGISTERE_LIBRARY;
alter table REGISTEREDINLIBRARY
drop constraint FK_REGISTER_REGISTERE_PERSON;
alter table STOREDINLIBRARY
drop constraint FK_STOREDIN_STOREDINL_LIBRARY;
alter table STOREDINLIBRARY
drop constraint FK_STOREDIN_STOREDINL_BOOK;
drop index TOOKBOOK_FK;
drop index WORKSATLIBRARY_FK;
drop index REGISTEREDINLIBRARY2_FK;
drop index REGISTEREDINLIBRARY_FK;
drop index STOREDINLIBRARY2_FK;
drop index STOREDINLIBRARY_FK;
drop table BOOK cascade constraints;
drop table LIBRARY cascade constraints;
drop table PERSON cascade constraints;
drop table REGISTEREDINLIBRARY cascade constraints;
drop table STOREDINLIBRARY cascade constraints;
drop sequence SEQ_LIBNUMBER;
create sequence SEQ_LIBNUMBER
increment by 1
start with 1;
/*==============================================================*/
/* Table: BOOK */
/*==============================================================*/
create table BOOK (
ISBN VARCHAR2(30) not null,
PASSPORTNUMBER VARCHAR2(20),
NAME VARCHAR2(150),
AUTHOR VARCHAR2(70),
PUBLISHER VARCHAR2(50),
CITY VARCHAR2(20),
YEAR NUMBER(4,0),
constraint PK_BOOK primary key (ISBN)
);
/*==============================================================*/
/* Index: TOOKBOOK_FK */
/*==============================================================*/
create index TOOKBOOK_FK on BOOK (
PASSPORTNUMBER ASC
);
/*==============================================================*/
/* Table: LIBRARY */
/*==============================================================*/
create table LIBRARY (
LIBNUMBER INTEGER not null,
ADDRESS VARCHAR2(150),
PHONE VARCHAR2(20),
constraint PK_LIBRARY primary key (LIBNUMBER)
);
/*==============================================================*/
/* Table: PERSON */
/*==============================================================*/
create table PERSON (
PASSPORTNUMBER VARCHAR2(20) not null,
LIBNUMBER INTEGER,
FULLNAME VARCHAR2(70),
ADDRESS VARCHAR2(150),
PHONE VARCHAR2(20),
DATEOFBIRTH DATE,
PHOTO LONG RAW,
constraint PK_PERSON primary key (PASSPORTNUMBER)
);
/*==============================================================*/
/* Index: WORKSATLIBRARY_FK */
/*==============================================================*/
create index WORKSATLIBRARY_FK on PERSON (
LIBNUMBER ASC
);
/*==============================================================*/
/* Table: REGISTEREDINLIBRARY */
/*==============================================================*/
create table REGISTEREDINLIBRARY (
LIBNUMBER INTEGER not null,
PASSPORTNUMBER VARCHAR2(20) not null,
constraint PK_REGISTEREDINLIBRARY primary key (LIBNUMBER, PASSPORTNUMBER)
);
/*==============================================================*/
/* Index: REGISTEREDINLIBRARY_FK */
/*==============================================================*/
create index REGISTEREDINLIBRARY_FK on REGISTEREDINLIBRARY (
LIBNUMBER ASC
);
/*==============================================================*/
/* Index: REGISTEREDINLIBRARY2_FK */
/*==============================================================*/
create index REGISTEREDINLIBRARY2_FK on REGISTEREDINLIBRARY (
PASSPORTNUMBER ASC
);
/*==============================================================*/
/* Table: STOREDINLIBRARY */
/*==============================================================*/
create table STOREDINLIBRARY (
LIBNUMBER INTEGER not null,
ISBN VARCHAR2(30) not null,
constraint PK_STOREDINLIBRARY primary key (LIBNUMBER, ISBN)
);
/*==============================================================*/
/* Index: STOREDINLIBRARY_FK */
/*==============================================================*/
create index STOREDINLIBRARY_FK on STOREDINLIBRARY (
LIBNUMBER ASC
);
/*==============================================================*/
/* Index: STOREDINLIBRARY2_FK */
/*==============================================================*/
create index STOREDINLIBRARY2_FK on STOREDINLIBRARY (
ISBN ASC
);
alter table BOOK
add constraint FK_BOOK_TOOKBOOK_PERSON foreign key (PASSPORTNUMBER)
references PERSON (PASSPORTNUMBER);
alter table PERSON
add constraint FK_PERSON_WORKSATLI_LIBRARY foreign key (LIBNUMBER)
references LIBRARY (LIBNUMBER);
alter table REGISTEREDINLIBRARY
add constraint FK_REGISTER_REGISTERE_LIBRARY foreign key (LIBNUMBER)
references LIBRARY (LIBNUMBER);
alter table REGISTEREDINLIBRARY
add constraint FK_REGISTER_REGISTERE_PERSON foreign key (PASSPORTNUMBER)
references PERSON (PASSPORTNUMBER);
alter table STOREDINLIBRARY
add constraint FK_STOREDIN_STOREDINL_LIBRARY foreign key (LIBNUMBER)
references LIBRARY (LIBNUMBER);
alter table STOREDINLIBRARY
add constraint FK_STOREDIN_STOREDINL_BOOK foreign key (ISBN)
references BOOK (ISBN);
Аналогичным образом создайте сценарий для триггеров Database\GenerateTriggers & Procedures
/*==============================================================*/
/* DBMS name: ORACLE Version 8 */
/* Created on: 17.09.2004 11:33:22 */
/*==============================================================*/
-- Before insert trigger "TIB_LIBRARY" for table "LIBRARY"
create trigger TIB_LIBRARY before insert
on LIBRARY for each row
declare
integrity_error exception;
errno integer;
errmsg char(200);
dummy integer;
found boolean;
begin
-- Column "LIBNUMBER" uses sequence SEQ_LIBNUMBER
select SEQ_LIBNUMBER.NEXTVAL INTO :new.LIBNUMBER from dual;
-- Errors handling
exception
when integrity_error then
raise_application_error(errno, errmsg);
end;
/