Описание многоуровневой системы ведения адресации

В данной системе предусмотрено неограниченное количество элементов адресации (страны, регионы, города, улицы).

В зависимости от нужд провайдера можно настроить свое собственное дерево адресации. Например: Страна → Район → Город → Дом.

В системе адресации всегда присутствуют два элемента адресации: конечная точка подключения (bild_id - дом) и родительский элемент геолокации (улица, район и проч.).

Элементы геолокации имеют субпараметры, которые позволяют детализировать их сущность. Например, равноправные элементы геолокации такие как: Улица, Переулок, Бульвар или  Город, Село, ПГТ.

Элементы системы адресов связаны между собой и не подлежат изменению после создания.

Схема адресов

  • Украина (страна)
    • Киевская обл (регион)
      • Киев (город)
        • Хрещатик (улица)
          • 32 (дом)


Возможности


Пользователь (провайдер) сам задает схему адресов. Структура - линейная. Из обязательных уровней только дом (последний уровень, который соединяет новые адреса с уже существующей таблицей builds.


Для работы используются таблицы (названия приблизительные):

levels - Уровни структуры адресов (например 1-Страна, 2-Город, 3-Улица, 4-Дом ). Для каждого уровня указывается название уровня и имя переменной (для использования в шаблонах)


values - ноды (узлы) адреса. Сохранены в виде дерева. Каждое значение имеет 2 параметра - уровень  и родительский элемент (ссылка на элемент более высокого уровня). Для примера значение "улица Бандеры" будет иметь уровень 3 (улица) и ссылку на родительский элемент "город Коломыя"


main - связь между деревом адресов и location_id.  В таблице сохраняется location_id, id последней ноды адреса. (айди дома, если дом последний уровень).


Шаблон изменения и отображения адреса в веб форме планирую заменить строкой с полным адресом и кнопкой изменения. При нажатии открывается модальное окно с выбором адреса, после закрытия модального окна в форму подставляется location_id выбранного адреса.


Для отображения в документах и шаблонах данные можно получить с помощью user→info() , имя ключей хеша берется из таблицы уровней.


Отличия

В отличии от старой структуры (когда для каждого уровня создается своя таблица), для древовидных адресов недоступны следующие функции:


Нельзя сделать JOIN к другим таблицам (юзерс, интернет и тд)

Нельзя использовать в резулт_формере

Нельзя подключить к users_list

Нельзя подключить к internet_list

Нельзя вывести в виде таблицы

Нет доступа к всему массиву адресов, только по одному.