Функциональные зависимости атрибутов от первичного ключа сущности находятся легко, а именно, первичный ключ сущности функционально определяет все ее атрибуты. Комбинированный метод может помочь в отыскании так называемых “перекрестных” зависимостей между сущностями. Рассмотрим примеры.
Пример 43. Спроектируем комбинированным методом базу данных для предметной области МАГАЗИНЫ. В таблице 5 представлены сущности и их атрибуты.
Таблица 5. Сущности и их атрибуты предметной области МАГАЗИНЫ
Сущности | Атрибуты сущностей | Первичный ключ | Обозначение |
ПОСТАВЩИКИ | НомерПоставщика | да | А |
Фио | B | ||
Адрес | |||
Телефон | |||
Директор | |||
ТОВАРЫ | НомерТовара | да | С |
НаименованиеТовара | D | ||
Цена | |||
МАГАЗИНЫ | НомерМагазина | да | E |
НазваниеМагазина | S | ||
Адрес | |||
ОТДЕЛЫ | КодОтдела | да | K |
НазваниеОтдела | L | ||
Заведующий | |||
ТИПЫ_ТОВАРОВ | КодТипа | да | M |
НазваниеТипа | N |
На заданном множестве атрибутов U = ABCDESKLMN для каждой сущности будут справедливы зависимости F = {A → B, C→ D, E → S, K → L, M → N,...}. Многоточия должны быть заменены “перекрестными” зависимостями между сущностями. Найдем их из описания ER-диаграммы, причем для поиска “перекрестных” зависимостей класс принадлежности сущности не имеет значения.
|
|
1. ПОСТАВЩИКИ (М) поставляют (М) ТОВАРЫ
2. ТОВАРЫ (М) продаются_в (М) МАГАЗИНАХ
3. МАГАЗИНЫ (1) содержат (М) ОТДЕЛЫ
4. ТОВАРЫ (М) поступают_в (1) ОТДЕЛЫ
5. ТОВАРЫ (М) имеют (1) ТИПЫ
По определению функциональных зависимостей, данному в разделе 1.3.1, каждому значению набора атрибутов в левой части зависимости в каждый момент времени соответствует точно одно значение атрибута в правой части зависимости. Отсюда следует, что только выделенные связи могут быть использованы для получения “перекрестных” зависимостей. Связь 3 даст зависимость ОТДЕЛЫ ® МАГАЗИНЫ, или, используя первичные ключи, K ® E. Аналогично связь 4 даст зависимость ТОВАРЫ ® ОТДЕЛЫ или C ® K, связь 5 – зависимость ТОВАРЫ ® ТИПЫ или C ® M.
Заменяем многоточия этими зависимостями. В результате получаем
F = {A → B, C→ D, E → S, K → L, M → N, K → E, C → K, C → M}
или, используя правило объединения зависимостей по правым частям (см. раздел 1.3.2):
F = {A → B, C→ DKM, E → S, K → LE, M → N}
Таким образом, имеем исходные данные для проектирования базы данных методом синтеза: множество атрибутов U = ABCDESKLMN и множество функциональных зависимостей F, определенное на U. Выполним ускоренный синтез.
Строим расширенное множество зависимостей:
ℱ = {A → B, C→ DKMLESN, E → S, K → LES, M → N}.
Условно неизбыточное покрытие ℱ0 = ℱ.
Добавляем тривиальную зависимость U → Æ и строим диаграмму зависимостей, на которой выполняем операцию транзитивной редукции зависимостей. Результат показан на рисунке 18.
|
|
Рисунок 18 – Диаграмма зависимостей для предметной области МАГАЗИНЫ
Получаем результирующую декомпозицию отношений:
R1 = AC; R2 = C DKM; R3 = A B; R4 = K LE;
R5 = M N; R6 = E S;
или для реальных данных:
R1: Поставщики_Товары или Поставки (НомерПоставщика, НомерТовара);
R2: Товары (НомерТовара, НаименованиеТовара, Цена, КодОтдела, КодТипа);
R3: Поставщики (НомерПоставщика, ФИО, Адрес, Телефон, Директор);
R4: Отделы (КодОтдела, НазваниеОтдела, Заведующий, НомерМагазина);
R5: Типы_Товаров (КодТипа, НазваниеТипа);
R6: Магазины (НомерМагазина, НазваниеМагазина, Адрес).
Набор атрибутов AC является минимальным суперключом, так как
AC+ = U, но A+ ≠ U и C+ ≠ U.
Пример 44. Для предметной области АВТОВОКЗАЛ в таблице 6 перечислены сущности и их атрибуты.
Таблица 6. Сущности и их атрибуты для предметной области АВТОВОКЗАЛ
Сущности | Атрибуты | Первичный ключ | Обозначение |
ВОДИТЕЛИ | IDВодителя | да | А |
ФиоВодителя | B | ||
Адрес | |||
Телефон | |||
Возраст | |||
АВТОБУСЫ | ГосНомер | да | С |
Тип | D | ||
Модель | |||
РЕЙСЫ | IDРейса | да | E |
НомерРейса | K | ||
Куда | |||
ДатаВремяОтправ | |||
ПАССАЖИРЫ | IDПассажира | да | Р |
ФиоПас | L | ||
АдресЭлПочты |
Поскольку первичные ключи функционально определяют все атрибуты сущностей, включим эти зависимости в множество F: F = {A → B, C → D, E → K, P → L,...}
Здесь многоточия должны быть заменены “перекрестными” зависимостями между сущностями, которые можно найти из описания ER-диаграммы:
1. ВОДИТЕЛИ (М) ведут (1) АВТОБУСЫ
2. АВТОБУСЫ (М) отправляются_в (М) РЕЙСЫ
3. ВОДИТЕЛИ (М) назначаются_на (М) РЕЙСЫ
4. ПАССАЖИРЫ (М) отправились_в (1) РЕЙСЫ
По определению функциональных зависимостей, данному в разделе 1.3.1, каждому значению набора атрибутов в левой части зависимости в каждый момент времени соответствует точно одно значение атрибута в правой части зависимости. Отсюда следует, что только выделенные связи используются для получения “перекрестных” зависимостей. Связь 1 даст зависимость ВОДИТЕЛИ ® АВТОБУСЫ, или, используя первичные ключи, A ® C. Аналогично связь 4 даст зависимость P ® E. Заменяя многоточия этими зависимостями, получим
F = {A → B, C → D, E → K, P → L, A ® C, P ® E}
или, используя правило объединения зависимостей по правым частям (см. раздел 1.3.2):
F = {A → BC, C → D, E → K, P → LE}
Таким образом, имеем исходные данные для проектирования базы данных методом синтеза: множество атрибутов U = ABCDEKPL и множество функциональных зависимостей F, определенное на U. Выполним ускоренный синтез.
Строим расширенное множество зависимостей
ℱ= {A → BCD, C → D, E → K, P → LEK}
Условно неизбыточное покрытие ℱ0 = ℱ.
Добавляем тривиальную зависимость ABCDEKPL → Æ и строим диаграмму зависимостей, изображенную на рисунке 19, на которой выполняем операцию транзитивной редукции зависимостей
Рисунок 19 – Диаграмма зависимостей для предметной области АВТОВОКЗАЛ
Результирующая декомпозиция будет такой (первичные ключи выделены):
R1 = AP; R2 = P LE; R3 = A BC; R4 = E K; R5 = C D
или на реальных данных:
R1: Водители_Пассажиры (IDВодителя, IDПассажира);
R2: Пассажиры (IDПассажира, ФиоПас, АдресЭлПочты,IDРейса);
R3: Водители (IDВодителя, ФиоВодителя, Адрес, Телефон, ГосНомер);
R4: Рейсы (IDРейса, НомерРейса, Куда, ДатаВремяОтправ);
R5: Автобусы (ГосНомер, Тип, Модель).
Заметим, что набор атрибутов AP является минимальным суперключом, так как
AP+ = APBCDEKL = U и A+ =ABCD ≠ U; P+ = PLEK≠ U.
Если для какой-либо сущности существует возможный первичный ключ, то его нужно отделить от остальных атрибутов сущности, как это сделано в примере 45.
Пример 45. Предметная область выбрана такая же, как в примере 44, в которой добавлена еще одна сущность БИЛЕТЫ, а для сущности ПАССАЖИРЫ определен возможный первичный ключ НомерПаспорта, который выделен из набора неключевых атрибутов L отдельным обозначением S.
|
|
Таблица 7. Сущности и их атрибуты для предметной области АВТОВОКЗАЛ
Сущности | Атрибуты | Первичный ключ | Обозначение |
ВОДИТЕЛИ | ID_водителя | да | А |
ФиоВодителя | B | ||
Адрес | |||
Телефон | |||
Возраст | |||
АВТОБУСЫ | ГосНомер | да | С |
Тип | D | ||
Модель | |||
РЕЙСЫ | IDРейса | да | E |
НомерРейса | K | ||
Куда | |||
ДатаВремяОтправ | |||
ПАССАЖИРЫ | ID_пассажира | да | P |
ФиоПас | L | ||
АдресЭлПочты | |||
НомерПаспорта | Возможный первичный ключ | S | |
БИЛЕТЫ | НомерБилета | да | O |
Цена | X | ||
МестоВАвтобусе | Y |
Следует отметить, что отдельные обозначения целесообразно назначать не только для возможных первичных ключей, но и для зависимых атрибутов, не являющихся первичными или возможными первичными ключами. Например, если мы хотим связать функциональной зависимостью атрибуты “Цена” и “МестоВАвтобусе” (“Цена” зависит от атрибута “МестоВАвтобусе”), как показано в таблице 6, то этим атрибутам также нужно дать отдельные обозначения X и Y соответственно. Поскольку первичный и возможный первичный ключи определяют все атрибуты сущности, можно написать часть функциональных зависимостей, входящих в множество F:
F = {A → B, C→ D, E → K, P → L, P → S, S → P, S → L, O → X, O → Y, Y → X,... }
В это множество нужно добавить “перекрестные” зависимости, которые легко определяются из соответствующего описания ER-диаграммы:
1. АВТОБУСЫ (М) отправляются в (М) РЕЙСЫ
2. ВОДИТЕЛИ (М) ведут (1) АВТОБУСЫ
3. ПАССАЖИРЫ (1) купили (1) БИЛЕТЫ
4. ПАССАЖИРЫ (М) отправились в (1) РЕЙСЫ
5. БИЛЕТЫ (М) куплены на (1) РЕЙСЫ
6. ВОДИТЕЛИ (М) назначены на (М) РЕЙСЫ
По определению функциональной зависимости атрибутов для поиска “перекрестных” зависимостей связи М:М из рассмотрения исключаются. Связи, в которых проявляются функциональные зависимости, выделены жирным шрифтом.
Связь 2 даст зависимость ВОДИТЕЛИ → АВТОБУСЫ или A → C, связь 3 –зависимость ПАССАЖИРЫ → БИЛЕТЫ и БИЛЕТЫ → ПАССАЖИРЫ или P → O и O → P, связь 4 – зависимость ПАССАЖИРЫ → РЕЙСЫ или P → Е, связь 5 – зависимость БИЛЕТЫ → РЕЙСЫ или О → Е.
|
|
Добавляя указанные здесь зависимости в множество F, получаем
F = {A → B, C→ D, E → K, P → L, P → S, S → P, S → L, O → X, O → Y, Y → X,
A → C, P → O, O → P, P → Е, О → Е}
или, воспользовавшись правилом объединения правых частей функциональных зависимостей (см. раздел 1.3.2) множество F можно привести к виду:
F = {A → BC, C→ D, E → K, P → LSOE, S → PL, O → XYPE, Y → X}
Далее продолжаем синтез.
Строим расширенное множество зависимостей:
ℱ = {A → BCD, C→ D, E → K, P → LSOEXYK, S → PLOEKXY,
O→ XYPELSK, Y → X} и условно неизбыточное покрытие ℱ0 = ℱ.
Выделенные жирным шрифтом зависимости эквивалентны. Оставляем одного представителя, например, первую из эквивалентных зависимостей.
Добавляя тривиальную зависимость U → Æ, строим диаграмму зависимостей, на которой выполняем операцию транзитивной редукции зависимостей:
1 A BCDEK P LSOXY → Æ
2 P → LSOE X Y K 3 A → BC D
4 E → K 5 Y → X 6 C → D
Рисунок 19 – Диаграмма зависимостей для предметной области АВТОВОКЗАЛ с сущностью БИЛЕТЫ и с альтернативным первичным ключом для одной из сущностей
Получаем результирующую декомпозицию отношений:
R1 = AP; R2 = P LSOEY; R3 = A BС;
R4 = E K; R5 = Y X; R6 = C D;
или для реальных данных:
R1: Водители_Пассажиры (ID_водителя, ID_пассажира);
R2: Пассажиры (ID_пассажира, ФиоПас, АдресЭлПочты,НомерПаспорта,
НомерБилета, IDРейса, МестоВАвтобусе);
R3: Водители (ID_водителя, ФиоВодителя, Адрес, Телефон, Возраст, ГосНомер);
R4: Рейсы (IDРейса, НомерРейса, Куда, ДатаВремяОтправ);
R5: Место_Цена (МестоВАвтобусе, Цена);
R6: Автобусы (ГосНомер, Тип, Модель).
Как и в примере 44 набор атрибутов AP является минимальным суперключом.