Эта таблица уже нормализована?
Прежде всего, предостережение, а затем ответ.
Предостережения
Некоторые термины в реляционных моделированиях имеют довольно определенные значения. Нормализованный не является одним из них, по крайней мере, когда кто-то использует его так, как вы это делали.
Имеет смысл спросить: «Это таблица в 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, или «в высшей нормальной форме».
В реальной жизни вам нужно больше ограничений на эти столбцы. Я бы рекомендовал по крайней мере два.
- Либо ограничение ограничения, либо ограничение внешнего ключа на «cover_type».
- Рассчитать и сравнить контрольную цифру на «isbn».
Если вы только импортируете, вы можете написать внешнюю программу для проверки контрольных цифр перед импортом.