239 lines
9.3 KiB
Transact-SQL
239 lines
9.3 KiB
Transact-SQL
/*Êàòàëîã óñëóã
|
|
Ïîääåðæêà êîìïîçèòíûõ óñëóã
|
|
Ïîääåðæêà âàðèàòèâíîñòè óñëóãè
|
|
Ïîääåðæêà âàðèàòèâíîñòè ïàðàìåòðà
|
|
Ïðàéñ-ëèñò
|
|
*/
|
|
|
|
-- ìîæíî äîáàâèòü áàçîâûå åäèíèöû è ïåðåñ÷åò
|
|
if exists (select * from sysobjects where name='measure') drop table measure
|
|
create table measure (
|
|
measure_id int identity PRIMARY KEY NOT NULL
|
|
,measure varchar(255) NOT NULL
|
|
,measure_short varchar(9) NOT NULL
|
|
,measure_short_en varchar(9) NULL
|
|
,descr varchar(MAX) NULL
|
|
)
|
|
go
|
|
|
|
insert into measure (measure, measure_short) values ('øòóêà','øò.')
|
|
insert into measure (measure, measure_short) values ('êèëîâàòò','êÂò')
|
|
insert into measure (measure, measure_short) values ('êèëîâàòò-÷àñ','êÂò-÷')
|
|
insert into measure (measure, measure_short) values ('ãèãàãåðö','ÃÃö')
|
|
insert into measure (measure, measure_short) values ('ãèãàáàéò','ÃÁàéò')
|
|
insert into measure (measure, measure_short) values ('10000 øò.','10òûñ.øò.')
|
|
|
|
go
|
|
|
|
if exists (select * from sysobjects where name='service_type') drop table service_type
|
|
create table service_type (
|
|
service_type_id int PRIMARY KEY NOT NULL
|
|
,service_type varchar(255) NOT NULL
|
|
)
|
|
go
|
|
|
|
insert into service_type (service_type_id, service_type) values (1,'èíñòàëëÿöèîííàÿ')
|
|
insert into service_type (service_type_id, service_type) values (2,'ïåðèîäè÷åñêàÿ') -- ïåðèîä ôèêñèðóåòñÿ â êîíòðàêòå, ïî óìîë÷àíèþ ìåñÿö
|
|
insert into service_type (service_type_id, service_type) values (3,'òàðèôèöèðóåìàÿ')
|
|
go
|
|
|
|
-- âàðèàíò âûáèðàåòñÿ èç ãðóïïû. Ýòî, ñêîðåå, íå ñåìàíòèêà ïðåäìåòíîé îáëàñòè, à èñêóññòâåííàÿ êîíñòðóêöèÿ
|
|
-- âàðèàíò çàäàåòñÿ îïðåäåëÿþùåé õàðàêòåðèñòèêîé, êîòîðàÿ ìîæåò êîìáèíèðîâàòü íåñêîëüêî óñëîâèé
|
|
if exists (select * from sysobjects where name='modifier_class') drop table modifier_class
|
|
create table modifier_class (
|
|
modifier_class_id int identity PRIMARY KEY NOT NULL
|
|
,modifier_class varchar(255) NOT NULL
|
|
,descr varchar(MAX) NULL
|
|
)
|
|
go
|
|
|
|
-- çíà÷åíèå ìîäèôèêàòîðà
|
|
if exists (select * from sysobjects where name='modifier') drop table modifier
|
|
create table modifier (
|
|
modifier_id int identity PRIMARY KEY NOT NULL
|
|
,modifier_class_id int NOT NULL
|
|
,modifier varchar(255) NOT NULL
|
|
,modifier_en varchar(255) NULL
|
|
,descr varchar(MAX) NULL
|
|
)
|
|
go
|
|
--alter table modifier add modifier_en varchar(255) NULL
|
|
|
|
-- ýêâèâàëåíò íîìåíêëàòóðû â 1Ñ
|
|
|
|
if exists (select * from sysobjects where name='abstract_service') drop table abstract_service
|
|
create table abstract_service (
|
|
abstract_service_id int identity PRIMARY KEY NOT NULL
|
|
,abstract_service varchar(255) NOT NULL
|
|
,service_type_id INT NOT NULL
|
|
,modifier_class_id INT NULL -- migrated from service (no support for multiple modifier classes)
|
|
,code varchar(31) NOT NULL
|
|
,version int NOT NULL
|
|
,descr varchar(MAX) NULL
|
|
)
|
|
go
|
|
|
|
/*
|
|
-- ïðèøëîñü âûäåëèòü ýòó ñóùíîñòü
|
|
-- âåðîÿòíî, äëÿ áîëüøèíñòâà íîìåíêëàòóð îíà íå íóæíà (ïðèäåòñÿ äîáàâëÿòü òðèâèàëüíóþ),
|
|
-- äîñòàòî÷íî ìèãðàöèè àòðèáóòà modifier_class_id â abstract_service
|
|
if exists (select * from sysobjects where name='service_class') drop table service_class
|
|
create table service_class (
|
|
service_class_id int identity PRIMARY KEY NOT NULL
|
|
,abstract_service_id int NOT NULL
|
|
,modifier_class_id INT NULL
|
|
--,service_class varchar(255) NOT NULL -- íå èñïîëüçóåòñÿ
|
|
,descr varchar(MAX) NULL
|
|
)
|
|
go
|
|
*/
|
|
|
|
-- êîíêðåòíûé âàðèàíò ñåðâèñà
|
|
-- â 1Ñ ðåàëèçóåòñÿ ËÈÁÎ ôîðìîé êîìïîíîâêè, ËÈÁÎ ìîäèôèêàöèåé íîìåíêëàòóðû
|
|
-- ìîäèôèêàòîð îòíîñèòñÿ ê ôîðìå êîìïîíîâêè
|
|
-- ôîðìà êîìïîíîâêè åñòü äëÿ ëþáîé êîíêðåòíîé êîìïëåêñíîé (êîìïîçèòíîé) íîìåíêëàòóðû, îíà îïðåäåëÿåò ñîñòàâ ïàðàìåòðîâ
|
|
-- ïðè ýòîì îíà ñâÿçûâàåòñÿ ëèáî ñ íîìåíêëàòóðîé, ëèáî ñ êîíêðåòíîé ðåàëèçàöèåé íîìåíêëàòóðû
|
|
if exists (select * from sysobjects where name='service') drop table service
|
|
create table service (
|
|
service_id int identity PRIMARY KEY NOT NULL
|
|
,abstract_service_id int NOT NULL
|
|
,modifier_id INT NULL
|
|
--,service varchar(255) NOT NULL -- íå èñïîëüçóåòñÿ
|
|
,descr varchar(MAX) NULL
|
|
,measure_id int NULL --*** ìèãðèðîâàòü â àáñòðàêòíóþ óñëóãó?
|
|
,precision int NULL
|
|
,base_price decimal(15,4) NULL
|
|
,CONSTRAINT UK_abstract_service_modifier UNIQUE(abstract_service_id, modifier_id)
|
|
)
|
|
go
|
|
--alter table service add measure_id int NULL
|
|
--alter table service add precision int NULL
|
|
--alter table service add base_price decimal(15,4) NULL
|
|
--alter table service add CONSTRAINT UK_abstract_service_modifier UNIQUE(abstract_service_id, modifier_id)
|
|
|
|
-- íàäî ïðîâåðÿòü, ïàðàìåòðû äëÿ âàðèàíòà ðåàëèçàöèè âñåãäà ñîáñòâåííûå, ëèáî øàðÿòñÿ
|
|
-- áóäåò ïîíÿòíî ïðè âûãðóçêå
|
|
if exists (select * from sysobjects where name='param_class') drop table param_class
|
|
create table param_class (
|
|
param_class_id int identity PRIMARY KEY NOT NULL
|
|
,param_class varchar(255) NOT NULL
|
|
,measure_id int NULL
|
|
/*,precision int NULL
|
|
,show_in_spec bit NOT NULL*/
|
|
,descr varchar(MAX) NULL
|
|
)
|
|
go
|
|
|
|
if exists (select * from sysobjects where name='param') drop table param
|
|
create table param (
|
|
param_id int identity PRIMARY KEY NOT NULL
|
|
,param_class_id int NULL--NOT NULL
|
|
,param varchar(255) NOT NULL
|
|
,measure_id int NULL -- overrides param_class.measure
|
|
,precision int NULL -- *** âèäèìî, ïîñòóïèòü, êàê ñ åäèíèöåé èçìåðåíèÿ, â param_class.precision øàáëîí
|
|
--,show_in_spec bit NOT NULL default 1
|
|
,base_price decimal(15,4) NULL -- Íà ñàìîì äåëå áàçîâûå öåíû îòäåëüíî, ýòî îáåñïå÷èâàåò âåðñèîííîñòü ïðàéñ-ëèñòà
|
|
,descr varchar(MAX) NULL
|
|
)
|
|
|
|
--alter table param add base_price decimal(15,4) NULL
|
|
--alter table param add measure_id int NULL
|
|
go
|
|
-- ñîñòàâ ïàðàìåòðîâ, ýêâèâàëåíò òàáëè÷íîé ÷àñòè ôîðìû êîìïîíîâêè
|
|
-- øàáëîí
|
|
-- â ñåðâèñå äîëæíû áûòü ïëåéñõîëäåðû äëÿ ïàðàìåòðîâ, îïðåäåëÿåìûõ ïðè ôîðìèðîâàíèè ñïåöèôèêàöèè è ôèêñèðîâàííûå ïàðàìåòðû
|
|
|
|
-- ìîæíî ñäåëàòü 2 òàáëèöû: øàáëîí ïàðàìåòðîâ è öåíû ïàðàìåòðîâ
|
|
-- ïðè ýòîì çàïèñè äëÿ ïðîñòûõ ïàðàìåòðîâ áóäóò äóáëèðîâàòüñÿ 1:1, à äëÿ âàðèàòèâíûõ 1:n
|
|
if exists (select * from sysobjects where name='service_param') drop table service_param
|
|
create table service_param (
|
|
service_param_id int identity PRIMARY KEY NOT NULL
|
|
,service_id int NOT NULL -- FK
|
|
--,modifier_id int NULL -- FK êîíòåêñò âàðèàíòà
|
|
,param_class_id int NULL -- êîíêðåòíûé ïàðàìåòð ìîæåò âûáèðàòüñÿ ïðè ââîäå ñïåöèôèêàöèè. Â 1Ñ ýòî ðåøàåòñÿ òàê: åñëè ó ïàðàìåòðà åñòü ïîòîìêè, âûáîð â ñïåöèôèêàöèè
|
|
,param_id int NULL
|
|
--,base_price decimal(15,4) NULL -- Íàñëåäîâàòü îò ïàðàìåòðà. Íà ñàìîì äåëå áàçîâûå öåíû îòäåëüíî, ýòî îáåñïå÷èâàåò âåðñèîííîñòü ïðàéñ-ëèñòà
|
|
,descr varchar(MAX) NULL
|
|
,CONSTRAINT CK_param_xor_class CHECK (((param_class_id IS NULL) AND NOT (param_id IS NULL)) OR ((param_id IS NULL) AND NOT (param_class_id IS NULL)))
|
|
-- óäàëèòü îãðàíè÷åíèå, â êîíòåêñòå óñëóãè äîëæíû áûòü çàäàíû òàêæå öåíû êîíêðåòíûõ ïàðàìåòðîâ
|
|
-- alter table service_param drop CONSTRAINT CK_param_xor_class
|
|
)
|
|
go
|
|
|
|
-- åñëè â service_param óêàçàí êîíêðåòíûé ïàðàìåòð, òî îòíîøåíèå 1:1, åñëè êëàññ - òî 1:n
|
|
-- â äàëüíåéøåì ìîæíî ñäåëàòü âåðñèîííîñòü öåí
|
|
-- íå òîëüêî öåíû, íî è âàðèàíòû âûáîðà äëÿ àáñòðàêòíûõ ïàðàìåòðîâ
|
|
if exists (select * from sysobjects where name='service_param_price') drop table service_param_price
|
|
create table service_param_price (
|
|
service_param_price_id int identity PRIMARY KEY NOT NULL
|
|
,service_param_id int NOT NULL -- FK, äëÿ êîíêðåòíûõ ïàðàìåòðîâ 1:1. Êàê ýòî çàùèòèòü îãðàíè÷åíèÿìè, íå ïðèäóìàë
|
|
--,param_class_id int NOT NULL
|
|
,param_id int NOT NULL
|
|
,base_price decimal(15,4) NULL -- Íàñëåäîâàòü îò ïàðàìåòðà, äëÿ óäîáñòâà. Íà ñàìîì äåëå áàçîâûå öåíû äîëæíû âåñòèñü îòäåëüíî, ýòî îáåñïå÷èâàåò âåðñèîííîñòü ïðàéñ-ëèñòà
|
|
CONSTRAINT UK_service_param_price UNIQUE (service_param_id, param_id)
|
|
)
|
|
go
|
|
|
|
|
|
|
|
if exists (select * from sysobjects where name='specification') drop table specification
|
|
create table specification (
|
|
specification_id int identity PRIMARY KEY NOT NULL
|
|
,specification varchar(255) NOT NULL
|
|
,descr varchar(MAX) NULL
|
|
)
|
|
go
|
|
|
|
|
|
if exists (select * from sysobjects where name='specification_item') drop table specification_item
|
|
create table specification_item (
|
|
specification_item_id int identity PRIMARY KEY NOT NULL
|
|
,specification_id int NOT NULL
|
|
,service_id int NOT NULL
|
|
--,modifier_id int NULL
|
|
,specification_item varchar(1023) NOT NULL -- èìÿ äëÿ ïå÷àòè
|
|
,quantity decimal(15,4) NULL
|
|
,price decimal(15,4) NULL -- äëÿ êîìïîçèòíûõ ñåðâèñîâ ðàñ÷åò ïî ïàðàìåòðàì
|
|
)
|
|
go
|
|
--alter table specification_item alter column specification_item varchar (1023) NOT NULL
|
|
|
|
if exists (select * from sysobjects where name='specification_item_param') drop table specification_item_param
|
|
create table specification_item_param (
|
|
specification_item_param_id int identity PRIMARY KEY NOT NULL
|
|
,specification_item_id int NOT NULL
|
|
,service_param_id int NOT NULL -- åñëè ïàðàìåòð êîíêðåòíûé, òî param_id îòñþäà
|
|
,param_id int NULL -- åñëè â ñåðâèñå çàäàí òîëüêî êëàññ ïàðàìåòðà, òî çäåñü íàäî êîíêðåòèçèðîâàòü *** Ìîæíî äåíîðìàëèçîâàòü, âñåãäà ïîìåùàÿ ñþäà çíà÷åíèå
|
|
,quantity decimal(15,4) NULL
|
|
,price decimal(15,4) NULL
|
|
)
|
|
go
|
|
|
|
----------------------------------------
|
|
--9:00 24.09.2020
|
|
-- ýòî íå ÖÎÄû, à ïëîùàäêè
|
|
if exists (select * from sysobjects where name='site') drop table site
|
|
create table site (
|
|
site_id int identity PRIMARY KEY NOT NULL
|
|
,site varchar(255) NOT NULL
|
|
,descr varchar(MAX) NULL
|
|
)
|
|
go
|
|
|
|
insert into site(site) values('ÖÎÄ ÌÌÒÑ-9')
|
|
insert into site(site) values('ÖÎÄ ÌÌÒÑ-10')
|
|
insert into site(site) values('ÖÎÄ Êóð÷àòîâñêèé')
|
|
insert into site(site) values('ÖÎÄ Îñòàïîâñêèé')
|
|
insert into site(site) values('ÖÎÄ Óäîìëÿ')
|
|
insert into site(site) values('ÖÎÄ Åêàòåðèíáóðã')
|
|
insert into site(site) values('ÖÎÄ Àäëåð')
|
|
insert into site(site) values('ÖÎÄ NORD')
|
|
insert into site(site) values('ÖÎÄ OST')
|
|
go
|
|
|
|
|
|
|
|
|
|
|
|
|