spec/etc/db/service_catalog.sql
2025-06-02 16:16:51 +03:00

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