Соответствует ли дизайн 3-й нормальной форме?

#database-design #normalization #third-normal-form

#база данных-дизайн #нормализация #третья нормальная форма

Вопрос:

У меня есть таблица, в которой есть категория атрибута. Например, таблица, в которую я сохраняю песни, у которых есть атрибут Genre:

 Songs(
ID (INT), 
Name (STRING), 
Genre: (STRING)
)
  

Выполнена ли таблица в 3-й нормальной форме?

Я имею в виду, я знаю, что лучше сохранить Genre в другой таблице и иметь связь между таблицами типа:

 Songs(
ID (INT), 
Name (STRING), 
Genre_ID: (INT)
)

Genre(
ID (INT),
Name (String)
)
  

где Songs.Genre_ID = Genre.ID .

Но я не могу определить, нарушает ли первый случай (с одной таблицей) какое-либо правило 3-й нормальной формы!

Так ли это? Если да, то в какой?

Спасибо, Майк

Ответ №1:

Повторяйте за мной.

«Идентификационные номера не имеют никакого отношения к нормализации. Идентификационные номера не имеют никакого отношения к нормализации. Идентификационные номера не имеют никакого отношения к нормализации.»

Если ваша цель — сохранить один жанр для каждого названия песни, тогда эта таблица

 song_name           genre
--
Toxic               Pop
Itsy Bitsy Spider   Children's
  

где song_name является первичным ключом, находится в 5NF. (И 4NF, и 3NF, и так далее).

Ответ №2:

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

Я предполагаю, что ID является единственным ключом и что ID->{Name,Genre} и что нет других нетривиальных, неключевых зависимостей. Если это правильно, то песни находятся в 3NF. Что еще более важно, это в BCNF и 5NF.

Замена строкового атрибута Genre целым Genre_ID не имеет абсолютно никакого отношения к любой нормальной форме.

Комментарии:

1. Вы правы в том, что ключи для всех приведенных выше таблиц являются идентификаторами. Я забыл упомянуть. Спасибо за ответ!