Нормальные формы ER-диаграмм. Одним из этапов проектирования БД является нормализация инфологической модели. Нормализация – уменьшение избыточности данных. Сводится к добавлению новых сущностей в инфологическую модель, т.е. мы рассматриваем каждую сущность, выявляем в ней повторяющиеся наборы атрибутов и, если таковые имеются, то выделяем эти наборы в новую сущность. В нормализованной сущности должен быть только один вид связи: «один-ко-многим». Существует 5 нормальных форм, но на практике будем использовать только 3 из них. Каждая форма включает свойства предыдущей. В первой нормальной форме ER-диаграммы устраняются повторяющиеся атрибуты. Производится выявление неявных сущностей замаскированных под атрибуты. Во второй нормальной форме устраняются атрибуты, зависящие только ключа. Эта часть ключа служит основой для выделения новых сущностей. В третьей нормальной форме устраняются атрибуты, зависящие от атрибутов, не входящих в ключ. При правильном определении сущности инфологическая модель сразу получается 3 формы. Построение нормализованных диаграмм сразу основано на методе последовательного уточнения первоначальной диаграммы. Получение реляционной схемы из ER-схемы Шаг 1. Каждая простая сущность превращается в таблицу. Имя сущности становится именем таблицы. Шаг 2. Каждый атрибут становится возможным столбцом с тем же именем Для каждого столбца может выбираться дополнительный формат и свойства. Шаг 3. Компоненты уникального идентификатора сущности превращаются в первичный ключ таблицы. Шаг 4. Связи «многие-к-одному» (и «один-к-одному») становятся внешними ключами. Для этого делается копия ключевого атрибута с конца связи «один» в сущность на сторону «многим» и эти столбцы будут составлять внешний ключ. Пример разработки простой ER-модели При разработке ER-модели мы должны получить информацию о предметной области: 1. Список сущностей предметной области. 2. Список атрибутов сущностей. 3. Описание взаимосвязей между сущностями. Процесс выделения сущностей, атрибутов и связей – итерационный (пошаговый). Сначала разрабатывается первый приближенный вариант, который в дальнейшем уточняется при помощи дополнительных исследований предметной области. Задача. Разработать информационную систему по заказу некоторой оптовой торговой фирмы. Проектируемая система должна выполнять следующие действия: 1. Хранить информацию о покупателях. 2. Печатать накладные на отпущенные товары. 3. Следить за наличием товаров на складе. Выделим в этих предложениях существительные – кандидаты на сущность: Существительные: Покупатель – сущность; Накладная – сущность; Товар – сущность; (?)Склад – если склад один – то атрибут, если складов несколько – то сущность; (?)Наличие товара – атрибут. Связь между сущностями: Покупатели могут покупать много товаров Товары могут продаваться многим покупателям Получили первый приблизительный вариант диаграммы: Выясняем что фирма имеет несколько складов и каждый товар может хранится на нескольких складах и быть проданным с любого склада. Связи сущностей «Накладная», «Склад», «Покупатель», «Товар»: Покупатели покупают товары, получая при этом накладные, в которые внесены данные о количестве и цене купленного товара. Каждый покупатель может получить несколько накладных. Каждая накладная обязана выписываться на одного покупателя. Каждая накладная обязана содержать несколько товаров. Каждый товар, в свою очередь, может быть продан нескольким покупателям через несколько накладных. Каждая накладная должна быть выписана с определенного склада, и с любого склада может быть выписано много накладных. Получили второй уточненный вариант диаграммы: Атрибуты сущностей: Каждый покупатель является юридическим лицом и имеет наименование, адрес, банковские реквизиты. Каждый товар имеет наименование, цену, а также характеризуется единицами измерения. Каждая накладная имеет уникальный номер, дату выписки, список товаров с количествами и ценами, а также общую сумму накладной. Накладная выписывается с определенного склада и на определенного покупателя. Каждый склад имеет свое наименование. Чтобы определить атрибуты выпишем существительные - потенциальные атрибуты: Юридическое лицо – не атрибут т.к. фирма работает только с юридическими лицами; Наименование покупателя – атрибут покупателя; Адрес – атрибут покупателя; Банковские реквизиты – атрибут покупателя; Наименование товара – атрибут товара; (?)Цена товара – атрибут товара и атрибут накладной (в зависимости отличается ли цена товара от товара в накладной); Единица измерения – атрибут товара; Номер накладной – атрибут накладной; Дата накладной – атрибут накладной; (?)Список товаров в накладной (?)Количество товара в накладной - это характеристика не просто Товара, а Товара в накладной – характеристика не просто «Товара», а «Товара в накладной»; (?)Цена товара в накладной Сумма накладной (стоимость всех товаров) – зависимая характеристика накладной, но не атрибут; Наименование склада – атрибут склада. Дальнейшие исследования показали, что каждый товар имеет текущую цену, цена одного товара в разных накладных, выписанных в различное время, может быть разной. Имеем две цены: цена товара в накладной; текущая цена товара. Так как связь «Накладная-Товар» это связи «много-ко-многим», то её необходимо разделить на связи «один-ко-многим», для этого введем дополнительную сущность «Список товаров в накладной». Связи сущности «Список товаров в накладной» с сущностями «Накладная» и «Товар» характеризуется следующим: Каждая накладная обязана иметь несколько записей из списка товаров в накладной, Каждая запись из списка товаров в накладной обязана включаться ровно в одну накладную, Каждый товар может включаться в несколько записей из списка товаров в накладной, Каждая запись из списка товаров в накладной обязана быть связана ровно с одним товаром. Атрибуты сущности «Список товаров в накладной»: Количество товара в накладной; Цена товара в накладной. Так же нужно разбить связь «Товар-Склад». Дополнительной сущностью будет «Товар на складе». Связи сущности «Товар на складе» с сущностями «Склад» и «Товар»: Товар будет числится на любом складе; На каждом складе будет количество товара. Атрибут сущности «Товар на складе»: Количество товара на складе. Получили концептуальную ER-диаграмму: Перевод инфологической модели в даталогическую с учетом выбранной СУБД. При переводе необходимо учитывать: Доступные наименования таблиц и полей; Доступные типы данных в полях; Дополнительные свойства каждой конкретной СУБД. Для создания в даталогической модели связи «один-ко-многим» необходимо б таблицу на стороне «много» скопировать ключевое поле из таблицы на стороне «один». Физические (даталогическая) ER-модель. (на основе программы VisualFoxPro)