ГЛАВНАЯ     АРХИВ     НАПИСАТЬ АДМИНУ     ПОДПИСАТЬСЯ НА RSS     ВОЙТИ      

Поиск

Категории

Облако тегов

  << Предыдущий пост       Следующий пост >>  
От: kramer
29. октября 2012 22:03

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. Сделать это достаточно быстро, и если кто-нибудь соберется прикрутить к своему проекту КЛАДР, то этот пост сильно упростит и ускорит его работу.

Похожие записи


Вопросы на собеседовании C#, Net, ASP.NET, SQL
Продолжая тему вопросов на собеседовании. Нашел еще одну подборку. Оригинал лежит здесь . Перенес, чтобы не затерялось. Есть вполне вменяемые ответы (хотя, на некоторые вопросы ответил бы по-другому). Ответы находятся после списка вопросов, я их не менял. 23. Что такое шаблон проектирования Model/View/Controller? Как и зачем его применяют? 2...

Способы заработка на сайте
На этом блоге было много постов про производство и раскрутку сайтов. Но пока не было про заработок на них. Пора исправить этот недочет. Здесь будут описаны по возможности не фантастичные, и не супер низко прибыльные способы. Также упор будет сделан именно на организацию процесса, а не технических деталях, которых в обилии в интернете. Несмотря на то, что как пр...

Сколько вы стоите, или как вести переговоры о зарплате
Не в деньгах счастье. Многие добавят «но в их количестве». Можно долго рассуждать о преданности любимому делу, заводить разговоры о стремлении к профессиональному росту и работе в сплоченном коллективе. Но это, скорее, прелюдия к главному и насущному вопросу «сколько?». И от полученного ответа зависит либо дальнейший энтузиазм в разговоре, либо плохо скрываемое ...

Комментарии

 
nistelroi 17.11.2013 0:21:38 #

Сэкономило кучу времени, спасибо!

Добавить комментарий




biuquote
  • Комментарий
  • Предпросмотр
Loading


  Сохранить комментарий