Хранение геополитических данных в MySQL

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

Сохранение стран, штатов и округов легко, потому что штат принадлежит ровно 1 стране, а округ принадлежит ровно 1 штату.

Однако при сохранении почтовых индексов и городов проблема становится немного сложнее. Штат может иметь несколько почтовых индексов, а почтовый индекс может принадлежать нескольким штатам. Почтовые индексы и города также могут принадлежать нескольким штатам / округам. Черт возьми, некоторые города и почтовые индексы могут даже не принадлежать никаким округам, таким как Вашингтон, округ Колумбия.

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


person Turner Houghton    schedule 12.06.2018    source источник
comment
Есть, но это секрет,   -  person Strawberry    schedule 13.06.2018
comment
Lol спасибо за полезный комментарий   -  person Turner Houghton    schedule 13.06.2018
comment
Это просто проблема нормализации базы данных, и на эту тему написаны целые библиотеки книг. Никакая модель базы данных не может учесть все пограничные случаи, потому что по определению всегда есть край к тому, что может вместить ваша схема. Вы просто устанавливаете край настолько далеко, что любые проблемы, которые у вас есть, не являются проблемой для ваших пользователей.   -  person tadman    schedule 13.06.2018
comment
Помните, что округ - это не универсальное понятие, даже в США. Некоторые государства делят вещи по-другому. Некоторые места в США даже не являются штатами сами по себе, это территории, районы, владения или вообще не место, как в случае с военными адресами.   -  person tadman    schedule 13.06.2018
comment
И в Лос-Анджелесе есть приходы, и в AK есть районы, а Сан-Франциско - это и город, и округ, и ...   -  person Rick James    schedule 14.06.2018
comment
Я нашел базу данных примерно с 10 миллионами имен точек. В нем есть country_code, список альтернативных кодов стран и 4 столбца для административных единиц.   -  person Rick James    schedule 14.06.2018
comment
У вас есть список всех адресов и их местонахождение? Это будут миллиарды строк. Или вы будете зависеть от широты и долготы?   -  person Rick James    schedule 14.06.2018


Ответы (1)


Однако при сохранении почтовых индексов и городов проблема становится немного сложнее.

Сначала вам нужно создать страны, города, государства и zip_codes.

Очевидно, что существует связь M: M между объектами States и Zip_codes, поэтому вам нужно будет создать новую таблицу и называть ее States_Zip_codes, которая содержит два внешних ключа State_id FK и Zip_Id как FK.

Почтовые индексы и города также могут принадлежать нескольким штатам / округам.

В этом случае отношение один ко многим, поэтому Zip_code_id (первичный ключ таблицы Zip_codes) - это FK в таблице состояний и так далее.

Я не понимаю природу отношения много ко многим или один ко многим

некоторые города и почтовые индексы могут даже не принадлежать каким-либо округам, например Вашингтону, округ Колумбия.

Таким образом, в поле city_name (свойство) это будет null

Надеюсь, это поможет. .

person Webdev    schedule 14.06.2018