Какой это этап нормализации? (перемещение повторяющихся данных в отдельную таблицу) - PullRequest
2 голосов
/ 12 апреля 2010

Я заметил, что при проектировании базы данных я склонен переносить любые повторяющиеся наборы данных в отдельную таблицу. Например, скажем, у меня был стол людей, каждый из которых жил в штате. Затем я переместил бы эти повторяющиеся состояния в отдельную таблицу и сослался бы на них с внешними ключами.

Однако, что, если я больше не буду хранить данные о состояниях. Я бы тогда имел таблицу с StateID и State in. Правильно ли это действие? Состояние зависит от первичного ключа таблицы users, поэтому помогает ли его перенос в собственную таблицу?

Спасибо

Ответы [ 2 ]

1 голос
/ 23 апреля 2010

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

Перемещение аббревиатуры состояний в собственную таблицу - это то, как вы нормализуете свою базу данных. Он защищает вашу «пользовательскую» таблицу от аномалий обновления, где, скажем, по какой-то причине аббревиатура «KY» для Кентукки обновлена ​​до «KQ». Поместив внешний ключ в пользовательскую таблицу, которая содержит первичный ключ таблицы состояний, вам нужно всего лишь сделать одно обновление таблицы состояний, чтобы исправить эту запись для всех ваших пользователей.

При этом нам кажется совершенно очевидным, что аббревиатуры состояний не часто меняются. Поэтому, если вы точно знаете, что вашей базе данных никогда не потребуется хранить больше информации о состоянии, тогда логично и принципиально разумно оставить поле состояния в пользовательской таблице. Денормализация таких распространена. Это повысит читаемость данных в вашей пользовательской таблице и уменьшит накладные расходы при выполнении объединения. Это однако предпочтение.

0 голосов
/ 12 апреля 2010

Таблица состояний не должна иметь ключевую связь с таблицей пользователей, она должна содержать только данные о состояниях.

Чтобы сохранить каждую таблицу как можно более простой, вы можете сохранить пользовательские данные в таблице User, данные о состоянии в таблице State, а затем создать таблицу соединения, которая имеет отношения внешнего ключа к обоим Таблицы пользователей и состояний.

Что касается формы нормализации, я не уверен.

...