Описание многоуровневой системы ведения адресации
В данной системе предусмотрено неограниченное количество элементов адресации (страны, регионы, города, улицы).
В зависимости от нужд провайдера можно настроить свое собственное дерево адресации. Например: Страна → Район → Город → Дом.
В системе адресации всегда присутствуют два элемента адресации: конечная точка подключения (bild_id - дом) и родительский элемент геолокации (улица, район и проч.).
Элементы геолокации имеют субпараметры, которые позволяют детализировать их сущность. Например, равноправные элементы геолокации такие как: Улица, Переулок, Бульвар или Город, Село, ПГТ.
Элементы системы адресов связаны между собой и не подлежат изменению после создания.
Схема адресов
- Украина (страна)
- Киевская обл (регион)
- Киев (город)
- Хрещатик (улица)
- 32 (дом)
- Хрещатик (улица)
- Киев (город)
- Киевская обл (регион)
Возможности
Пользователь (провайдер) сам задает схему адресов. Структура - линейная. Из обязательных уровней только дом (последний уровень, который соединяет новые адреса с уже существующей таблицей builds.
Для работы используются следующие таблицы:
DROP TABLE IF EXISTS `address_levels`; CREATE TABLE `address_levels` ( `level` int(11) unsigned NOT NULL AUTO_INCREMENT, `level_name` varchar(50) NOT NULL DEFAULT '', PRIMARY KEY (`level`) ) DEFAULT CHARSET=utf8 COMMENT='Address node types'; INSERT INTO `address_levels` VALUES (1,'Область'), (2,'Район'), (3,'Населенный пункт'), (4,'Улица'), (5,'Дом'); DROP TABLE IF EXISTS `address_values`; CREATE TABLE `address_values` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `level_id` int(11) unsigned NOT NULL DEFAULT '0', `value` varchar(100) NOT NULL DEFAULT '', `parent_id` int(11) unsigned NOT NULL DEFAULT '0', PRIMARY KEY (`id`) ) DEFAULT CHARSET=utf8 COMMENT='Address nodes'; INSERT INTO `address_values` VALUES (19,1,'Черновецкая',0), (20,1,'Тернопольская',0), (21,1,'Ивано-Франковская',0), (22,2,'Кицманский',19), (23,2,'Заставновский',19), (24,2,'Путыльский',19), (25,2,'Вижницкий',19), (26,2,'Новоселицкий',19), (27,3,'с. Берегомет',22), (28,3,'с. Мамаивцы',22), (29,3,'с. Розтокы',24), (30,3,'смт. Путыла',24), (31,3,'г. Выжница',25), (32,3,'смт. Берегомет',25), (33,3,'с. Зеленый гай',26), (34,3,'с. Викно',23), (35,2,'Косовский',21), (36,3,'с. Куты',35), (37,3,'с. Розтокы',35), (38,2,'Гусятинский',20), (39,2,'Залищиковский',20), (40,2,'Лановецкий',20), (41,3,'с. Викно',38), (42,3,'с. Оленивка',38), (43,3,'с. Зеленый гай',39), (44,3,'с. Оленивка',40), (45,4,'Шевченко',36), (46,4,'Стуса',36), (47,5,'8',46), (48,5,'10',46), (49,5,'12',46), (50,4,'Петрова',30), (51,5,'23',50); DROP TABLE IF EXISTS `address_main`; CREATE TABLE `address_main` ( `address_id` int(11) unsigned NOT NULL DEFAULT '0', `location_id` int(11) unsigned NOT NULL DEFAULT '0', PRIMARY KEY (`address_id`) ) COMMENT='Address main'; INSERT INTO `address_main` VALUES (47,1), (48,2), (49,3), (51,4);
address_levels - Уровни структуры адресов.
address_values - ноды (узлы) адреса.
address_main - связь между деревом адресов и location_id.
Шаблон изменения и отображения адреса в веб форме планирую заменить строкой с полным адресом и кнопкой изменения. При нажатии открывается модальное окно с выбором адреса, после закрытия модального окна в форму подставляется location_id выбранного адреса.
Для отображения в документах и шаблонах данные можно получить с помощью user→info() , имя ключей хеша берется из таблицы уровней.
Отличия
В отличии от старой структуры (когда для каждого уровня создается своя таблица), для древовидных адресов недоступны следующие функции:
Нельзя сделать JOIN к другим таблицам (юзерс, интернет и тд)
Нельзя использовать в резулт_формере
Нельзя подключить к users_list
Нельзя подключить к internet_list
Нельзя вывести в виде таблицы
Нет доступа к всему массиву адресов, только по одному.