-- KLADR addresses - подготовим служебные таблицы
CREATE TABLE LocalityTypes
(
	TypeID	int NOT NULL,
	Level	decimal(1,0) NOT NULL,	
	Name	nvarchar(100) NOT NULL,
	Abbr	nvarchar(20) NOT NULL,
	PRIMARY KEY(TypeID)
)
GO
CREATE TABLE StreetTypes
(
	TypeID	int NOT NULL,
	Name	nvarchar(100) NOT NULL,
	Abbr	nvarchar(20) NOT NULL,
	Synonyms nvarchar(1024),
	PRIMARY KEY(TypeID)
)
GO
CREATE TABLE Localities
(
	LocalityID		int identity(1,1),
	SubjectCode		decimal(2,0), 
	RegionCode		decimal(3,0),
	TownCode		decimal(3,0), 
	SettlementCode		decimal(3,0),
	Name			nvarchar(100) not null,
	TypeID			int NOT NULL,
	ParentLocalityID        int,
	PRIMARY KEY (LocalityID)
)  
GO 
CREATE TABLE Streets
(
	StreetID	int identity(1,1),
	LocalityID	int NOT NULL,	
	StreetCode 	decimal(4,0),
	Name		nvarchar(100) not null,
	TypeID		int NOT NULL,
        Synonyms nvarchar(1024),
	PRIMARY KEY (StreetID)
)  
GO
CREATE TABLE Addresses
(
	AddressID		int identity(1,1),
	LocalityID		int not null,
	StreetID		int,
	Estate	    		nvarchar(50),
	EstateType    		int not null default 0,
	Fraction	        nvarchar(50),
	Housing			nvarchar(50),
	Building		nvarchar(50),	
	Flat			nvarchar(50),
        Entrance                nvarchar(50),
        Note			nvarchar(100),
	PRIMARY KEY(AddressID)		
)  
GO
alter table Localities add foreign key (TypeID) references LocalityTypes
alter table Localities add foreign key (ParentLocalityID) references Localities
alter table Streets add foreign key (TypeID) references StreetTypes
alter table Streets add foreign key (LocalityID) references Localities on delete cascade
alter table Addresses add foreign key (LocalityID) references Localities
alter table Addresses add foreign key (StreetID) references Streets
GO

-- добавим нужные атрибуты в объекты, использующие адрес

alter table ConsumingObjects add AddressID int
alter table Individuals add AddressID int
alter table Individuals add RegistrationAddressID int
alter table Группа_ячейки add AddressID int
alter table Линия add AddressID int
alter table Организация add Код_фактического_адреса int
alter table Организация add Код_юридического_адреса int
alter table Подстанция add AddressID int
alter table Склад add AddressID int
GO
alter table ConsumingObjects add foreign key (AddressID) references Addresses
alter table Individuals add foreign key (RegistrationAddressID) references Addresses
alter table Individuals add foreign key (AddressID) references Addresses
alter table Группа_ячейки add foreign key (AddressID) references Addresses
alter table Линия add foreign key (AddressID) references Addresses
alter table Организация add foreign key (Код_юридического_адреса) references Addresses
alter table Организация add foreign key (Код_фактического_адреса) references Addresses
alter table Подстанция add foreign key (AddressID) references Addresses
alter table Склад add foreign key (AddressID) references Addresses
GO
update StreetTypes set Synonyms = 'пр-т;пр' where TypeID = 519
update StreetTypes set Synonyms = 'уч' where TypeID = 530
GO
-- Адреса
SET IDENTITY_INSERT Характеристики_полей ON

INSERT INTO Характеристики_полей(Код_характеристики,Имя_таблицы,Имя_поля,Используемое_поле,Используемая_таблица,Обозначение,Описание,Единица_измерения) 
	VALUES (464,'StreetTypes','Abbr',NULL,NULL,'Сокращение', NULL, NULL)
INSERT INTO Характеристики_полей(Код_характеристики,Имя_таблицы,Имя_поля,Используемое_поле,Используемая_таблица,Обозначение,Описание,Единица_измерения) 
	VALUES (465,'StreetTypes','Synonyms',NULL,NULL,'Синонимы', NULL, NULL)

INSERT INTO Характеристики_полей(Код_характеристики,Имя_таблицы,Имя_поля,Используемое_поле,Используемая_таблица,Обозначение,Описание,Единица_измерения) 
	VALUES (466,'Localities','SubjectCode',NULL,NULL,'Код субъекта РФ', NULL, NULL)
INSERT INTO Характеристики_полей(Код_характеристики,Имя_таблицы,Имя_поля,Используемое_поле,Используемая_таблица,Обозначение,Описание,Единица_измерения) 
	VALUES (467,'Localities','RegionCode',NULL,NULL,'Код региона', NULL, NULL)
INSERT INTO Характеристики_полей(Код_характеристики,Имя_таблицы,Имя_поля,Используемое_поле,Используемая_таблица,Обозначение,Описание,Единица_измерения) 
	VALUES (468,'Localities','TownCode',NULL,NULL,'Код города', NULL, NULL)
INSERT INTO Характеристики_полей(Код_характеристики,Имя_таблицы,Имя_поля,Используемое_поле,Используемая_таблица,Обозначение,Описание,Единица_измерения) 
	VALUES (469,'Localities','SettlementCode',NULL,NULL,'Код населённого пункта', NULL, NULL)
INSERT INTO Характеристики_полей(Код_характеристики,Имя_таблицы,Имя_поля,Используемое_поле,Используемая_таблица,Обозначение,Описание,Единица_измерения) 
	VALUES (470,'Localities','TypeID','Name','LocalityTypes','Тип', NULL, NULL)
INSERT INTO Характеристики_полей(Код_характеристики,Имя_таблицы,Имя_поля,Используемое_поле,Используемая_таблица,Обозначение,Описание,Единица_измерения) 
	VALUES (471,'Localities','ParentLocalityID','Name','Localities','Входит в состав', NULL, NULL)

SET IDENTITY_INSERT Характеристики_полей OFF
GO
ALTER TABLE Спр_парам_проводов ADD ImaxW float NULL
GO