Comments 8
Я для своих проектов сделал базу на основе КЛАДР версии ФИАС. Получилось, как мне кажется, намного проще. Всего две таблицы — Socrs и AddressElements. Первая повторяет исходную в КЛАДР, а вторая:
--MS  SQL
CREATE TABLE [dbo].[AddressElements](
	[Code] [decimal](19, 0) NOT NULL PRIMARY KEY,
	[ElementType] [tinyint] NOT NULL,
	[IsCityOrPlace] [bit] NOT NULL,
	[Name] [varchar](40) NULL,
	[Socr] [varchar](10) NULL,
	[AltName] [varchar](200) NULL,
	[RegionCode] [smallint] NOT NULL,
	[RayonCode] [smallint] NOT NULL,
	[CityCode] [smallint] NOT NULL,
	[PlaceCode] [smallint] NOT NULL,
	[StreetCode] [smallint] NOT NULL,
	[Actuality] [tinyint] NOT NULL,
	[PostIndex] [varchar](6) NULL,
	[Ifns] [varchar](4) NULL,
	[Ocato] [varchar](11) NULL,
	[FullRegion] [varchar](160) NULL
) 
Ваш вопрос требует развернутого ответа. Я, обязательно, отвечу Вам завтра на свежую голову.
Степень простоты или сложности решения оценивается в зависимости от задачи. Я принимаю неявный упрек в том, что в публикации не описал решаемую задачу, а лишь ограничился тем, что использую структуру справочника ADDROBJ.DBF.
Задача состоит в том, чтобы по адресу, поступившему откуда-то извне (например, от заказчика), найти соответствующий адрес в справочнике ФИАС. При этом, внешний адрес может содержать устаревшие названия улиц и населенный пунктов. Как Вы знаете, переименование названий адресообразующих элементов не такое уж редкое явление.
Поэтому в структуре таблицы, созданной из справочника, были сохранены записи об истории переименования каждого элемента. Я надеялся, что смогу по устаревшему названию элемента находить актуальное. К сожалению, эта надежда не оправдалась. Как написано в первой части статьи лишь в 6,8% от числа элементов, имеющих записи об истории переименования, присутствуют различия в названиях одного и того же элемента. Да и в этих случаях, речь идет скорее об исправлении ошибок, чем об истории переименования адресообразующих элементов. Поэтому, мне не удалось использовать ФИАС, как базовый справочник для решения поставленной задачи. Сейчас он используется как один из источников данных для моего внутреннего справочника адресов.
Подробнее проблемы связанные и использованием адресов ФИАС изложены: .
Описанная задача решается как часть основной задачи – задачи геопривязки, т.е. по предоставленному извне адресу найти объект на карте. Но объектами на карте не обязательно являются дома в населенных пунктах. Такими объектами могут быть, например, дома в дачных или садовых товариществах, или здания цехов на территории промышленной зоны.
Вот как выглядят адреса таких и подобных мест:
«Республика Хакасия, г Абакан, пр-кт Дружбы Народов, дворовая территория домов 15 17 19 тер»
«Республика Хакасия, г Абакан, ул Пушкина, дворовая территория дома 21 тер»
Для идентификации таких мест код ФИАС расширен полями:

  • PLANCODE nvarchar(4) Код элемента планировочной структуры
  • EXTRCODE nvarchar(4) Код дополнительного адресообразующего элемента
  • SEXTCODE nvarchar(3) Код подчиненного дополнительного адресообразующего элемента


Смотри документ «Сведения о составе информации государственного адресного реестра федеральной информационной адресной системы» на сайте .
Не буду обманывать, задача геопривязки дополнительных территорий еще не решена, но она стоит в ближайших планах компании, в которой я работаю. Поэтому и эти поля я не убирал из структуры таблицы.
Извините. В ответе не отобразились ссылки на сайты. Документ который упоминается в ответе, можно найти запросу ФИАС (ФЕДЕРАЛЬНАЯ ИНФОРМАЦИОННАЯ АДРЕСНАЯ СИСТЕМА) на сайте налоговой службы.
Мое описание проблем с адресами ФИАС можно найти по названию публикации «Эх, ФИАС, ФИАС… Почему ты не адресный реестр?».
Я не думал упрекать. Структура ФИАС слишком замудрена. Кстати у меня тоже можно найти предыдущие наименования — они будут с другим кодом Actuality (также содержится в Code). Таблица для переименований мне не нужна, если, конечно, не придется искать реорганизованные пункты. Тогда можно будет и добавить её.
Я смотрю у Вас в правилах создание объектов бд с использованием begin\commit блоков. При генерации таблиц так же пользуетесь транзакцией или всяческие constraint внутрь create table (..) вместо alter table…?
Да, при создании таблиц я особенно часто использую транзакции. Сначала begin\rollback, а когда уверен, что ничего не забыл, использую begin\commit блоков.
Only those users with full accounts are able to leave comments. Log in, please.