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