Шаг алгоритма нормализации 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 и декомпозиция без потерь (неаддитивная).

Другие вопросы по тегам