Advertisement
MaximTakkaTo

Untitled

Dec 6th, 2020
974
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
T-SQL 5.78 KB | None | 0 0
  1. use Testtt
  2. GO
  3.  
  4. CREATE TABLE Комфортность_номера
  5.  (
  6.     id_Комфортности int PRIMARY KEY IDENTITY(0, 1),
  7.     Название varchar(15) NOT NULL UNIQUE,
  8.     Множитель float CHECK (Множитель >= 1)
  9.  )
  10. GO
  11. CREATE TABLE Вместимость_номера
  12.  (
  13.     Вместимость int PRIMARY KEY,
  14.     Цена_за_ночь money NOT NULL
  15.  )
  16. GO
  17. CREATE TABLE Номер
  18.  (
  19.     Номер int PRIMARY KEY IDENTITY(0, 1),
  20.     Комфортность int NOT NULL,
  21.     Вместимость int NOT NULL,
  22.     Наценка money NOT NULL DEFAULT(0),
  23.     CONSTRAINT FK_type FOREIGN KEY (Комфортность) REFERENCES Комфортность_номера(id_Комфортности),
  24.     CONSTRAINT FK_q FOREIGN KEY (Вместимость) REFERENCES Вместимость_номера(Вместимость)
  25.  )
  26. GO
  27. CREATE FUNCTION dbo.getPrice(@NUMBER as INT)
  28. RETURNS money
  29. AS
  30. BEGIN
  31.     DECLARE @rtnValue money;
  32.     DECLARE @CostPerNight money;
  33.     DECLARE @comfMn float;
  34.     DECLARE @markup money;
  35.     SELECT @CostPerNight = Цена_за_ночь FROM (Номер JOIN Вместимость_номера ON Номер.Вместимость = Вместимость_номера.Вместимость) WHERE Номер.Номер = @NUMBER;
  36.     SELECT @comfMn = Множитель FROM (Номер JOIN Комфортность_номера ON Номер.Комфортность = Комфортность_номера.id_Комфортности)  WHERE Номер.Номер = @NUMBER;
  37.     SELECT @markup = Наценка FROM Номер WHERE Номер.Номер = @NUMBER;
  38.     SET @rtnValue = @CostPerNight * @comfMn + @markup;
  39.     RETURN @rtnValue;
  40. END
  41. GO
  42. ALTER TABLE Номер
  43.       ADD Цена AS dbo.getPrice(Номер.Номер)
  44. GO
  45. CREATE TABLE Статус_клиента
  46.  (
  47.     id_Статуса int PRIMARY KEY IDENTITY (0, 1),
  48.     Статус varchar(15) NOT NULL UNIQUE,
  49.     Множитель float CHECK(Множитель <= 1)
  50.  )
  51. GO
  52. CREATE TABLE Клиент
  53.  (
  54.     id_Клиента int PRIMARY KEY IDENTITY (0, 1),
  55.     ФИО varchar(50) NOT NULL,
  56.     Статус int NOT NULL,
  57.     Комментарий varchar(100),
  58.     CONSTRAINT FK_status FOREIGN KEY (Статус) REFERENCES Статус_клиента (id_Статуса)
  59.  )
  60. GO
  61.  
  62. CREATE TABLE Сданный_номер
  63.  (
  64.     id_Услуги int PRIMARY KEY IDENTITY (0, 1),
  65.     Номер int NOT NULL,
  66.     Клиент int NOT NULL,
  67.     Дата_время_въезда datetime NOT NULL,
  68.     Дата_время_окончания_услуги datetime NOT NULL,
  69.     Дата_время_выезда datetime NOT NULL,
  70.     CONSTRAINT FK_nom FOREIGN KEY (Номер) REFERENCES Номер(Номер),
  71.     CONSTRAINT FK_client FOREIGN KEY (Клиент) REFERENCES Клиент(id_Клиента),
  72.     CONSTRAINT unique_sdnom UNIQUE (Номер, Клиент, Дата_время_въезда)
  73.  )
  74. GO
  75. CREATE FUNCTION dbo.getCost(@NUMBER as INT, @CLIENT as INT, @DATE as date)
  76. RETURNS money
  77. AS
  78. BEGIN
  79.     DECLARE @price money;
  80.     DECLARE @clientMn float;
  81.     DECLARE @sale float;
  82.     SELECT @price = Цена FROM Номер WHERE Номер.Номер = @NUMBER;
  83.     SELECT @clientMn = Множитель FROM (Клиент JOIN Статус_клиента ON Клиент.Статус = Статус_клиента.id_Статуса) WHERE Клиент.id_Клиента = @CLIENT;
  84.     SELECT @sale = Множитель FROM Скидка WHERE @DATE >= Скидка.Дата_начала_скидки AND @DATE <= Скидка.Дата_окончания_скидки AND ((SELECT Комфортность
  85.                                                                                                                                  FROM Номер
  86.                                                                                                                                  WHERE Номер.Номер = @NUMBER) = Скидка.Комфортность
  87.                                                                                                                                 OR
  88.                                                                                                                                 (SELECT Вместимость
  89.                                                                                                                                  FROM Номер
  90.                                                                                                                                  WHERE Номер.Номер = @NUMBER) = Скидка.Вместимость)
  91.     if (@sale is NULL) or @sale = 0
  92.         SET @sale = 1
  93.  
  94.     RETURN @price * @clientMn * @sale
  95. END
  96. GO
  97. ALTER TABLE Сданный_номер
  98.       ADD Стоимость AS (DATEDIFF(day, Дата_время_въезда, Дата_время_окончания_услуги)) * dbo.getCost(Номер, Клиент, CAST(Дата_время_въезда as date))
  99. GO
  100. CREATE TABLE Забронированный_номер
  101.  (
  102.     id_Брони int PRIMARY KEY IDENTITY (0, 1),
  103.     Номер int NOT NULL,
  104.     Клиент int NOT NULL,
  105.     Дата_время_бронирования datetime NOT NULL,
  106.     Дата_время_въезда datetime NOT NULL,
  107.     Дата_время_окончания_услуги datetime NOT NULL,
  108.     CONSTRAINT FK_brnom FOREIGN KEY (Номер) REFERENCES Номер(Номер),
  109.     CONSTRAINT FK_brclient FOREIGN KEY (Клиент) REFERENCES Клиент(id_Клиента)
  110.  )
  111. GO
  112. ALTER TABLE Забронированный_номер
  113.       ADD Предоплата AS dbo.getCost(Номер, Клиент, CAST(Дата_время_въезда as date))
  114. GO
  115. CREATE TABLE Скидка
  116.  (
  117.     id_Скидки int PRIMARY KEY IDENTITY (0, 1),
  118.     Комфортность int,
  119.     Вместимость int,
  120.     Дата_начала_скидки date NOT NULL,
  121.     Дата_окончания_скидки date NOT NULL,
  122.     Информация varchar(100),
  123.     Множитель float CHECK (Множитель <= 1)
  124.     CONSTRAINT FK_sale_comf FOREIGN KEY (Комфортность) REFERENCES Комфортность_номера(id_Комфортности),
  125.     CONSTRAINT FK_sale_capac FOREIGN KEY (Вместимость) REFERENCES Вместимость_номера(Вместимость),
  126.     CONSTRAINT unique_sale UNIQUE(Комфортность, Вместимость, Дата_начала_скидки, Дата_окончания_скидки)
  127.  )
  128.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement