RelationalDesign: create1.sql

File create1.sql, 5.4 KB (added by 223075, 7 hours ago)

Скрипта за креирање табели

Line 
1-- create.sql (BlissCore)
2
3-- RESET (optional):
4
5/*
6-- Drop NEW bridge tables (if they exist)
7DROP TABLE IF EXISTS "User_Booked_Class" CASCADE;
8DROP TABLE IF EXISTS "Class_Includes_Training" CASCADE;
9DROP TABLE IF EXISTS "User_Purchased_Package" CASCADE;
10DROP TABLE IF EXISTS "User_Purchased_Merch" CASCADE;
11DROP TABLE IF EXISTS "Package_Includes_Class" CASCADE;
12
13-- Drop OLD bridge tables (from previous versions) just in case
14DROP TABLE IF EXISTS "User_Class" CASCADE;
15DROP TABLE IF EXISTS "Class_Training" CASCADE;
16DROP TABLE IF EXISTS "User_Package" CASCADE;
17DROP TABLE IF EXISTS "User_Merch" CASCADE;
18DROP TABLE IF EXISTS "Package_Class" CASCADE;
19DROP TABLE IF EXISTS "User_Event" CASCADE;
20
21-- Drop base tables (order matters due to FKs)
22DROP TABLE IF EXISTS "Merch_Items" CASCADE;
23DROP TABLE IF EXISTS "Package" CASCADE;
24DROP TABLE IF EXISTS "Event" CASCADE;
25DROP TABLE IF EXISTS "Class" CASCADE;
26DROP TABLE IF EXISTS "Training" CASCADE;
27DROP TABLE IF EXISTS "Instructor" CASCADE;
28DROP TABLE IF EXISTS "User" CASCADE;
29*/
30
31
32-- CREATE TABLES
33
34CREATE TABLE IF NOT EXISTS "User" (
35 user_id BIGSERIAL PRIMARY KEY,
36 username VARCHAR(50) NOT NULL,
37 email VARCHAR(100) NOT NULL,
38 password_hash VARCHAR(150) NOT NULL,
39 first_name VARCHAR(50),
40 last_name VARCHAR(50)
41);
42
43
44CREATE TABLE IF NOT EXISTS "Instructor" (
45 instructor_id BIGSERIAL PRIMARY KEY,
46 instructor_email VARCHAR(100) NOT NULL,
47 instructor_password_hash VARCHAR(150) NOT NULL,
48 first_name VARCHAR(50) NOT NULL,
49 last_name VARCHAR(50) NOT NULL,
50 biography TEXT
51);
52
53
54CREATE TABLE IF NOT EXISTS "Training" (
55 training_id BIGSERIAL PRIMARY KEY,
56 training_name VARCHAR(100) NOT NULL,
57 description TEXT,
58 duration INT,
59 intensity_level VARCHAR(50)
60);
61
62
63CREATE TABLE IF NOT EXISTS "Class" (
64 class_id BIGSERIAL PRIMARY KEY,
65 date DATE NOT NULL,
66 start_time TIME NOT NULL,
67 end_time TIME NOT NULL,
68 location VARCHAR(100) NOT NULL,
69 capacity INT,
70 seats_available INT,
71 instructor_id BIGINT,
72 CONSTRAINT fk_instructor
73 FOREIGN KEY (instructor_id)
74 REFERENCES "Instructor"(instructor_id)
75 ON DELETE SET NULL
76);
77
78
79CREATE TABLE IF NOT EXISTS "Event" (
80 event_id BIGSERIAL PRIMARY KEY,
81 event_name VARCHAR(100) NOT NULL,
82 description TEXT,
83 date DATE NOT NULL,
84 time TIME NOT NULL,
85 location VARCHAR(100) NOT NULL
86);
87
88
89CREATE TABLE IF NOT EXISTS "Package" (
90 package_id BIGSERIAL PRIMARY KEY,
91 package_name VARCHAR(100) NOT NULL,
92 price DECIMAL(10,2) NOT NULL,
93 num_classes INT NOT NULL
94);
95
96
97CREATE TABLE IF NOT EXISTS "Merch_Items" (
98 merch_id BIGSERIAL PRIMARY KEY,
99 item_name VARCHAR(100) NOT NULL,
100 description TEXT,
101 price DECIMAL(10,2) NOT NULL,
102 quantity_in_stock INT
103);
104
105-- M:N BRIDGE TABLES (new names)
106----------------------------------------------------
107
108-- (1) User books a Class
109CREATE TABLE IF NOT EXISTS "User_Booked_Class" (
110 user_id BIGINT,
111 class_id BIGINT,
112 PRIMARY KEY(user_id, class_id),
113 FOREIGN KEY (user_id) REFERENCES "User"(user_id) ON DELETE CASCADE,
114 FOREIGN KEY (class_id) REFERENCES "Class"(class_id) ON DELETE CASCADE
115);
116
117-- (2) A Class includes one or more Trainings
118CREATE TABLE IF NOT EXISTS "Class_Includes_Training" (
119 class_id BIGINT,
120 training_id BIGINT,
121 PRIMARY KEY(class_id, training_id),
122 FOREIGN KEY (class_id) REFERENCES "Class"(class_id) ON DELETE CASCADE,
123 FOREIGN KEY (training_id) REFERENCES "Training"(training_id) ON DELETE CASCADE
124);
125
126-- (3) User registers for an Event
127CREATE TABLE IF NOT EXISTS "User_Event" (
128 user_id BIGINT,
129 event_id BIGINT,
130 PRIMARY KEY(user_id, event_id),
131 FOREIGN KEY (user_id) REFERENCES "User"(user_id) ON DELETE CASCADE,
132 FOREIGN KEY (event_id) REFERENCES "Event"(event_id) ON DELETE CASCADE
133);
134
135-- (4) User purchases a Package
136CREATE TABLE IF NOT EXISTS "User_Purchased_Package" (
137 user_id BIGINT,
138 package_id BIGINT,
139 PRIMARY KEY(user_id, package_id),
140 FOREIGN KEY (user_id) REFERENCES "User"(user_id) ON DELETE CASCADE,
141 FOREIGN KEY (package_id) REFERENCES "Package"(package_id) ON DELETE CASCADE
142);
143
144-- (5) User purchases Merch
145CREATE TABLE IF NOT EXISTS "User_Purchased_Merch" (
146 user_id BIGINT,
147 merch_id BIGINT,
148 PRIMARY KEY(user_id, merch_id),
149 FOREIGN KEY (user_id) REFERENCES "User"(user_id) ON DELETE CASCADE,
150 FOREIGN KEY (merch_id) REFERENCES "Merch_Items"(merch_id) ON DELETE CASCADE
151);
152
153-- (6) Package includes specific Classes
154CREATE TABLE IF NOT EXISTS "Package_Includes_Class" (
155 package_id BIGINT,
156 class_id BIGINT,
157 PRIMARY KEY(package_id, class_id),
158 FOREIGN KEY (package_id) REFERENCES "Package"(package_id) ON DELETE CASCADE,
159 FOREIGN KEY (class_id) REFERENCES "Class"(class_id) ON DELETE CASCADE
160);