
- •Лабораторная работа №6 Проектирование реляционных баз данных на основе метода er-диаграмм
- •6.1 Краткие теоретические сведения
- •6.1.1 Концептуальная модель «сущность-связь»
- •Студент
- •6.1.2 Использование Clay Mark II для проектирования баз данных
- •6.1.2.1 Структура процесса моделирования в Clay Mark II
- •6.1.2.2 Создание логической и физической модели бд, генерация схемы бд
- •6.1.2.3 Прямое и реверсное проектирование
- •6.1.3 Пример разработки модели бд с помощью Clay Mark II
- •6.1.3.1 Прямое проектирование
- •6.1.3.2 Реверсное проектирование
- •6.2 Порядок выполнения работы
- •6.3 Требования к отчету:
- •6.4 Контрольные вопросы
6.1.2.2 Создание логической и физической модели бд, генерация схемы бд
С точки зрения пользователя Clay Mark II, процесс создания логической модели БД заключается в визуальном редактировании ER-диаграммы. Диаграмма строится из трех основных блоков: сущностей, атрибутов и связей.
Сущности и атрибуты
На диаграмме сущность изображается прямоугольником. В зависимости от режима представления диаграммы прямоугольник может содержать имя сущности, ее описание, список ее атрибутов и другие сведения. Основная информация, описывающая сущность, включает:
атрибуты, составляющие первичный ключ;
неключевые атрибуты.
Первичный ключ (Primary Key) − это атрибут или набор атрибутов, уникально идентифицирующий экземпляр сущности. Если несколько наборов атрибутов могут уникально идентифицировать сущность, то выбор одного из них осуществляется разработчиком на основании анализа предметной области (ПрО) и учета следующих требований к первичному ключу:
первичный ключ не должен принимать пустые (NULL) значения;
первичный ключ не должен изменяться в течение времени;
размер первичного ключа должен быть минимальным.
При этом если разработчик считает, что какой-либо из оставшихся атрибутов или набор атрибутов, не идентифицируют уникально экземпляры сущности, но часто используются для доступа к данным, то он может определить его в качестве индекса (Index).
Рассмотрим вышесказанное на примере сущности СОТРУДНИК:
СОТРУДНИК Отдел
|
Табельный номер Фамилия Имя Отчество Дата рождения Должность |
|
---|---|---|
|
|
Номер отдела Название отдела |
Среди всех атрибутов данной сущности на роль первичного ключа могут претендовать <табельный номер> и группа атрибутов <фамилия>, <имя>, <отчество>, <дата рождения> (последний необходим, т.к. на предприятии могут работать полные тезки). Очевидно, что по соображениям размера в качестве первичного ключа следует выбрать <табельный номер>.
На диаграмме атрибуты, составляющие первичный ключ, могут располагаться в любой части прямоугольника (рекомендуется указывать их первыми), и отделяются от прочих (не входящих в первичный ключ) линией подчеркивания.
Связь в Clay Mark II трактуется как функциональная зависимость между двумя сущностями (в частности, возможна связь сущности с самой собой − рекурсивная связь).
Если рассматривать диаграмму как графическое представление правил ПрО, то сущности именуются существительными, а связи − глаголами. Например, между сущностями ОТДЕЛ и СОТРУДНИК существует связь <состоит из> (ОТДЕЛ состоит из СОТРУДНИКОВ). На рисунке 6.5 приведен пример связи.
Рисунок 6.5 – Пример связи
В Clay Mark II связи определяются четырьмя основными элементами:
родительская и дочерняя (зависимая) сущности;
степень связи;
роли связи;
требования по обеспечению ссылочной целостности.
При определении связи миграция атрибутов первичного ключа родительской сущности в соответствующую область атрибутов дочерней сущности не происходит. Поэтому такие атрибуты следует вводить вручную.
Степень связи (Multiplicity) представляет собой отношение количества экземпляров родительской сущности к соответствующему количеству экземпляров дочерней сущности. В Clay Mark II предоставляется 4 предопределенных варианта степени связи и один пользовательский (когда пользователь сам определяет требуемое количество экземпляров сущностей, участвующих в связи):
0 или 1 (0..1);
0 или много (1 .. *);
1 или 1 (1 .. 1);
1 или много (1 .. *).
Роли связи (Source Entity Role). Для именования связи можно использовать название роли каждой сущности, участвующего в этой связи.
Контроль ссылочной целостности. Под ссылочной целостностью в Clay Mark II понимается обеспечение требования, чтобы значения внешнего ключа экземпляра дочерней сущности соответствовали значениям первичного ключа в родительской сущности, В целях контроля ссылочной целостности для каждой связи могут быть заданы требования по обработке операций INSERT/UPDATE/DELETE для родительской и дочерней сущности. Clay Mark II предоставляет следующие варианты обработки этих событий:
отсутствие проверки (NO ACTION);
запрет операции (RESTRICT);
каскадное выполнение операции (CASCADE);
установка NULL-значения (SET NULL);
установка заданного значения по умолчанию (SET DEFAULT).
Перед началом моделирования разработчику необходимо выбрать конкретную СУБД. Для переключения между уровнями отображения модели используются соответствующие кнопки меню Clay Mark II.
На уровне физической модели сущности соответствует таблица в реальной СУБД, атрибуту сущности − столбец таблицы, связи − внешний ключ, первичным ключам − уникальные значения. Clay Mark II не производит автоматическое присваивание имен элементов логической модели элементам физической модели, поэтому разработчику необходимо проделывать это вручную. Для идентификаторов объектов логической модели можно использовать национальный или латинский алфавит. Идентификаторы объектов физической модели (имена таблиц, столбцов и индексов) придется ввести на латинице.
Д
Department
Рисунок 6.6 – Физическая модель БД
Для реализации связи «многие-ко-многим» необходимо создать отдельную сущность, которая будет представлена на логическом и физическом уровне модели. В Clay Mark II выполнить это автоматически нельзя.
Схема базы даных генерируется на основе физической модели в виде SQL-скрипта (Script File − файла с расширением sql). Например, для физической модели, изображенной на рисунке 6.6, под PostgreSQL будет сгенерирована следующая схема:
DROP INDEX IX_empl_1;
DROP TABLE Employee;
DROP TABLE Department;
CREATE TABLE Department (
id SERIAL NOT NULL
, DepartmentName VARCHAR(18) NOT NULL
, PRIMARY KEY (id)
);
CREATE UNIQUE INDEX IX_empl_1 ON Department (DepartmentName);
CREATE TABLE Employee (
id SERIAL NOT NULL
, employeeLastName VARCHAR(18) NOT NULL
, employeeFirstName VARCHAR(18) NOT NULL
, employeeMiddleName VARCHAR(18) NOT NULL
, employeeBirthDay DATE NOT NULL
, employeePosition VARCHAR(18) NOT NULL
, departmentID INTEGER NOT NULL
, PRIMARY KEY (id)
, CONSTRAINT dpFK FOREIGN KEY (departmentID)
REFERENCES Department (id) ON DELETE RESTRICT ON UPDATE CASCADE
);
В соответствии с данным SQL-скриптом в схему БД будут включены: две таблицы, уникальный индекс для атрибута «Название отдела», два первичных ключа, один внешний ключ и операторы удаления индекса и таблиц, если они ранее были созданы.