Шаг алгоритма нормализации 3NF: связь с SuperKey
Я задавался вопросом о последнем шаге алгоритма нормализации 3NF, где он заявляет:
4) Если ни одно из отношений, полученных на предыдущих шагах, не содержит суперключ R, добавьте новое отношение, схема которого является ключом для R.
Мой конкретный вопрос: что происходит с семантикой этого отношения? Почему есть только одно отношение и не так много отношений с одним атрибутом (по одному для каждого атрибута ключа)?
Я обнаружил, что в некоторых примерах это дополнительное отношение имеет смысл, но в других оно, кажется, "смешивает" атрибуты, которые не связаны...
1 ответ
Последний шаг алгоритма нормализации 3NF необходим, чтобы гарантировать, что разложение, генерируемое алгоритмом, не имеет потерь.
Фактически существует теорема, в которой говорится, что если декомпозиция сохраняет зависимости, и одна из декомпозированных схем является суперключом исходного отношения, то декомпозиция также не имеет потерь.
Алгоритм, с предыдущими шагами, гарантирует, что каждая функциональная зависимость присутствует в некоторых разложенных отношениях. Введение отношения, которое содержит ключ, если в некоторых других отношениях ключ уже отсутствует, гарантирует, что алгоритм производит декомпозицию, которая сохраняет как данные, так и зависимости.
добавленной
Вот простой пример, который показывает необходимость этого последнего шага. Предположим, что пример отношения R(A, B, C, D), с A->B, C->D, (с ключом A,C):
R
A | B | C | D
-------------
1 2 2 3
1 2 3 4
2 3 2 3
Разложение в R1(A,B), R2(C,D) находится в третьей нормальной форме, но с потерями (добавка). Фактически, проекция этого экземпляра на декомпозицию приводит к:
R1 R2
A | B C | D
----- -----
1 2 2 3
2 3 3 4
Аддитивное свойство этого разложения ясно, если мы выполним естественное соединение разложенного отношения, которое создает экземпляр, отличный от исходного:
R1 ⨝ R2 =
A | B | C | D
-------------
1 2 2 3
1 2 3 4
2 3 2 3
2 3 3 4
Ситуация не изменится, если вы разложите R на R1(A,B), R2(C,D), R3(A), R4(C): на самом деле, если перекомпоновать его с R1 ⨝ R2 ⨝ R3 ⨝ R4, получится в точности то же отношение, что и выше, с 4 строками
R1 R2 R3 R4 R1 ⨝ R2 ⨝ R3 ⨝ R4 =
A | B C | D A C A | B | C | D
----- ----- -- --- --------------
1 2 2 3 1 2 1 2 2 3
2 3 3 4 2 3 1 2 3 4
2 3 2 3
2 3 3 4
Вместо этого ситуация полностью меняется с разложением в R1(A,B), R2(C,D), R3(A, C). Когда вы перекомпоновываете с естественным объединением, вы получаете оригинальный экземпляр:
R1 R2 R3 R1 ⨝ R2 ⨝ R3 =
A | B C | D A | C A | B | C | D
----- ----- ------ --------------
1 2 2 3 1 2 1 2 2 3
2 3 3 4 1 3 1 2 3 4
2 2 2 3 2 3
Итак, в итоге, в первых двух случаях у вас есть потеря информации (исходный экземпляр не получен), в то время как в третьем случае у вас есть 3NF и декомпозиция без потерь (неаддитивная).