2012-06-10 3 views
7

Мне нужна помощь в разработке моей страны, города, штатных таблиц. Я приведу образцы данных из своей таблицы, чтобы вы могли помочь мне улучшить мою проблему.Какой лучший способ создать город, штат, страну?

Это моя страна стол:

Country 
______ 
code name 
US  United States 
SG  Singapore 
GB  United Kingdom 

Это мой город стол:

City 
_____ 
id country city  state 
1 US  Birmingham Alabama 
2 US  Auburn  Alabama 
. 
. 
29 GB  Cambridge NULL 
30 GB  Devon  NULL 

Моя проблема заключается в том, что единственная страна, которая имеет государственную поле является США. Все остальные города имеют нулевое значение.

Мое временное решение для этого - просто создать специальный городской стол для Соединенных Штатов, тогда во всех других странах есть еще одна таблица города, у которой нет поля состояния.

Я думаю, что это просто усложнит вопрос, потому что у меня есть два стола для городов.

Как я могу улучшить этот дизайн?

+0

Вниз и грязное решение - загрузить Virtuemart и использовать таблицы страны/штата из этого - его получили 200+ стран и все связанные состояния, а затем добавьте в свои города – GDP

ответ

2

Почему нет стандартного 3-полосного связанного стола?

table country (
    id int primary key, 
    name varchar(255) 
); 

table state (
    id int primary key, 
    name varchar(255), 
    country_id int foreign key country (id) 
); 

table city (
    id int primary key, 
    name varchar(255) 
    state_id int foreign key state (id) 
); 

Это будет поддерживать в большинстве случаев, за исключением несколько вырожденных как Lloydminster, Saskatchewan, через который проходит две провинциальных границ.

+0

привет, таблица города все еще имеет state_id. что, если в городе нет штата? что случится? У меня действительно есть проблемы с мышлением в трех столах. у меня болит голова. –

+0

Что делать, если state_id в таблице города не имеет значения? –

+0

Город, который существует без государства? например Сингапур? –

5

Почему бы не пойти реляционным?

Country (CountryID, CountryCode, CountryName) 
Region (RegionID, RegionCode, RegionName, CountryID) 
City (CityID, CityCode, CityName, RegionID) 

Название «Регион» является более универсальным, чем государство, что означает, что оно, вероятно, будет иметь больше смысла во всем мире.

+0

ic, ok плохо меняйте его в регион. спасибо за советы –

0

Есть много стран, кроме Соединенных Штатов, которые имеют политические разногласия между национальным и муниципальным уровнями. В Австралии есть штаты, у Канады есть провинции, в Японии есть префектуры и т. Д.

Вопрос в том, как вы отслеживаете эту информацию и сохраняете ее в соответствии? У вас может быть «фиктивная запись» на среднем уровне для стран, у которых ее нет. Другой способ справиться с этим - денормализовать внешние ключи для всех уровней до объекта, содержащего адрес. Если страна и город являются обязательными, то их внешние ключи будут недействительными, тогда как ваше состояние FK может быть недействительным.

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

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

+0

да, мой план - нормализовать это. моя первая цель - получить все государства для США. то я буду добавлять государства в Австралию в будущем. Мне нужен дизайн таблицы, который является гибким, который может обрабатывать изменения в будущем –