RelationalDesign: create.sql

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