kxcoze

satie_schema

Dec 4th, 2021 (edited)
126
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. DROP TABLE IF EXISTS Subscription CASCADE;
  2. DROP TABLE IF EXISTS Customer CASCADE;
  3. DROP TABLE IF EXISTS Discount CASCADE;
  4. DROP TABLE IF EXISTS Service CASCADE;
  5. DROP TABLE IF EXISTS Trainer CASCADE;
  6. DROP TABLE IF EXISTS Hall CASCADE;
  7. DROP TABLE IF EXISTS Timetable CASCADE;
  8. DROP TABLE IF EXISTS Customer_Subscription CASCADE;
  9. DROP TABLE IF EXISTS Service_Trainer CASCADE;
  10. DROP TABLE IF EXISTS Category_Percent CASCADE;
  11.  
  12. -- TODO:
  13. -- [x] прописать айдишникам после типа -> GENERATED ALWAYS AS IDENTITY:
  14. -- [x] реализовать промежуточные отношения для реализации связи M:M
  15. -- [x] добавить отношение Category_Percent для нормализации таблицы Trainer
  16.  
  17. CREATE TABLE IF NOT EXISTS Timetable (
  18.     PRIMARY KEY (timetable_id),
  19.     timetable_id INT GENERATED ALWAYS AS IDENTITY,
  20.     timetable_time VARCHAR(100)
  21.   );
  22.  
  23. CREATE TABLE IF NOT EXISTS Discount (
  24.     PRIMARY KEY (discount_id),
  25.     discount_id INT GENERATED ALWAYS AS IDENTITY,
  26.     discount_amount INT
  27.   );
  28.  
  29. CREATE TABLE IF NOT EXISTS Hall (
  30.     PRIMARY KEY (hall_id),
  31.     hall_id INT GENERATED ALWAYS AS IDENTITY,
  32.     hall_name VARCHAR(30),
  33.     timetable_id INT,
  34.     FOREIGN KEY (timetable_id)
  35.       REFERENCES Timetable(timetable_id)
  36.       ON DELETE CASCADE
  37.   );
  38.  
  39. -- Insert by your own hands!!!
  40. CREATE TABLE IF NOT EXISTS Category_Percent (
  41.     PRIMARY KEY (trainer_category),
  42.     trainer_category VARCHAR(70),
  43.     percent INT
  44. );
  45. INSERT INTO Category_Percent(trainer_category, percent) VALUES('тренер высшей квалификационной категории', '20');
  46. INSERT INTO Category_Percent(trainer_category, percent) VALUES('тренер первой квалификационной категории', '15');
  47. INSERT INTO Category_Percent(trainer_category, percent) VALUES('тренер второй квалификационной категории', '10');
  48.  
  49. CREATE TABLE IF NOT EXISTS Trainer (
  50.     PRIMARY KEY (trainer_id),
  51.     trainer_id INT GENERATED ALWAYS AS IDENTITY,
  52.     trainer_name VARCHAR(50),
  53.     trainer_gender CHAR(1),
  54.     trainer_dob DATE,
  55.     trainer_passport CHAR(11),
  56.     trainer_category VARCHAR(70),
  57.     trainer_tel VARCHAR(20),
  58.     trainer_addr VARCHAR(100),
  59.  
  60.     FOREIGN KEY (trainer_category)
  61.         REFERENCES Category_Percent(trainer_category)
  62.         ON UPDATE CASCADE
  63.         ON DELETE CASCADE
  64.   );
  65.  
  66.  
  67. CREATE TABLE IF NOT EXISTS Service (
  68.     PRIMARY KEY (service_id),
  69.     service_id INT GENERATED ALWAYS AS IDENTITY,
  70.     service_name VARCHAR(30),
  71.     service_price INT,
  72.     service_dur INT,
  73.     hall_id INT,
  74.  
  75.     FOREIGN KEY (hall_id)
  76.       REFERENCES Hall(hall_id)
  77.       ON DELETE CASCADE
  78.   );
  79.  
  80. CREATE TABLE IF NOT EXISTS Service_Trainer (
  81.     service_id INT REFERENCES Service ON UPDATE CASCADE ON DELETE CASCADE,
  82.     trainer_id INT REFERENCES Trainer ON UPDATE CASCADE ON DELETE CASCADE,
  83.     CONSTRAINT service_trainer_pk
  84.         PRIMARY KEY (service_id, trainer_id)
  85. );
  86.  
  87. CREATE TABLE IF NOT EXISTS Subscription (
  88.     PRIMARY KEY (subscription_id),
  89.     subscription_id INT GENERATED ALWAYS AS IDENTITY,
  90.     subscription_price INT,
  91.     subscription_name VARCHAR(35),
  92.     service_id INT,
  93.    
  94.     FOREIGN KEY (service_id)
  95.         REFERENCES Service(service_id)
  96.         ON UPDATE CASCADE
  97.         ON DELETE CASCADE
  98.     -- FOREIGN KEY service_id
  99.   );
  100.  
  101.  
  102. CREATE TABLE IF NOT EXISTS Customer (
  103.     PRIMARY KEY (customer_id),
  104.     customer_id INT GENERATED ALWAYS AS IDENTITY,
  105.     customer_name VARCHAR(50),
  106.     customer_tel  VARCHAR(20),
  107.     discount_id INT,
  108.     FOREIGN KEY (discount_id)
  109.       REFERENCES Discount(discount_id)
  110.       ON DELETE CASCADE
  111.     -- FOREIGN KEY subscription_id
  112.   );
  113.  
  114. CREATE TABLE IF NOT EXISTS Customer_Subscription (
  115.     customer_id INT REFERENCES Customer ON UPDATE CASCADE ON DELETE CASCADE,
  116.     subscription_id INT REFERENCES Subscription ON UPDATE CASCADE ON DELETE CASCADE,
  117.     CONSTRAINT customer_subscription_pk
  118.         PRIMARY KEY (customer_id, subscription_id)
  119. );
Advertisement
Add Comment
Please, Sign In to add comment