MySQL отношения для таблицы региона страны и города - PullRequest
0 голосов
/ 19 февраля 2011

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

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

В настоящее время мои таблицы как таковые

tbl> У пользователя есть townID (FK)

tbl> у города есть id (PK) имя_домена regionID (FK DEFAULT NULL)

tbl> регион имеет идентификатор (PK) regionName countryID (FK NOT NULL)

tbl> странаимеет идентификатор (PK) countryName

Я подумал, возможно, еще больше наплевать на отношение пользователя к городу:

tbl> У пользователя есть locationID (FK)
tbl>у местоположения есть id (PK) townID (FK) regionID (FK) countryID (FK)

Но я думаю, что это не нужно и только еще больше усложняет проблему?

База данных по странеуже заселено.Я намерен создать собственные ссылки на отношения город> регион> страна, введенные пользователями.Поэтому, если пользователь вводит город без региона и страны, он вводится в tbl> town без regionID, если еще не существует города с таким именем без идентификатора региона.То же самое относится и к городу, в котором идентификатор региона и страны введен пользователем.Только я проверяю, что не существует отношения город> регион> страна, которое уже существует до входа.Позже при разработке сайта я буду предоставлять предложения Ajax для страны / региона на основе введенного пользователем города.

Итак, на вопросы:

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

На этот вопрос можно ответить предыдущим вопросом: но могу ли я что-нибудь сделать, чтобы уменьшить обработку таблиц в PHP.Очевидно, я бы предпочел просто вставить с одним оператором PHP, но я думаю, что слишком много предупреждений, чтобы сделать это одновременно.

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

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

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

Ответы [ 3 ]

0 голосов
/ 19 февраля 2011

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

0 голосов
/ 19 февраля 2011

Принятие названия города без региона и страны похоже на то, что кто-то может ввести свое имя без имени или фамилии.Это данные, но это не идентификатор.

Полное имя Фуллертона - «Фуллертон, Калифорния, США».Не требуя полного имени Фуллертона, вы отказываетесь от внешних ключей для целостности данных.(«Фуллертон, штат Калифорния, США» - это город; «Фуллертон, штат Алабама, США» - нет.) Удачи с этим.

Если вы идете по этому пути, лучший совет, который я могу вам предложитьэто избавиться от идентификационных номеров.ИСО публикует стандартные коды для стран и подразделений стран.Вы можете посмотреть их в Википедии .Хранение натуральных ключей сократит количество объединений с 3 до нуля.Нулевые объединения почти всегда будут выполнять 3 соединения.

Вам, вероятно, потребуется использовать внешние объединения для создания ваших представлений.

0 голосов
/ 19 февраля 2011

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...