2013-08-06 24 views
0

Скажем, у меня есть набор данных. Это группа домов в некоторых городах.Повторяющееся поле против реляционных?

House 1 | 123 Fake St | Notatown 
House 2 | 456 Not Rd | Notatown 
House 3 | 789 Foo Cres| Barville 
... 

Тогда представьте, что данные продолжались, как это, со многими записями.

Лучше импортировать это непосредственно в стол, имея запись для каждого дома и полностью помещая город - или создать реляционную таблицу, в которой хранится идентификатор вместе с названием города, и ему нужно играть с вставкой в несколько таблиц? То есть:

1 | Notatown 
2 | Barville 
... 

Какая «нормальная форма» будет делать реляционную таблицу выше, если так?

+0

У вас есть 1 дом в нескольких городах? Я так не думаю. –

+0

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

+0

Замена текста идентификационным номером не имеет ничего общего с нормализацией. Это не значит, что вы не должны этого делать. Это просто означает, что вы не должны называть это * нормализацией *. Выполнение этого изменения - замена идентификационных номеров для текста - не приведет к изменению нормальной формы. Если ваша таблица находится в 3NF до этого изменения, она будет в 3NF после этого изменения. –

ответ

0

Версия с названием города непосредственно в таблице домов может считаться второй нормальной формой (2NF), поскольку переходное отношение города не было перемещено на собственный стол.

Независимо от того, нужно ли реорганизовать это на третью нормальную форму, действительно зависит от ваших требований.

0

Все зависит от того, что вы собираетесь делать с данными.

В целом, сохранение названия города в поле адреса не является ужасным грехом. Вы правы, что более нормализованное хранилище будет иметь отдельную таблицу «город», с ключами для поиска значений города. Такая структура важнее, когда данные будут обновляться. Для статических данных (и названия городов не сильно меняются), это менее важно.

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

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

В и случаях вы должны быть чувствительны к альтернативным написаниям мест. Если у вас есть главный список городов, используйте его и выделите значения, которые не совпадают. Это также предполагает, что «город» не является центральным для вашего бизнеса. Наличие отдельной таблицы для, скажем, имен клиентов очень важно, потому что вы не хотите, чтобы орфографические ошибки приводили к перерасчету клиентов.

Смежные вопросы