У меня есть интересная дискуссия с другим дизайнером базы данных о нормализации. В этом примере у нас есть таблица GameTitles, и каждая запись должна содержать год выпуска игры. Он говорит, что 2NF требует, чтобы все было нормализовано, поэтому для обеспечения соответствия поле года должно быть разделено на таблицу ReleaseYears со своим собственным первичным ключом, на который ссылается таблица GameTitles. Я говорю, что это должно остаться как поле на самой таблице GameTitles.
Мой аргумент в пользу этого заключается в том, что год - это просто не примитивное числовое значение, которое является статичным по своей природе (то есть 2011 год всегда будет 2011 годом). Из-за этого он служит своим собственным идентификатором и ему не нужно ничего, чтобы ссылаться на него, поскольку он является тем, чем он является. Это также вводит дополнительное обслуживание, поскольку теперь вам нужно добавить новый год в таблицу, чтобы просто сослаться на него. Если вы предварительно заполняете таблицу большим диапазоном лет, то у вас есть дополнительные записи, которые потенциально не будут иметь ссылок на них вообще. Это также увеличивает размер базы данных, поскольку теперь у вас есть дополнительная таблица, накладные расходы на запись и дополнительный первичный ключ для самого года. Если вы сохраняете год как поле в таблице GameTitles, вы устраняете все это дополнительное обслуживание и накладные расходы.
Мысли об этом?
редактировать: имеется ввиду, чтобы опубликовать это в StackOverflow. Может ли кто-нибудь проголосовать, чтобы удалить это или пометить это как внимание