Лабораторная
 

Лабораторная работа №5

по курсу СУБД ORACLE

“Проектирование БД в PowerDesigner”

Введение

Данная лабораторная работа ориентированна на изучение CASE средства (Computer Aides Software Engineering) проектирования баз данных в Sybase PowerDesigner (на примере версии 9.5.2).

PowerDesigner это специальное программное средство которое позволяет вести разработку схем баз данных в наглядной форме. Используя PowerDesigner пользователь создает модель данных в виде ER-диаграммы (диаграммы “Cущность-Связь”), затем на основе этой модели PowerDesigner автоматически формирует команды на языке SQL для создания базы данных.

PowerDesigner является универсальным средством разработчика баз данных, он позволяют формировать описание баз данных для различных СУБД (не только для ORACLE). В лабораторной работе рассматриваются только основные возможности и функции PowerDesigner, необходимые для овладения данным инструментом.

Справочные материалы

Для самостоятельного изучения и подготовки к лабораторной работе рекомендуются следующие справочные материалы (на англ. языке):

GeneralFeatures.pdf — Sybase PowerDesigner. General Features Guide. Version 9.5.1 38093-01-0951-01

CDM_Tutorial.pdf — Sybase PowerDesigner. Conceptual Data Model. Getting Started Version 9.5.1 38085-01-0951-01

PDM_Tutorial.pdf — Sybase PowerDesigner. Physical Data Model. Getting Started Version 9.5.1 38083-01-0951-01

Задание

1.       Создать простую концептуальную модель данных в PowerDesigner (в соответствии с вариантом, см. ниже)

2.       Сгенерировать физическую модель данных для СУБД ORACLE в PowerDesigner

3.       На основе созданной физической модели данных построить SQL сценарий для ORACLE

4.       Запустить этот сценарий с помощью утилиты SQL Plus.


Варианты задания

1.      Модель счетов за услуги в рамках проекта:

2.      Модель данных о закупках:

3.      Модель производства деталей машин

Пример

В данном примере для иллюстрации основных возможностей и функций PowerDesigner рассматривается процесс проектирования простой модели данных.

Модель данных

Модель данных описывает работу обычной библиотеки (учет книг, посетителей и сотрудников библиотеки).

В модели выделены следующие сущности предметной области:

1.      Книга (Book)

2.      Человек (Person)

3.      Библиотека (Library)

Связи между сущностями:

1.      ЗаписанВБиблиотеку (RegisteredInLibrary)

2.      РаботаетВБиблиотеке (WorksAtLibrary)

3.      ХранитсяВБиблиотеке (StoredInLibrary)

4.      ВзялКнигу (ТookBook)

Для простоты и наглядности при создании модели будем использовать естественные данные для ключевых полей:

1.      Книга (Book) — номер ISBN

2.      Человек (Person) — номер паспорта

3.      Библиотека (Library) — номер библиотеки в городе

ER-диаграмма базы данных, которую мы создадим в данном примере имеет следующий вид (в нотации PowerDesigner):

Модели данных и нотации моделей в PowerDesigner

PowerDesigner позволяет создавать различные модели данных:

—        Концептуальная (инфологическая) модель (Conceptual Data Model, CDM) — общее описание логической структуры данных, независимое от конкретных методов хранения данных и каких-либо программных стредств

—        Физическая (даталогическая) модель (Physical Data Model, PDM) — модель организации данных в рамках конкретной СУБД или определенных методов хранения данных

—        Объекто-ориентированная модель (Object-Oriented Model, OOM) — модель программной системы использующей объектно-ориентированный подход

—        Модель Бизнес Процессов (Buniness Process Model, BPM) — модель описывающая выполнение тех или иных задач, процессов, действий в реальном мире

—        Свободная модель (Free Model, FEM) — произвольное графическое описание чего-либо

При проектировании баз данных в PowerDesigner используются Концептуальная и Физическая модель данных. Как правило разработку схемы будущей базы данных начинают с создания Концептуальной модели. На основе созданной Концептуальной модели PowerDesigner может автоматически сгенерировать Физическую модель данных для той СУБД которая будет указана пользователем.

Начиная работу с создания Концептуальной модели можно абстрагироваться от деталей и тонкостей работы конкретной СУБД, и сконцентрироваться на создании самой модели данных, определении сущностей предметной области и связей между ними.

Разработку Концептуальной модели данных обычно ведут на национальном языке (например Русском), а Физической модели на языке, который поддерживается выбранной СУБД (как правило на Английском). Каждый элемент модели данных (сущность, связь и т.д.) в PowerDesigner имеет имя и код, как правило, в качестве имени используют название этого элемента на национальном языке, а в качестве кода — обозначение элемента на английском языке.

Основной нотацией, к которой отображаются символы модели данных, является общепринятая модель Сущность-Связь (Entity-Relationship) — так называемые ER-диаграммы.

Сущности отображаются в модели в виде прямоугольника следующего вида:

В верхней секции прямоугольника пишется название сущности. В средней — список атрибутов (фактически полей данных). В нижней — список идентификаторов (ключей). Список атрибутов состоит из 4-х колонок: название атрибута, код идентификатора которому принадлежит атрибут, код типа данных, символ <M> для обязательных атрибутов (Mandatory). Атрибуты входящие в первичный ключ (<pi> — primary indentifier) подчеркиваются. Например сущность Библиотека имеет 3 атрибута и один идентификатор с названием Ключ_Библиотека, который является первичным ключом <pi> сущности. Атрибут с названием Номер входит в первичный ключ сущности (поэтому атрибут подчеркнут), имеет тип данных I (Integer, целое число), и является обязательным <М> (т.е. NULL значения для него не допускаются).

Связи между сущностями отображаются в виде линий, оканчивающихся специальными условными обозначениями, связь также как и сущность имеет название:

На рисунке показана связь ВзялКнигу между сущностями Человек и Книга. С помощью условных графических обозначений показываются отношения между сущностями:

Присутствие

Сущности

необязательно

Присутствие

Сущности

обязательно

Однозначная связь

ноль или один

 

один и только один

Многозначная связь

 

ноль или несколько

один или несколько

Каждый такой графический символ относится к той сущности, рядом с которой он указан.

Так, показанный пример моделирует ситуацию в которой Человек  может взять ноль или несколько Книг. А Книга может быть взята нулем или одним Человеком.

Знакомство с PowerDesigner

Главное окно PowerDesigner организовано традиционным образом:

Все элементы модели имеют связанные с ними диалоговые окна свойств, которые вызываются либо через контекстное меню Properties либо двойным щелчком по элементу модели.

При создании модели используется палитра инструментов, инструменты позволяют создавать элементы модели (сущности, связи, надписи, простые графические объекты и т.п.) и управлять их размещением в модели.

Область рабочего окна PowerDesigner разграфлена тонкими черными линиями которые обозначают границы листов бумаги, при печати модели на принтер.

Создание концептуальной модели данных

1.      Запустить программу PowerDesigner:

2.      Выбрать команду File\CloseWorkspace чтобы закрыть Demo Workspace (который открывается по умолчанию)

3.      Выбрать команду File\New… Conceptual Data Model

4.      Выбрать созданную модель (ConceptualDataModel_1) в списке элементов модели и задать имя модели Библиотека и код Library:

5.      Выбрать в палитре инструмент Entity (Сущность) и создать новую сущность в модели:

6.      Вызвать окно свойств сущности (пункт Properties в контекстном меню сущности или двойной щелчок по символу сущности в модели) и изменить название сущности на Книга и ее код на Book:

7.      Перейди на закладку Attributes (Атрибуты) и ввести атрибуты сущности, как показано на рисунке:







8.      Перейти на закладку Indetifiers (идентификаторы) и создать первичный ключ сущности как показано на рисунках:

9.      Аналогичным образом создать сущности Человек и Библиотека:

! Обратите внимание на то, что в списке элементов модели отображаются все использованные элементы данных (атрибуты) и созданные сущности. При настройках среды PowerDesinger “по умолчанию” элементы данных (атрибуты) с одинаковыми кодами (поле Code в свойствах) считаются одним и тем же элементом, поэтому изменение его параметров в определении одной сущности приведет к его изменению во всех остальных сущностях где он используется.

10.  Выбрать в палитре инструмент Relationship (Связь) и создать новую связь в модели — от сущности Библиотека к Книга (для создания связи нужно подвести инструмент к сущности Библиотека, нажать левую кнопку мыши, и удерживая ее вести мышь к сущности Книга, и отпустить левую кнопку мыши над сущностью Книга):

11.  Вызвать окно свойств сущности (пункт Properties в контекстном меню связи или двойной щелчок по символу связи в модели) и изменить название и код связи на ХранитсяВБиблиотеке и StoredInLibrary:

12.  Перейти на закладку Details и указать тип связи Многие-ко-Многим (Many-Many) и значность связи (Cardinality) 0,n (ноль или несколько):

13.  Аналогично создать связь типа Многие-к-Одному между сущностями Книга и Человек:

14.  Аналогично создать связи ЗаписанВБиблиотеку и РаботаетВБиблиотеке:

Генерация физической модели данных для СУБД ORACLE

15.  Выполните проверку созданной концептуальной модели, командой Tools\CheckModel, при это отметьте все элементы для проверки. В концептуальной модели не должно быть ошибок, препятствующих генерации физической модели:







16.  Выберите команду Tools\GeneratePhysicalDataModel, укажите что Вы желаете создать модель для СУБД ORACLE и нажмите Ok:




17.  По концептуальной модели будет сгенерирована физическая модель для СУБД ORACLE (сущности и связи преобразованы в таблицы, первичные и внешние ключи):

! Обратите внимание что связи типа Многие-ко-Многим были преобразованы в таблицы. Кроме того все типы данных использованные в концептуальной модели были преобразованы в типы данных специфичные для СУБД.

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

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

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

19.  Для генерации SQL сценария базы данных перейдите к физической модели и в выберите команду Database\GenerateDatabase…:

Проверьте параметры генерации SQL сценария, укажите имя файла в который следует сохранить 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;

/*==============================================================*/

/* 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 */

/*==============================================================*/