ТОРА (9) - Лекция №8 - Алгоритм (продолжение)
...начало
Практические приёмы нормализации
Пример 1
Поэтому вновь перестроим схему:
Указанная схема имеет два недостатка:
- в ключи $R_3$, $R_1$ и $R_4$ входят атрибуты предметной области. При изменении формата табельного номера придётся обновить его в $R_1$ и через CASCADE в $R_3$ и $R_4$. Поэтому всегда желательно иметь синтетические ключи - не связанные с предметной областью (ID);
- в сущностях $R_2$ и $R_5$ ключи составные. Это увеличивает размер индекса и время поиска по этому индексу.
В силу этого, схему БД предлагается реорганизовать следующим образом (ввести синтетические ключи):
Пример 2
Разработать схему БД для предыдущего примера с применением алгоритма синтеза.
$U$ = (табельный номер, ФИО, должность, оклад, номер заказа, сведения о заказе) = $(A_1, A_2, A_3, A_4, A_5, A_6)$
$F = (A_1\rightarrow A_2, A_3\rightarrow A_4, A_5\rightarrow A_6)$
Синтез:
1)
- $УНП = (A_1\rightarrow A_2, A_3\rightarrow A_4, A_5\rightarrow A_6)$
2)
- $U\rightarrow\varnothing$
- в УНП нет ФЗ, включающей все атрибуты из $U$. Поэтому добавляем в УНП тривиальную ФЗ:
- $УНП = (A_1\rightarrow A_2, A_3\rightarrow A_4, A_5\rightarrow A_6, A_1 A_2 A_3 A_4 A_5 A_6\rightarrow\varnothing)$
3)
- все нетривиальные ФЗ в УНП являются неприводимыми (в левой части один атрибут). Поэтому шаг пропускаем.
4)
- разбиваем УНП на классы ФЗ:
- $A_1\rightarrow A_2$, $K_1 = A_1 A_2$
- $A_3\rightarrow A_4$, $K_2 = A_3 A_4$
- $A_5\rightarrow A_6$, $K_3 = A_5 A_6$
- $A_1 A_2 A_3 A_4 A_5 A_6\rightarrow\varnothing$, $K_4 = A_1 A_2 A_3 A_4 A_5 A_6$
5)
- строим граф иерархии:
6)
- пропускаем, так как в каждом классе только одна ФЗ.
7)
- выполняем редуцирование атрибутов ФЗ:
8)
- пропускаем, так как в графе иерархии нет ФЗ, кроме $U\rightarrow\varnothing$
9)
- $\rho = (A_1 A_3 A_5, A_1 A_2, A_3 A_4, A_5 A_6)$
10)
- 1) соединение без потерь
$A_1$ | $A_2$ | $A_3$ | $A_4$ | $A_5$ | $A_6$ | |
---|---|---|---|---|---|---|
$R_1$ | $a$ | $b_1$ | $a$ | $b_1$ | $a$ | $b_1$ |
$R_2$ | $a$ | $a$ | $b_2$ | $b_2$ | $b_2$ | $b_2$ |
$R_3$ | $b_3$ | $b_3$ | $a$ | $a$ | $b_3$ | $b_3$ |
$R_4$ | $b_4$ | $b_4$ | $b_4$ | $b_4$ | $a$ | $a$ |
$A_1$ | $A_2$ | $A_3$ | $A_4$ | $A_5$ | $A_6$ | |
---|---|---|---|---|---|---|
$R_1$ | $a$ | $a$ | $a$ | $a$ | $a$ | $a$ |
$R_2$ | $a$ | $a$ | $b_2$ | $b_2$ | $b_2$ | $b_2$ |
$R_3$ | $b_3$ | $b_3$ | $a$ | $a$ | $b_3$ | $b_3$ |
$R_4$ | $b_4$ | $b_4$ | $b_4$ | $b_4$ | $a$ | $a$ |
- Получили строку, сплошь состоящую из $a$. Значит, есть соединение без потерь. Запрос на соединение всех четырёх таблиц будет выполняться правильно.
- 2) сохранение ФЗ:
- 1-4) $H = \varnothing$, $УНП = (A_1\rightarrow A_2, A_3\rightarrow A_4, A_5\rightarrow A_6)$
- 5) $H$ - пусто.
- 6) обладает сохранением ФЗ. При включении новой записи в таблицу достаточно проверять справедливость тех ФЗ, которые связаны с этой таблицей.
- 3) каждая схема отношения находится в 3НФ. Вот так.
А находятся ли схемы отношений $R_1, R_2, R_3, R_4$ в нормальной форме Бойса-Кодда?
$R_1$:
- $R_1 = A_1 A_3 A_5$, $A_1 A_3 A_5$ - ключ, значит находится в НФБК.
$R_2$:
- $R_2 = A_1 A_2$, $A_1\rightarrow A_2$, $A_1$ - ключ, значит находится в НФБК.
$R_3$:
- $R_4 = A_3 A_4$, $A_3\rightarrow A_4$, $A_3$ - ключ, значит находится в НФБК.
$R_4$:
- $R_4 = A_5 A_6$, $A_5\rightarrow A_6$, $A_5$ - ключ, значит находится в НФБК.
В конце концов, получаем такую схему БД:
Но у неё тоже есть недостатки:
- ключ в $R_1$ составной;
- в ключах $R_2, R_3, R_4$ используются атрибуты предметной области.
Перестроим схему с синтетическими ключами:
Сравнивая результаты Примера 1 и Примера 2, видим, что алгоритм синтеза даёт меньшее число схем отношений.