На диаграмме ER-экземпляров под названиями сущностей точками рисуют экземпляры соответствующей сущности. В данном случае у нас 4 экземпляра сущности ПОЕЗД и 12 экземпляров сущности ВАГОН. Если экземпляру одной сущности соответствует экземпляр другой сущности, то их соединяют линией соответствия. Например, первый экземпляр сущности ПОЕЗД соответствует первому экземпляру сущности ВАГОН. Проще говоря, первый вагон В1 находится в составе первого поезда П1. 4-й вагон В4 находится в составе второго поезда П2 и т.д.
Определим класс принадлежности сущностей ПОЕЗД и ВАГОН для связи СОСТОИТ_ИЗ.
Вагоны в поезде должны быть обязательно. Не может быть поезда в парке приема, в котором нет ни одного вагона. Следовательно, класс принадлежности сущности ПОЕЗД обязательный.
С другой стороны, все вагоны в парке приема находятся в составе какого-либо поезда. Не может быть так, чтобы какой либо вагон в парке приема не находился в составе поезда. Из этого следует, что класс принадлежности сущности ВАГОН тоже обязательный.
Определим степень связи СОСТОИТ_ИЗ между сущностями ВАГОН и ПОЕЗД.
Сколько вагонов может быть связано с конкретным поездом? – Много. Следовательно, сущность ВАГОН многосвязная.
Сколько поездов может быть связано с конкретным вагоном? – Один. Следовательно, сущность ПОЕЗД односвязная.
Вывод: степень связи СОСТОИТ_ИЗ один-ко-многим и класс принадлежности обеих сущностей обязательный и записывается это так 1: n. (Если класс принадлежности какой-либо сущности необязательный, то единица или n пишется без рамки.)
Такой же вывод о типе связи СОСТОИТ_ИЗ можно сделать по диаграмме ER-экземпляров.
6. Диаграмма ER-типа. Ключ сущности.
Информацию о типе связи можно почерпнуть из диаграммы ER-типа, но определяется тип связи по диаграмме ER-экземпляров.
На диаграмме ER-типа связь обозначается ромбом, а сущности – прямоугольниками, под которыми выписаны атрибуты, характеризующие каждую сущность, причем атрибуты, являющиеся ключами сущностей выделяются подчеркиванием. Ромб соединяется линиями с прямоугольниками.
Если класс принадлежности сущности обязательный, то кружок заносится внутрь прямоугольника, если необязательный – кружок не заносится внутрь прямоугольника. Рядом с кружком проставляется «1» для односвязной сущности или «n» для многосвязной сущности.
Сущность ПОЕЗД характеризуют пять атрибутов, сущность ВАГОН - три. Ключом сущности ПОЕЗД является <№поезда>, потому что по номеру поезда можно отличить один экземпляр сущности ПОЕЗД от другого. Аналогично, ключом сущности ВАГОН является <Инв№вагона>, потому что по инвентарному номеру вагона можно отличить один экземпляр сущности ВАГОН от другого. (Ключ сущности может быть составным!)
Иногда трудно логически определить какую сущность характеризует тот или иной атрибут (вероятно, он характеризует обе сущности), тогда его добавляют в одно из выведенных предварительных отношений после вывода самих предварительных отношений.
7. Правила вывода предварительных отношений. Первичные ключи отношений.
Выведем предварительные отношения, используя диаграмму ER-типа, с помощью 6 правил выводапредварительных отношений.
Правило 1.
Если тип бинарной связи 1: 1, то требуется только одно отношение. Первичным ключом этого отношения может быть любой из ключей двух сущностей.
Правило 2.
Если тип бинарной связи 1:1или 1: 1, то необходимо два отношения. Для каждой сущности необходимо по одному отношению, при этом ключ сущности должен служить первичным ключом соответствующего отношения. Кроме того, ключ необязательной сущности добавляется в качестве атрибута в отношение, выделенное для обязательной сущности.
Правило3
Если тип бинарной связи 1: 1, то необходимо три отношения: по одному для каждой сущности, ключи которых служат в качестве первичных в соответствующих отношениях, и одно отношение для связи. Среди своих атрибутов отношение, выделяемое для связи, будет иметь по одному ключу от каждой сущности.
Правило 4.
Если тип бинарной связи 1: n или 1: n, то достаточно двух отношений: по одному на каждую сущность, при условии, что ключ каждой сущности служит в качестве первичного ключа для соответствующего отношения. Дополнительно ключ односвязной сущности должен быть добавлен как атрибут в отношение, отводимое для многосвязной сущности.
Правило 5.
Если тип бинарной связи 1: n или 1: n, то необходимо три отношения: по одному для каждой сущности, причем ключ каждой сущности служит первичным ключом соответствующего отношения, и одно отношение для связи. Отношение связи должно иметь среди своих атрибутов ключ от каждой сущности.
Правило 6.
Если тип бинарной связи m: n, m: n, m: n, m: n, то необходимо три отношения: по одному для каждой сущности, причем ключ каждой сущности используется в качестве первичного ключа соответствующего отношения, и одно отношение для связи, последнее должно иметь среди своих атрибутов ключ от каждой сущности.
Рассмотрим связь СОСТОИТ_ИЗ между односвязной сущностью ПОЕЗД и многосвязной сущностью ВАГОН, причем класс принадлежности обеих сущностей является обязательным. По правилу №4 для связи между этими двумя сущностями достаточно двух отношений, по одному под каждую сущность, при условии, что ключ каждой сущности является первичным ключом соответствующего отношения. Дополнительно ключ односвязной сущности ПОЕЗД добавляется, как атрибут в отношение, выделенное для многосвязной сущности ВАГОН.
Т.о. первичным ключом предварительного отношения ВАГОН будет Инв№вагона, а отношения ПОЕЗД будет №поезда. Ключи отношения выделены подчеркиванием. (ВНИМАНИЕ: не путать понятия: первичный ключ отношения и ключ сущности!)
В предварительном отношении ПОЕЗД будет пять атрибутов, по количеству атрибутов, характеризующих сущность ПОЕЗД.
А в отношении ВАГОН – четыре, так как кроме трех атрибутов, характеризующих сущность ВАГОН, добавляется еще один атрибут, а именно №поезда, как ключ односвязной сущности ПОЕЗД.
Полученные предварительные отношения можно записать в сокращенном виде (в строку) и в развернутом виде (в табличной форме):
ВАГОН (Инв№вагона, Станция_назначения, Масса_груза, №поезда);
ПОЕЗД (№поезда, Подход, №пути, Момент_прибытия, Момент_ок_роспуска).
Отношение1:ВАГОН
№ поезда | Инвентарный № вагона | Станция назначения | Масса груза в вагоне |
Основа | 14,00 | ||
Лихая | 0,00 | ||
Лихая | 0,00 | ||
Джанкой | 0,00 | ||
Львов | 34,00 | ||
Джанкой | 10,00 | ||
Джанкой | 44,00 | ||
Джанкой | 35,00 | ||
Основа | 0,00 | ||
Джанкой | 34,00 | ||
Львов | 36,00 | ||
Лихая | 42,00 |
Отношение2:ПОЕЗД
№ поезда | Подход | № пути | Момент прибытия | Момент окончания роспуска |
В | 7:40 | 8:15 | ||
А | 7:50 | 8:35 | ||
Г | 7:58 | 8:55 | ||
А | 8:05 |
8. Пробные отношения: распределение атрибутов, не вошедших в состав ни одного из предварительных отношений.
Теперь, если остались еще не распределенные по полученным предварительным отношениям атрибуты, то их распределяют обычно в отношение выделенное для связи или в другое отношение таким образом, чтобы в этом отношении не было избыточно дублированных и неопределенных значений добавляемых атрибутов. В результате получаются пробные отношения.
В рассматриваемом примере мы сразу все атрибуты распределили между выделенными сущностями, поэтому в результате сразу получили набор пробных отношений. Осталось убедиться в том, что все отношения находятся в нормальной форме Бойса-Кодда, т. е. ликвидированы аномалии дублирования (избыточности) и неопределенности данных.
9. Проверка пробных отношений на соответствие НФБК.
Для каждого отношения строим схему функциональных зависимостей.
Возможные ключи | Детерминанты |
<Инв№вагона> | <Инв№вагона> |
Возможные ключи | Детерминанты |
<№поезда> | <№поезда> |
<Момент_ок_роспуска> | |
Сравнив списки детерминантов и возможных ключей пробных отношений ВАГОН и ПОЕЗД, делаем вывод о том, что отношение ВАГОН находится в нормальной форме Бойса-Кодда, так как у него совпадают списки детерминантов и возможных ключей. Таким образом, отношение ВАГОН приняло ту форму, в которой оно будет использоваться в приложении РБД на ПЭВМ.
Списки детерминантов и возможных ключей в отношении ПОЕЗД не совпадают. Следовательно, делаем вывод о том, что отношение ПОЕЗД не находится в нормальной форме Бойса-Кодда. В разработке приложения РБД на ПЭВМ это отношение использовать нельзя. Необходимо выполнить дальнейшую нормализацию отношения ПОЕЗД, выделив атрибут Момент_ок_роспуска в отдельную сущность. Для этого нужно выполнить пункты с 4 по 9 с отношением ПОЕЗД, и тогда проблем в работе с приложением РБД не возникнет.
Из отношения ПОЕЗД выделим сущности ПОЕЗД и МОМЕНТ_ОК_РОСПУСКА. Между ними установим связь РАСФОРМИРОВАН_В.
По диаграмме ER-экземпляров между сущностями ПОЕЗД и МОМЕНТ_ОК_РОСПУСКА тип связи РАСФОРМИРОВАН_В 1: 1.
Сущность ПОЕЗД характеризуют атрибуты №поезда, Подход, №пути и Момент_прибытия. Ключом сущности является №поезда.
Сущность МОМЕНТ_ОК_РОСПУСКА характеризует атрибут Момент_ок_роспуска, он же является ключом сущности.
По правилу №2 для связи между этими двумя сущностями достаточно двух отношений, по одному под каждую сущность, при условии, что ключ каждой сущности является первичным ключом соответствующего отношения. Дополнительно ключ необязательной сущности ПОЕЗД добавляется, как атрибут в отношение, выделенное для обязательной сущности МОМЕНТ_ОК_РОСПУСКА.
Таким образом, первичным ключом предварительного отношения МОМЕНТ_ОК_РОСПУСКА будет Момент_ок_роспуска, а отношения ПОЕЗД будет №поезда.
В предварительном отношении ПОЕЗД останется четыре атрибута, по количеству атрибутов, характеризующих сущность ПОЕЗД. А в отношении МОМЕНТ_ОК_РОСПУСКА – два.
Так выглядят предварительные отношения в сокращенном виде:
МОМЕНТ_ОК_РОСПУСКА (Момент_ок_роспуска, №поезда);
ПОЕЗД (№поезда, Подход, №пути, Момент_прибытия).
Так как все атрибуты нормализуемого отношения распределены по предварительным отношениям, то они же являются пробными отношениями.
Так выглядят пробные отношения в развернутом виде:
Отношение3: МОМЕНТ_ОК_РОСПУСКА
Момент окончания роспуска | № поезда |
8:15 | |
8:35 | |
8:55 |
Отношение4:ПОЕЗД
№ поезда | Подход | № пути | Момент прибытия |
В | 7:40 | ||
А | 7:50 | ||
Г | 7:58 | ||
А | 8:05 |
Для каждого отношения строим схему функциональных зависимостей.
Возможные ключи | Детерминанты |
<№поезда> | <№поезда> |
Возможные ключи | Детерминанты |
<№поезда> | <№поезда> |
<Момент_ок_роспуска> | <Момент_ок_роспуска> |
Сравнив списки детерминантов и возможных ключей, делаем вывод о том, что пробные отношения находятся в нормальной форме Бойса-Кодда. В результате получим РБД, состоящую из трех, связанных между собой отношений №№1, 3 и 4.
Спроектированная база данных называется реляционной потому, что отношения связаны между собой с помощью ключей.
Например, отношения ПОЕЗД и МОМЕНТ_ОК_РОСПУСКА связаны с помощью атрибута №поезда. И в том и в другом отношении атрибут №поезда является возможным ключом. Но в отношении МОМЕНТ_ОК_РОСПУСКА атрибут №поезда называется чужим ключом, потому что по правилу вывода предварительных отношений именно этот атрибут был добавлен в отношение, выделенное для сущности МОМЕНТ_ОК_РОСПУСКА.
Отношения ПОЕЗД и ВАГОН связаны между собой тоже с помощью атрибута №поезда. Только в отношении ПОЕЗД атрибут №поезда является возможным ключом, а в отношении ВАГОН атрибут №поезда является кроме того еще и чужим ключом, потому что по правилу вывода предварительных отношений этот атрибут был добавлен в отношение, выделенное для сущности ВАГОН.
Отношения ВАГОН и МОМЕНТ_ОК_РОСПУСКА непосредственно между собой не связаны, они связаны через отношение ПОЕЗД.
Таким образом, для отношений ВАГОН и МОМЕНТ_ОК_РОСПУСКА отношение ПОЕЗД является доминирующим.