Нормализация таблицы с двумя столбцами - PullRequest
1 голос
/ 22 ноября 2011

Я пытаюсь нормализовать базу данных, и в настоящее время у нас есть таблица с именем BOOK, где ISBN (FK) и CoverType являются столбцами, и они объединены вместе, чтобы создать PK.

, т.е.

BOOK

|       ISBN       |  CoverType  |
|__________________|_____________|
|  978-0132354790  |   Hardback  |
|  978-0132354790  |   Paperback | 

Эта таблица уже нормализована?Я предполагаю, что это так, но у меня нет особых оснований для этого.Спасибо

Ответы [ 5 ]

2 голосов
/ 13 марта 2013

Если будет добавлено больше строк, вы можете ожидать, что такие значения, как «Твердый переплет» и «Мягкая обложка» будут дублированы.Разве не имеет смысла перемещать их в отдельную таблицу, такую ​​как «CoverType», и объединять по ID?

2 голосов
/ 22 ноября 2011

Как и в вашем посте BOOK(ISBN, COVERTYPE) нормализовано, потому что все ваши поля являются однозначными, и никакая часть первичного ключа не может быть получена из его подмножества (например, вы не можете сказать, какие из всех возможныхCoverTypes для ISBN, просто взглянув на сам ISBN, как и наоборот).

1 голос
/ 16 декабря 2011

Нормализована ли эта таблица?

Сначала предупреждение, затем ответ.

Предупреждение

ОпределенноТермины в реляционном моделировании имеют довольно специфические значения. Нормализовано не является одним из них, по крайней мере, когда кто-то использует его так, как вы.

Имеет смысл спросить: «Эта таблица в 3NF?» Или «Есть лиэта таблица в 5NF? ", но нет смысла спрашивать, нормализована ли она.Только на SO вы можете найти ответы, где «это нормализовано» означает

  • в 3NF
  • в 5NF
  • и имеет идентификационный номер
  • в нем меньше 20 столбцов
  • весь текст заменен на идентификационные номера

Только первые два имеют смысл.Остальные вообще не имеют ничего общего с нормализацией.

Наконец, мой ответ

Я предполагаю, что ваши данные имеют смысл.Я никогда не имел дело с книгами более подробно, чем на уровне бухгалтерского учета, поэтому мне никогда не нужно было знать, как работают вместе номера ISBN и типы обложек.

Вы можете создать свою таблицу следующим образом.

create table books (
  isbn varchar(13) not null,
  cover_type varchar(10) not null,
  primary key (isbn, cover_type)
);

Если вы это сделаете, у вас не будет непростых атрибутов (все столбцы являются частью хотя бы одного ключа-кандидата), поэтому вы находитесь как минимум в 2NF.Нет транзитивных зависимостей, поэтому вы находитесь в 3NF.Нет многозначных зависимостей, поэтому не менее 4NF.Никаких зависимостей соединения вообще, поэтому вы находитесь в режиме 6NF, или в «предельно нормальной форме».

В реальной жизни вам потребуется больше ограничений для этих столбцов.Я бы порекомендовал как минимум два.

  1. Либо ограничение проверки, либо ограничение внешнего ключа для "cover_type".
  2. Вычислите и сравните контрольную цифру в "isbn".

Если вы только импортируете, вы можете написать внешнюю программу для проверки контрольных цифр перед импортом.

0 голосов
/ 22 ноября 2011

На самом деле не так много, чтобы нормализовать этот стол. У вас нет ни увольнений, ни отношений. Выглядит хорошо.

0 голосов
/ 22 ноября 2011

Я не уверен, что не нормализовано в этом ....

Если есть что-то еще, я не знаю, но из того, что я вижу, это выглядитхорошо.

...