Inverth

db create

Dec 11th, 2020 (edited)
97
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
T-SQL 8.80 KB | None | 0 0
  1. /*
  2.  * creation DB for lab
  3.  */
  4.  
  5. use [master]
  6. drop database if exists [Lab1];
  7. create database [Lab1];
  8. use [Lab1];
  9.  
  10. create table [Animator] (
  11.     [ID]            integer identity(1,1),
  12.  
  13.     [Number]        char(60)    not null    check([Number] like('[a-zA-Z0-9-][a-zA-Z0-9-][a-zA-Z0-9-][a-zA-Z0-9-][a-zA-Z0-9-][a-zA-Z0-9-][a-zA-Z0-9-][a-zA-Z0-9-][a-zA-Z0-9-][a-zA-Z0-9-]')),
  14.     [FirstName]     varchar(20),
  15.     [MiddleName]    varchar(20),
  16.     [LastName]      varchar(20),
  17.     [Status]        bit         not null    default(1),
  18.     [Hired]         date        not null    default(getdate()),
  19.     [Fired]         date        null,
  20.  
  21.     constraint [CHK_Fired] check ([Fired] >= [Hired] or [Fired] is null),
  22.     constraint [AK1_Number] unique ([Number]),
  23.  
  24.     primary key([ID])
  25. );
  26. create table [Nickname] (
  27.     [ID]            integer identity(1,1),
  28.  
  29.     [Nickname]      varchar(20)  not null,
  30.     [Description]   varchar(255),
  31.     -- Вычесляемое поле. Занята ли кличка или нет.
  32.     [Status]        bit          not null   default(0),
  33.  
  34.     constraint [AK1_Nickname] unique([Nickname]),
  35.  
  36.     primary key([ID])
  37. );
  38. create table [AnimatorsNic] (
  39.     [AnimatorID]    integer not null,
  40.     [NicID]         integer not null,
  41.  
  42.     [Reason]        varchar(50),
  43.  
  44.     foreign key([AnimatorID]) references [Animator]([ID]),
  45.     foreign key([NicID]) references [Nickname]([ID]),
  46.  
  47.     primary key([AnimatorID], [NicID])
  48. );
  49. create table [Health] (
  50.     [AnimatorID]    integer not null,
  51.  
  52.     [Max]            smallint not null      check([Max] >=0 and [Max] <= 100),
  53.     [Current]        smallint not null,
  54.     [MaxSatiety]     smallint not null      check([MaxSatiety] >=0 and [MaxSatiety] <= 100),
  55.     [CurrentSatiety] smallint not null,
  56.     [LastMeal]       datetime               default(getdate()),
  57.  
  58.     constraint [CHK_Health]     check ([Current] <= [Max] and [Current] >= 0),
  59.     constraint [CHK_Satiety]    check ([CurrentSatiety] <= [MaxSatiety] and [CurrentSatiety]>= 0),
  60.  
  61.     foreign key([AnimatorID]) references [Animator]([ID]),
  62.  
  63.     primary key([AnimatorID])
  64. );
  65. create table [Scenario] (
  66.     [ID]            integer identity(1,1),
  67.  
  68.     [Name]          varchar(50) not null,
  69.     [Scenario]      text        not null,
  70.    
  71.     primary key([ID])
  72. );
  73. create table [Service] (
  74.     [ServiceID]     integer identity(1,1),
  75.     [ScenarioID]    integer not null,
  76.  
  77.     [Name]          varchar(50)  not null,
  78.     [TargetAge]     varchar(5)   not null   default('6+'),
  79.     [Duration]      float        not null,
  80.     [Price]         money        not null,
  81.     [Description]   varchar(255) not null,
  82.  
  83.     foreign key([ScenarioID]) references [Scenario]([ID]),
  84.  
  85.     primary key([ServiceID], [ScenarioID])
  86. );
  87. create table [Specialization] (
  88.     [AnimatorID]    integer not null,
  89.     [ServiceID]     integer not null,
  90.     [ScenarioID]    integer not null,
  91.  
  92.     [Grade]         smallint,
  93.     [Sertificat]    bit     not null    default(0),
  94.  
  95.     foreign key([ServiceID], [ScenarioID]) references [Service]([ServiceID], [ScenarioID]),
  96.     foreign key([AnimatorID]) references [Animator]([ID]),
  97.  
  98.     primary key([AnimatorID], [ServiceID], [ScenarioID])
  99. );
  100. create table [Client] (
  101.     [ID]            integer identity(1,1),
  102.  
  103.     [FirstName]     varchar(20) not null,
  104.     [MiddleName]    varchar(20) not null,
  105.     [LastName]      varchar(20) not null,
  106.     [Phone]         char(14)    not null,
  107.     [Email]         varchar(25) not null,
  108.  
  109.     constraint [AK1_Phone] unique([Phone]),
  110.     constraint [AK2_Email] unique([Email]),
  111.  
  112.     primary key([ID])
  113. );
  114. create table [Order] (
  115.     [ID]            integer identity(1,1),
  116.  
  117.     [ClientID]      integer  not null,
  118.     [Price]         money    not null   default(0),
  119.     [OrderDate]     datetime not null   default(getdate()),
  120.     [ExecutionDate] datetime not null   default(getdate()),
  121.  
  122.     constraint [CHK_Price] check ([Price] >= 0),
  123.     constraint [CHK_OrderDate] check ([ExecutionDate] >= [OrderDate]),
  124.  
  125.     foreign key([ClientID]) references [Client]([ID]),
  126.  
  127.     primary key([ID])
  128. );
  129. create table [ServiceOrder] (
  130.     [ServiceID]     integer not null,
  131.     [ScenarioID]    integer not null,
  132.     [AnimatorID]    integer not null,
  133.     [OrderID]       integer not null,
  134.     [Status]        bit     not null    default(1),
  135.  
  136.     foreign key([ServiceID], [ScenarioID]) references [Service]([ServiceID], [ScenarioID]),
  137.     foreign key([AnimatorID]) references [Animator]([ID]),
  138.     foreign key([OrderID]) references [Order]([ID]),
  139.  
  140.     primary key([ServiceID], [ScenarioID], [AnimatorID], [OrderID])
  141. );
  142. create table [Payment] (
  143.     [ID]            integer identity(1,1),
  144.  
  145.     [OrderID]       integer  not null,
  146.     [FDP]           char(10) not null   check([FDP] like('[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]')),
  147.     [FullPayment]   bit      not null   default(1),
  148.     [Approved]      bit,
  149.     [Date]          datetime not null   default(getdate()),
  150.  
  151.     foreign key([OrderID]) references [Order]([ID]),
  152.  
  153.     primary key([ID])
  154. );
  155. create table [Food] (
  156.     [ID]            integer identity(1,1),
  157.  
  158.     [Name]          varchar(20) not null,
  159.     [Price]         money       not null,
  160.     [Calorific]     float       not null,
  161.  
  162.     primary key([ID])
  163. );
  164. create table [FoodPayment] (
  165.     [FoodID]        integer not null,
  166.     [PaymentID]     integer not null,
  167.  
  168.     [Date]          datetime not null   default(getdate()),
  169.     [Count]         integer  not null   default(1)  check([Count] > 0),
  170.  
  171.     foreign key([FoodID]) references [Food]([ID]),
  172.     foreign key([PaymentID]) references [Payment]([ID]),
  173.  
  174.     primary key([FoodID], [PaymentID])
  175. );
  176. create table [Journal] (
  177.     [ID]            integer identity(1,1),
  178.  
  179.     [ScenarioID]    integer  not null,
  180.     [ServiceID]     integer  not null,
  181.     [OrderID]       integer  not null,
  182.     [AnimatorID]    integer  not null,
  183.     [Date]          datetime not null       default(getdate()),
  184.  
  185.     constraint [AK1_Key] unique ([ScenarioID], [ServiceID], [OrderID], [AnimatorID]),
  186.  
  187.     foreign key([ServiceID], [ScenarioID], [AnimatorID], [OrderID]) references [ServiceOrder]([ServiceID], [ScenarioID], [AnimatorID], [OrderID]),
  188.  
  189.     primary key([ID])
  190. );
  191. create table [Limetation] (
  192.     [ID]            integer identity(1,1),
  193.  
  194.     [Description]   varchar(255) not null,
  195.     [CreatedAt]     datetime     not null   default(getdate()),
  196.     [UpdatedAt]     datetime     not null   default(getdate()),
  197.  
  198.     constraint [CHK_Updated] check ([UpdatedAt] >= [CreatedAt]),
  199.  
  200.     primary key([ID])
  201. );
  202. create table [ScenarioLimetation] (
  203.     [LimetationID]  integer      not null,
  204.     [ScenarioID]    integer      not null,
  205.  
  206.     [Date]          datetime     not null   default(getdate()),
  207.     [Status]        bit          not null   default(1),
  208.  
  209.     foreign key([LimetationID]) references [Limetation]([ID]),
  210.     foreign key([ScenarioID])   references [Scenario]([ID]),
  211.  
  212.     primary key([LimetationID], [ScenarioID])
  213. );
  214. create table [OrderLimetation] (
  215.     [LimetationID]  integer     not null,
  216.     [ScenarioID]    integer     not null,
  217.     [JournalID]     integer     not null,
  218.  
  219.     [Date]          datetime    not null    default(getdate()),
  220.  
  221.     foreign key([LimetationID], [ScenarioID]) references [ScenarioLimetation]([LimetationID], [ScenarioID]),
  222.     foreign key([JournalID])   references [Journal]([ID]),
  223.  
  224.     primary key([LimetationID], [ScenarioID], [JournalID])
  225. );
  226. create table [Dump] (
  227.     [ID]            integer identity(1,1),
  228.  
  229.     [Name]          varchar(20),
  230.     [Address]       varchar(50) not null,
  231.  
  232.     primary key([ID])
  233. );
  234. create table [Registration] (
  235.     [AnimatorID]    integer not null,
  236.     [DumpID]        integer not null,
  237.  
  238.     [Status]        bit     not null    default(1),
  239.  
  240.     foreign key([AnimatorID]) references [Animator]([ID]),
  241.     foreign key([DumpID]) references [Dump]([ID]),
  242.  
  243.     primary key([AnimatorID], [DumpID])
  244. );
  245. create table [FoodList] (
  246.     [FoodID]        integer  not null,
  247.     [DumpID]        integer  not null,
  248.  
  249.     [OwnerID]       integer  not null,
  250.     [Count]         integer             default(1)  check([Count] >= 0),
  251.     [Fresh]         datetime not null,
  252.    
  253.     foreign key([FoodID]) references [Food]([ID]),
  254.     foreign key([DumpID]) references [Dump]([ID]),
  255.  
  256.     primary key([FoodID], [DumpID], [OwnerID])
  257. );
  258. create table [Matherial] (
  259.     [ID]            integer identity(1,1),
  260.  
  261.     [Name]          varchar(20) not null,
  262.     [Description]   varchar(255),
  263.  
  264.     primary key([ID])
  265. );
  266. create table [MatherialList] (
  267.     [DumpID]        integer  not null,
  268.     [MatherialID]   integer  not null,
  269.  
  270.     [Count]         integer             default(1)  check([Count] >= 0),
  271.    
  272.     foreign key([MatherialID]) references [Matherial]([ID]),
  273.     foreign key([DumpID]) references [Dump]([ID]),
  274.  
  275.     primary key([DumpID],[MatherialID])
  276. );
  277. create table [Costume] (
  278.     [ID]            integer identity(1,1),
  279.  
  280.     [Name]          varchar(20) not null,
  281.     [Description]   varchar(255),
  282.     [Durability]    integer     not null,
  283.     [Status]        bit         not null    default(1),
  284.  
  285.     primary key([ID])
  286. );
  287. create table [Receipt] (
  288.     [CostumeID]     integer  not null,
  289.     [MatherialID]   integer  not null,
  290.  
  291.     [AsembleCount]      integer             default(1)  check([AsembleCount] >= 0),
  292.     [DisasembleCount]   integer             default(1)  check([DisasembleCount] >= 0),
  293.  
  294.     constraint [CHK_Count] check ([AsembleCount] >= [DisasembleCount]),
  295.    
  296.     foreign key([MatherialID]) references [Matherial]([ID]),
  297.     foreign key([CostumeID]) references [Costume]([ID]),
  298.  
  299.     primary key([CostumeID],[MatherialID])
  300. );
  301. create table [ServiceCostume] (
  302.     [CostumeID]     integer  not null,
  303.     [ServiceID]     integer  not null,
  304.     [ScenarioID]    integer  not null,
  305.  
  306.     [Count]         integer                 default(1)  check([Count] >= 0),
  307.     [Damage]        integer                 default(1)  check([Damage] >= 0),
  308.    
  309.     foreign key([ServiceID], [ScenarioID]) references [Service]([ServiceID],[ScenarioID]),
  310.     foreign key([CostumeID]) references [Costume]([ID]),
  311.  
  312.     primary key([CostumeID],[ServiceID],[ScenarioID])
  313. );
Add Comment
Please, Sign In to add comment