Вопрос нормализации относительно адреса, города, страны - PullRequest
7 голосов
/ 07 апреля 2011

В настоящее время у меня есть 3 таблицы, в которых хранится информация обо всех основных городах мира, каждом регионе / штате, соответствующем этим странам, и каждом городе, который находится в этих штатах / регионах.

City, States and Countries

Теперь у меня есть около 6 других таблиц в моей базе данных, например, таблицы «Пользователи» или «Организации», которым нужны точно такие же 5 столбцов: адрес, пригород, город, штат / регион, страна.Поэтому мне было интересно, если бы это была «хорошая» практика нормализации, возможно, использовать таблицу «Расположение», в которой хранятся эти 5 частей информации, тогда таблица «Пользователи» или «Организации» будет иметь location_id для ссылки на нее.

Cities, States and Countries with Location table

Хорошая идея или плохая идея?Я также рассматриваю возможность использования таблицы «Контакты» по тому же принципу, которая будет содержать home_phone, business_phone, mobile_phone, email_address, а не те же 5 столбцов в каждой из 6 таблиц.

Любой совет приветствуется.Большое спасибо!

Ответы [ 2 ]

8 голосов
/ 07 апреля 2011

Это ненужный набор отношений - вместо этого вы можете получить регионы / страну из города.

Обратите внимание, что у меня есть регионы и страны в неправильном направлении на рисунке ниже, но это показывает, чтоЯ имею в виду!

enter image description here

Естественно, было бы полезно определить представление, объединяющее города, страны и регионы для фактического написания ваших запросов.Я также считаю, что нормализация до этого уровня - очень хорошая идея на практике.Когда вы придете, чтобы добавить новое поле в таблицу местоположений, вы будете очень рады, что вы его разбили; -)

1 голос
/ 07 апреля 2011

Я думаю, вы уже перестарались. Регионы, города и страны в качестве отдельных таблиц великолепны, так как у вас есть возможность легко управлять записями, не создавая противоречивость данных. Но хранить адресные данные для каждого пользователя / организации в отдельной таблице (местоположениях) не нужно. Добавьте эти поля в пользовательские / организационные таблицы.

РЕДАКТИРОВАТЬ: РБ проиллюстрировал это гораздо более подробно:)

...