Думаю, что совсем не проще. Если предположить, что в базе данных у нас есть таблица адресных точек, где в каждой строке параметры точек: имя, ссылка на таблицу дорог и ссылка на таблицу индексов; аналогично, таблица дорог в свою очередь имеет ссылки на таблицы Населенного пункта (и т.п.), то задание индекса на уровне улицы и населенного пункта ничего принципиально не меняет. Так как для сборки адреса уже просматриваются все таблицы, никакого влияния на производительность и логику быть не должно. Если, наоборот, адресные точки привязывать к индексам, то это существенно меняет и запрос, и логику всей работы, к тому же, нужно придумывать новый интерфейс работы. Мне представляется, что для реализации первоначального варианта нужно сравнительно небольшое число человеко-часов. Зато базу индексов станет возможно актуализировать и поддерживать. Без этого вся уже проделанная работа обесценивается. Кому нужен сервис, в котором доброй половины данных нет, а тем данным, что есть, доверять нельзя.
Скоро будет два года, как стало возможным привязывать почтовые индексы к точкам. Однако, переход в соответствующий слой явно указывает, что данная механика полноценно не работает. В Орловской области, где живу, сколько-нибудь существенно индексы были проставлены только в областном центре. Что наиболее критично, адресные точки в нескольких районах города имели неверные индексы.
В условиях ручной привязки к адресным точкам, поддерживать индексы в актуальном состоянии очень сложно. Получается нудное и бестолковое накликивание (этакий корова кликер 2.0). Предлагаю добавить возможность создавать почтовый индекс на уровне Дорог (улиц) и Населенных пунктов. Если индекс проставлен на уровне населенного пункта, то все Адресные точки, привязанные к подчиненным Дорогам (улицам), получат этот индекс. Если индекс Населенного пункта не задан, его можно задать на уровне Дороги (улицы) и адресные точки также должны его получить.
Такое изменение на порядки сократит объём механических действий для поддержания актуальности базы индексов. Вместо того, чтобы править сотни адресных точек в поселках и деревнях можно будет исправить только индекс Населенного пункта. Аналогично и в городах - большая часть улиц находится в одном индексе. Также это будет полезно для новых адресных точек – не нужно думать об индексе, если он уже задан для дороги или Населенного пункта.
Алгоритм:
К объектам «Дорога» и «Административная единица\населённый пункт» добавляется по два атрибута: чек-бокс «Единый индекс» и текстовое поле «Индекс».
Функция вывода адреса, везде, где используется, модифицируется: вместо прямого получения индекса из адресной точки, добавляется проверка на задание индекса на уровне Населённого пункта и Дороги, к которым адресная точка привязана. Соответственно, на вывод отдается индекс самого высокого уровня: индекс Населенного пункта, если задан; иначе индекс Дороги, если задан; иначе индекс адресной точки.
Если индекс создан на более высоком уровне, то в младших уровнях на НЯК соответствующие поля становятся неактивными и заполняются данными из верхнего уровня.
Существующие данные об индексе в адресных точках не трогаем, если индекс будет задан на более высоком уровне, то просто их игнорируем. Если в будущем единый индекс на уровне Дороги или Населенного пункта будет удален, то тогда вновь начинаем работать с индексами в Адресных точках.
Предложение, конечно, выглядит как костыль, но он лучше, чем тот, что есть сейчас.
P.S. Еще два небольших предложения по теме:
Создать технический индекс с именем «Отсутствует» и без ограничения по расстоянию до него. Этот индекс можно будет использовать для различных СНТ и т.п., чтобы визуально отличать точки, у которых индексы еще не проставлены, от тех, у которых индекса вообще нет.
Для индексов, у которых нет привязанных адресных точек изменить оттенок цвета на НЯК, чтобы можно было легко их увидеть для последующей привязки или удаления.
Не проще сделать в самих почтовых отделениях базу со писком прикреплённых адресов, даже улиц с любыми номерами и т.п. А в самих АТ высасывать данные или виртуально или серверным заполнением? Буквально все индексы будут заполнены сразу. Новое почтовое отделение не потребует лопатить 100500 отдельных адресных точек.