Сегодня 22 июля, вторник ГлавнаяНовостиО проектеЛичный кабинетПомощьКонтакты Сделать стартовойКарта сайтаНаписать администрации
Поиск по сайту
 
Ваше мнение
Какой рейтинг вас больше интересует?
 
 
 
 
 
Проголосовало: 7281
Кнопка
BlogRider.ru - Каталог блогов Рунета
получить код
coding4.net
coding4.net
Голосов: 1
Адрес блога: http://www.coding4.net/
Добавлен: 2012-06-11 20:16:46
 

Таблицы данных отвечающие за КЛАДР и загрузчик его данных

2012-10-29 23:03:00 (читать в оригинале)


ms sql server

Продолжаю серию практических постов о реализации различных структур в БД. В этом посте речь пойдет о таблицах описывающих различные данные соответствующие содержимому КЛАДР-а. Эти таблицы устроены таким образом, чтобы ими было удобно пользоваться для различных задач. В этом смысле они более универсальны, чем таблицы самого КЛАДР-а. КЛАДР имеет особое значение для нашей страны. На 3-х местах работы (причем 2 из них коммерческие), я взаимодействовал с КЛАДР-ом. Так что, думаю, кому-нибудь пригодиться то, что я тут выложу. Оформление таблиц делалось в соответствии с Об одном из способов именования таблиц, представлений, хранимых процедур.... Единственное отличие это то, что все части и вспомогательные сущности помещаются в таблицы с "типом" TOB. Сначала скрипт будет идти просто как текст поста, чтобы вы могли посмотреть о чем идет речь. Потом будут диаграммы этой части БД. Потом скрипт целиком для накатывания на БД. Потом архив с TSQL скриптами для каждой сущности в отдельности, для того чтобы их было удобно использовать в проекте базы данных в солюшене. И в конце, самое полезное - проект загрузчика данных из файлов официального КЛАДР-а. Правда этого не достаточно для загрузки и кое-что придется сделать вам самим, но все же этот пост вам сильно поможет, если в вашем проекте нужен КЛАДР. Для простоты ссылки ведущие на таблицы, описания которых я не собираюсь публиковать, оформлены просто как значения типа идентификатор (в общем скрипте). В этом проекте это GUID (uniqueidentifier).


use [test]
GO

CREATE TABLE [dbo].[tblKladrDICCountyType]
(
	Id				uniqueidentifier PRIMARY KEY DEFAULT NEWSEQUENTIALID() ROWGUIDCOL, 
	Value           nvarchar(40) NOT NULL, -- название района
	Comment         nvarchar(max) NULL,    -- некое средней длины дополнительное пояснение
)
GO

-- тип географического объекта
-- обозначает на какую таблицу ссылка: tblKladrTOBCountry, tblKladrTOBRegion, tblKladrTOBSettlement
CREATE TABLE [dbo].[tblKladrDICObjectType]
(
	Id        uniqueidentifier PRIMARY KEY DEFAULT NEWSEQUENTIALID() ROWGUIDCOL, 
	Value     nvarchar(16)  NULL, -- тип гео объекта
	Comment   nvarchar(max) NULL  -- некое дополнительное пояснение
)
GO

-- тип региона внутри страны (первичные данные берутся из КЛАДР)
CREATE TABLE [dbo].[tblKladrDICRegionType]
(
	Id      uniqueidentifier PRIMARY KEY DEFAULT NEWSEQUENTIALID() ROWGUIDCOL, 
	Value   nchar(16) NOT NULL, -- тип региона - строка
	Comment nvarchar(max) NULL, -- некое средней длины дополнительное пояснение
)
GO

-- тип населенного пункта (первичные данные берутся из КЛАДР)
-- например: городок, деревня, аул, аал, заимка
CREATE TABLE [dbo].[tblKladrDICSettlementType]
(
	Id      uniqueidentifier PRIMARY KEY DEFAULT NEWSEQUENTIALID() ROWGUIDCOL, 
	Value   nchar(16) NOT NULL, -- тип населенного пункта - строка
	Comment nvarchar(max) NULL -- некое средней длины дополнительное пояснение
)
GO

-- тип улицы (первичные данные берутся из КЛАДР)
-- например: улица, переулок, проезд, площадь и т.п.
CREATE TABLE [dbo].[tblKladrDICStreetType]
(
	Id      uniqueidentifier PRIMARY KEY DEFAULT NEWSEQUENTIALID() ROWGUIDCOL, 
	Value   nchar(16) NOT NULL, -- тип улицы - строка
	Comment nvarchar(max) NULL  -- некое средней длины дополнительное пояснение
)
GO

-- страна
CREATE TABLE [dbo].[tblKladrTOBCountry]
(
	Id          uniqueidentifier PRIMARY KEY DEFAULT NEWSEQUENTIALID() ROWGUIDCOL, 
	
	Value              nchar(40) NOT NULL, -- название страны
	Comment            nvarchar(max) NULL, -- некое средней длины дополнительное пояснение
	
	PartOfPhoneNumber  nchar(4)            -- номер страны внутри номера телефона
)
GO

-- регионы страны, максимального размера, то есть области/штаты, но не районы/дистрикты
CREATE TABLE [tblKladrTOBRegion]
(
	Id                uniqueidentifier PRIMARY KEY DEFAULT NEWSEQUENTIALID() ROWGUIDCOL, 
	Value             nchar(40) NOT NULL, -- название региона
	Comment           nvarchar(max) NULL,   -- некое средней длины дополнительное пояснение
	Country           uniqueidentifier REFERENCES tblKladrTOBCountry(Id)    NULL, -- страна в которой регион      
	RegionType        uniqueidentifier REFERENCES tblKladrDICRegionType(Id) NULL, -- тип региона       
	PartOfAutoNumber  nchar(2),       -- номер региона внутри номера транспортного средства
	KLADRCode         nchar(17) NULL,  -- код для сопоставления с КЛАДР(здесь полные 17 цифр)
	IsActual		  bit, -- признак актуальности объекта
	PartOfPhoneNumber nchar(7)  NULL,  -- номер региона внутри номера телефона	
	TimeZone		  uniqueidentifier,
	LastChangeDate	  datetime2
)
GO

CREATE TABLE [dbo].[tblKladrTOBCounty]
(
	Id                uniqueidentifier PRIMARY KEY DEFAULT NEWSEQUENTIALID() ROWGUIDCOL, 
	Value             nvarchar(40) NOT NULL, -- название района
	Comment           nvarchar(max) NULL,    -- некое средней длины sдополнительное пояснение
	Region			  uniqueidentifier references tblKladrTOBRegion(Id) NOT NULL, -- ссылка на регион
	CountyType		  uniqueidentifier references tblKladrDICCountyType(Id), --тип района
	KLADRCode		  nchar(17) NULL,  -- код для сопоставления с КЛАДР(здесь полные 17 цифр)
	PostalIndex		  nchar(6) NULL, -- почтовый индекс
	IsActual		  bit, -- признак актуальности объекта
	LastChangeDate datetime2
)
GO

-- населенные пункты
CREATE TABLE [dbo].[tblKladrTOBSettlement]
(
	Id                uniqueidentifier PRIMARY KEY DEFAULT NEWSEQUENTIALID() ROWGUIDCOL, 
	Value             nvarchar(40) NOT NULL, -- название населенного пункта 
	Comment           nvarchar(max) NULL,    -- некое средней длины дополнительное пояснение
	Region            uniqueidentifier REFERENCES tblKladrTOBRegion(Id) NOT NULL,         -- регион где нас. пункт      
	County            uniqueidentifier REFERENCES tblKladrTOBCounty(Id) NOT NULL,         -- район где нас. пункт      
	SettlementType    uniqueidentifier REFERENCES tblKladrDICSettlementType(Id) NULL, -- тип нас. пункта
	KLADRCode         nchar(17) NULL,         -- код для сопоставления с КЛАДР(здесь полные 17 цифр)
	PostalIndex		  nchar(6) NULL, -- почтовый индекс
	IsActual		  bit, -- признак актуальности объекта
	IsFake			  bit, -- признак фиктивности
	IsRAT			  bit, -- в поселении имеется присутствие РАТ
	LastChangeDate datetime2
)
GO

-- улица существующая в некотором населенном пункте (первоначально согласно кладр) 
CREATE TABLE [dbo].[tblKladrTOBStreet]
(
	Id    uniqueidentifier PRIMARY KEY DEFAULT NEWSEQUENTIALID() ROWGUIDCOL, 
	Value nvarchar(40) NOT NULL, -- название населенного пункта 
	Settlement uniqueidentifier REFERENCES tblKladrTOBSettlement(Id) NULL, -- нас. пункт где улица
	StreetType uniqueidentifier REFERENCES tblKladrDICStreetType(Id) NULL, -- тип улицы (ул, пер...)
	KLADRCode  nchar(17) NULL, -- код для сопоставления с КЛАДР(здесь полные 17 цифр)
	PostalIndex nchar(6) NULL, -- почтовый индекс
	LastChangeDate datetime2	
)
GO

КЛАДР таблицы БД

Это скрипт целиком в виде одного файла - KLADR_DB.sql (10,62 kb).

А это скрипты создания каждой отдельной таблицы - KLADR_Db_Entities.zip (5,43 kb),
для использования в проекте базы данных в солюшене.

А это загрузчик из БД КЛАДР-а - KLADR_Loader.zip (12,19 kb). Правда не полный, вам придется использовать ORM, подойдут LINQ2SQL или Entity Framework. Сделать это достаточно быстро, и если кто-нибудь соберется прикрутить к своему проекту КЛАДР, то этот пост сильно упростит и ускорит его работу.


Тэги: (решение), tsql, сделать

 


Самый-самый блог
Блогер Рыбалка
Рыбалка
по среднему баллу (5.00) в категории «Спорт»


Загрузка...Загрузка...
BlogRider.ru не имеет отношения к публикуемым в записях блогов материалам. Все записи
взяты из открытых общедоступных источников и являются собственностью их авторов.