#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. Вы правы в том, что ключи для всех приведенных выше таблиц являются идентификаторами. Я забыл упомянуть. Спасибо за ответ!