Соответствует ли этот дизайн 2NF?

Хорошо, у меня есть 2 таблицы. Таблица книг с первичным ключом book_id и другим полем с названием title. И таблица авторов с первичным ключом author_id и полями first_name, last_name и внешним ключом book_id.

Соответствует ли мой дизайн 2NF?


person Some Body    schedule 15.05.2012    source источник


Ответы (2)


Как правило (и с точки зрения непрофессионала), нормализация на первом уровне означает:

  • нет возможности дублирования строк.
  • нет порядка, присущего строкам или столбцам.
  • каждая «ячейка» содержит только одну часть информации.

Для 2NF у вас есть дополнительное ограничение, заключающееся в том, что каждый столбец зависит от всего ключа (напрямую или косвенно через другой неключевой столбец).

Так что я бы сказал, что в данном случае она соответствует 2NF, поскольку она соответствует критериям 1NF, и книга действительно зависит от автора.

Тем не менее, это все еще не обязательно хороший дизайн, тем более что вы всегда должны начинать с 3NF, как правило. Лучшим решением было бы полномасштабное:

books:
    book_id
    title
authors:
    author_id
    name
books_and_authors:
    book_id
    author_id

Таким образом, между книгами и авторами возникает связь «многие ко многим» (включая нулевую).

person paxdiablo    schedule 15.05.2012
comment
да, я знаю, что это не очень хороший дизайн, учитывая, что он не поддерживает отношения «многие ко многим». Мой вопрос выше был просто предназначен для прояснения проблемы в моем уме. Спасибо за помощь. - person Some Body; 15.05.2012

Таблица находится во 2НФ тогда и только тогда, когда она находится в 1НФ и ни один непервичный атрибут не зависит ни от какого правильного подмножества любого возможного ключа таблицы (из википедия).

Я должен предположить, что ваша таблица находится в 1NF.
Ваши потенциальные (и первичные) ключи — это book_id и author_id.

Ваши непростые атрибуты: title, first_name и last_name. Ни один из этих атрибутов не зависит от какого-либо надлежащего подмножества ключей-кандидатов (что легко реализовать, поскольку у них нет никаких подмножеств). Единственная проблема с этим дизайном заключается в том, что внешний ключ book_id устанавливает отношение книга-автор 1:1 (т. е. одна книга -> один автор. один автор -> одна книга). Это можно легко исправить с помощью новой таблицы, содержащей book_id и author_id.

1NF (также википедия):

  • Строки не упорядочиваются сверху вниз.
  • В столбцах нет порядка слева направо.
  • Нет повторяющихся строк
  • Каждое пересечение строки и столбца содержит ровно одно значение из применимого домена (и ничего больше).
  • Все столбцы обычные [т.е. строки не имеют скрытых компонентов, таких как идентификаторы строк, идентификаторы объектов или скрытые временные метки].

Именно так мы привыкли создавать реляционные базы данных.

person keyser    schedule 15.05.2012