2016-12-22 11 views
0

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

У меня есть несколько способов, думаю, и показать вам, пожалуйста, возьмите меня на правильный путь:

  1. Я попытался принести клиенту возможность выбрать, какие поля использовать для адреса.

Вот некоторые из них:

enter image description here

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

Например, street_number имеет 3 значения.

enter image description here

В конце у меня есть таблица, где я property_addresses соотносить property_id с value_id. В картине было выбрано значение 20.

Проблема в том, что я не вижу, как я могу получить список полного правильного адреса.

+2

Не будет «правильного» способа сделать это. Это будет зависеть от того, как вам нужно использовать данные позже, и нужно ли импортировать или экспортировать данные (и как эти данные отформатированы). – techturtle

+0

Подумайте об этом, есть ли преимущество в том, чтобы отделить информацию о адресе на более мелкие и мелкие куски? Кто-нибудь собирается искать все адреса, у которых есть номер улицы 20? Чем сложнее вы создаете пользовательский интерфейс, тем меньше людей хотят его использовать. Действительно, люди очень хорошо добавляют адрес улицы в одном поле, а затем в город, штат, страну, почтовый индекс и т. Д. Так люди ищут вещи позже. Попытка сделать его более сложным, просто делает пользователей сердитыми. Гибкость, как правило, плохо в пользовательском интерфейсе, поэтому программное обеспечение сложно использовать. – HLGEM

ответ

0

Создайте таблицу (address_fields), которая содержит поля различного типа, необходимые для хранения адресов. Другая таблица, в которой хранятся данные property_id, field_id & field_value. Вы можете добавить любой новый тип адреса в таблицу address_fields на любом последующем этапе. Вы должны сохранять связь между property_id & user_id, которую вы можете использовать для создания JOINS для вытягивания данных для ваших требований.