#mysql #sql
Дорогие знатоки, изучая MySql нормальные формы дошел до третьего. Все понял отлично. Но вот дальше чуть запутался. Можно ли на реальном примере показать их в действии. К примеру Table authors id name Table books id title price Table authors_books author_id book_id У авторов есть емейлы. Храню их в отдельной таблице. Но по моему это все таки относится к третьей нормальной форме. Table author_emails id author_id email Пожалуйста приведите примеры с пояснениями . Спасибо!
Ответы
Ответ 1
Если 1-3 НФ позволяют избавиться от избыточности неключевых атрибутов (избыточность в сложном первичном ключе просто игнорится), то 4 и 5 НФ позволяют избавиться от избыточности внутри первичного ключа. Поэтому, чтобы искать от чего бы избавиться, чтобы привести таблицу к 4, а потом 5 НФ, первичный ключ должен состоять минимум из 3х атрибутов. В противном случае (ключ состоит из 1-2 атрибутов) таблица уже находится в 4 и 5 НФ. Добавление полей id сильно мешает пониманию НФ. Если бы вместо id author_id email было что-то типа: address_id author_id email - эти три атрибута и есть первичный ключ, таблица уже находится в 3НФ. Тогда можно было бы выделить две многозначные зависимости: У автора может быть несколько физ.адресов и несколько электронных почт. Причем адрес и эл. почта между собой не связаны. Избавляемся путем разделения на 2 таблицы: address_id author_id и author_id email Эти таблицы находятся в 4НФ, т.к. в них отсутствуют многозначные зависимости. Если каким-то загадочным образом существует зависимость между address_id и email, при условии, что и предыдущие условия выполняются (У автора может быть несколько физ.адресов и несколько электронных почт) тогда мы не можем назвать это многозначной зависимостью, а, следовательно, и избавляться для 4НФ не от чего, т.е. таблица address_id author_id email уже находится в 4НФ. Но, зато такое явление можем назвать зависимостью соединения - чего не должно быть в 5НФ. От зависимости соединения можем избавиться, разбив исходную табл. на три: address_id author_id, author_id emai, address_id email
Комментариев нет:
Отправить комментарий