Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
СУБД Oracle / Лабы / Oracle2 / lab5 / with_sequences / lab5_with_sequences.doc
Скачиваний:
88
Добавлен:
16.04.2013
Размер:
7.16 Mб
Скачать

Генерация sql сценария базы данных

На основе созданной физической модели данных PowerDesigner может автоматически сгенерироватьSQL сценарий базы данных

  1. Перед генерацией SQL сценария создайте последовательность значений (SEQUENCE)и триггер для автоматического заполнения колонкиLIBNUMBER таблицыLIBRARY: Откройте свойства таблицыLIBRARY, щелкните на закладкеColumns, откройте свойства колонкиLIBNUMBERи создайте новую последовательностьSEQ_LIBNUMBERдля этой колонки. Выполните генерацию триггеров: Tools\RebuildObjects\RebuildTriggers

  2. При генерации SQL сценария необходимо учитывать ограничения целевой СУБД, в частности в СУБДORACLE(8.1.6i) длина идентификаторов ограничена 30 символами.

  3. Для генерации 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);

  1. Аналогичным образом создайте сценарий для триггеров 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;

/

Соседние файлы в папке with_sequences