2011-11-22 4 views
1

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

т.е.

BOOK 

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

ли эта таблица уже нормализовались? Я предполагаю, что это так, но на самом деле у меня нет большого оправдания. Благодаря

ответ

2

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

0

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

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

0

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

1

Эта таблица уже нормализована?

Прежде всего, предостережение, а затем ответ.

Предостережения

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

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

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

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

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

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

Вы можете построить свой стол так.

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

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

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

  1. Либо ограничение ограничения, либо ограничение внешнего ключа на «cover_type».
  2. Рассчитать и сравнить контрольную цифру на «isbn».

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

2

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

Смежные вопросы