2 | | -- Drop existing tables if they exist |
3 | | DROP TABLE IF EXISTS UserParticipatesInExperiment CASCADE; |
4 | | DROP TABLE IF EXISTS UserViewsExperiment CASCADE; |
5 | | DROP TABLE IF EXISTS UserViewsElement CASCADE; |
6 | | DROP TABLE IF EXISTS UserViewsLabEquipment CASCADE; |
7 | | DROP TABLE IF EXISTS ExperimentLabEquipment CASCADE; |
8 | | DROP TABLE IF EXISTS Experiment CASCADE; |
9 | | DROP TABLE IF EXISTS Reaction CASCADE; |
10 | | DROP TABLE IF EXISTS Elements CASCADE; |
11 | | DROP TABLE IF EXISTS LabEquipment CASCADE; |
12 | | DROP TABLE IF EXISTS Student CASCADE; |
13 | | DROP TABLE IF EXISTS Teacher CASCADE; |
| 2 | DROP TABLE IF EXISTS userparticipatesinexperiment CASCADE; |
| 3 | DROP TABLE IF EXISTS userviewsexperiment CASCADE; |
| 4 | DROP TABLE IF EXISTS userviewselement CASCADE; |
| 5 | DROP TABLE IF EXISTS userviewslabequipment CASCADE; |
| 6 | DROP TABLE IF EXISTS experimentlabequipment CASCADE; |
| 7 | DROP TABLE IF EXISTS experiment CASCADE; |
| 8 | DROP TABLE IF EXISTS reaction CASCADE; |
| 9 | DROP TABLE IF EXISTS elements CASCADE; |
| 10 | DROP TABLE IF EXISTS labequipment CASCADE; |
| 11 | DROP TABLE IF EXISTS student CASCADE; |
| 12 | DROP TABLE IF EXISTS teacher CASCADE; |
18 | | user_id SERIAL PRIMARY KEY, |
19 | | user_name VARCHAR(30) NOT NULL, |
20 | | user_surname VARCHAR(30) NOT NULL, |
21 | | email VARCHAR(50) NOT NULL UNIQUE, |
22 | | password VARCHAR(100) NOT NULL, |
23 | | role ENUM('student', 'teacher') NOT NULL |
| 22 | user_id SERIAL PRIMARY KEY, |
| 23 | user_name VARCHAR(30) NOT NULL, |
| 24 | user_surname VARCHAR(30) NOT NULL, |
| 25 | email VARCHAR(50) NOT NULL UNIQUE, |
| 26 | password VARCHAR(100) NOT NULL, |
| 27 | role user_role NOT NULL |
37 | | -- Create LabEquipment table |
38 | | CREATE TABLE LabEquipment ( |
39 | | equipment_id SERIAL PRIMARY KEY, |
40 | | equipment_name VARCHAR(50) NOT NULL UNIQUE, |
41 | | type VARCHAR(50), |
42 | | description TEXT, |
43 | | safety_info TEXT, |
44 | | teacher_id INT NOT NULL REFERENCES Teacher(teacher_id) ON DELETE CASCADE |
| 34 | CREATE TABLE student ( |
| 35 | student_id INT PRIMARY KEY REFERENCES "User"(user_id) ON DELETE CASCADE, |
| 36 | teacher_id INT NOT NULL REFERENCES teacher(teacher_id) ON DELETE CASCADE |
47 | | -- Create Elements table |
48 | | CREATE TABLE Elements ( |
49 | | element_id SERIAL PRIMARY KEY, |
50 | | symbol VARCHAR(2) NOT NULL UNIQUE, |
51 | | element_name VARCHAR(50) NOT NULL, |
52 | | atomic_number INT NOT NULL, |
53 | | atomic_weight FLOAT NOT NULL, |
54 | | melting_point FLOAT, |
55 | | boiling_point FLOAT, |
56 | | hazard_type VARCHAR(50), |
57 | | description_element TEXT, |
58 | | teacher_id INT NOT NULL REFERENCES Teacher(teacher_id) ON DELETE CASCADE |
| 39 | -- LABEQUIPMENT |
| 40 | CREATE TABLE labequipment ( |
| 41 | equipment_id SERIAL PRIMARY KEY, |
| 42 | equipment_name VARCHAR(50) NOT NULL UNIQUE, |
| 43 | type VARCHAR(50), |
| 44 | description TEXT, |
| 45 | safety_info TEXT, |
| 46 | teacher_id INT NOT NULL REFERENCES teacher(teacher_id) ON DELETE CASCADE |
61 | | -- Create Reaction table |
62 | | CREATE TABLE Reaction ( |
63 | | reaction_id SERIAL PRIMARY KEY, |
64 | | teacher_id INT NOT NULL REFERENCES Teacher(teacher_id) ON DELETE CASCADE, |
65 | | element1_id INT NOT NULL REFERENCES Elements(element_id) ON DELETE CASCADE, |
66 | | element2_id INT NOT NULL REFERENCES Elements(element_id) ON DELETE CASCADE, |
67 | | product VARCHAR(50), |
68 | | conditions TEXT |
| 49 | -- ELEMENTS |
| 50 | CREATE TABLE elements ( |
| 51 | element_id SERIAL PRIMARY KEY, |
| 52 | symbol VARCHAR(2) NOT NULL UNIQUE, |
| 53 | element_name VARCHAR(50) NOT NULL, |
| 54 | atomic_number INT NOT NULL, |
| 55 | atomic_weight DOUBLE PRECISION NOT NULL, |
| 56 | melting_point DOUBLE PRECISION, |
| 57 | boiling_point DOUBLE PRECISION, |
| 58 | hazard_type VARCHAR(50), |
| 59 | description_element TEXT, |
| 60 | teacher_id INT NOT NULL REFERENCES teacher(teacher_id) ON DELETE CASCADE |
71 | | -- Create Experiment table |
72 | | CREATE TABLE Experiment ( |
73 | | experiment_id SERIAL PRIMARY KEY, |
74 | | teacher_id INT NOT NULL REFERENCES Teacher(teacher_id) ON DELETE CASCADE, |
75 | | reaction_id INT NOT NULL REFERENCES Reaction(reaction_id) ON DELETE CASCADE, |
76 | | result TEXT, |
77 | | time_stamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP, |
| 63 | -- REACTION |
| 64 | CREATE TABLE reaction ( |
| 65 | reaction_id SERIAL PRIMARY KEY, |
| 66 | teacher_id INT NOT NULL REFERENCES teacher(teacher_id) ON DELETE CASCADE, |
| 67 | element1_id INT NOT NULL REFERENCES elements(element_id) ON DELETE CASCADE, |
| 68 | element2_id INT NOT NULL REFERENCES elements(element_id) ON DELETE CASCADE, |
| 69 | product VARCHAR(100), |
| 70 | conditions TEXT, |
| 71 | CONSTRAINT chk_reaction_diff_elements CHECK (element1_id <> element2_id) |
| 72 | ); |
| 73 | |
| 74 | -- EXPERIMENT |
| 75 | CREATE TABLE experiment ( |
| 76 | experiment_id SERIAL PRIMARY KEY, |
| 77 | teacher_id INT NOT NULL REFERENCES teacher(teacher_id) ON DELETE CASCADE, |
| 78 | reaction_id INT NOT NULL REFERENCES reaction(reaction_id) ON DELETE CASCADE, |
| 79 | result TEXT, |
| 80 | time_stamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP, |
81 | | -- Join table for linking experiments and lab equipment |
82 | | CREATE TABLE ExperimentLabEquipment ( |
83 | | experiment_id INT NOT NULL REFERENCES Experiment(experiment_id) ON DELETE CASCADE, |
84 | | equipment_id INT NOT NULL REFERENCES LabEquipment(equipment_id) ON DELETE CASCADE, |
| 84 | -- EXPERIMENT <-> LABEQUIPMENT (N:M) |
| 85 | CREATE TABLE experimentlabequipment ( |
| 86 | experiment_id INT NOT NULL REFERENCES experiment(experiment_id) ON DELETE CASCADE, |
| 87 | equipment_id INT NOT NULL REFERENCES labequipment(equipment_id) ON DELETE CASCADE, |
88 | | -- Join table for tracking which users viewed elements |
89 | | CREATE TABLE UserViewsElement ( |
90 | | user_id INT NOT NULL REFERENCES "User"(user_id) ON DELETE CASCADE, |
91 | | element_id INT NOT NULL REFERENCES Elements(element_id) ON DELETE CASCADE, |
| 91 | -- USER VIEWS |
| 92 | CREATE TABLE userviewselement ( |
| 93 | user_id INT NOT NULL REFERENCES "User"(user_id) ON DELETE CASCADE, |
| 94 | element_id INT NOT NULL REFERENCES elements(element_id) ON DELETE CASCADE, |
95 | | -- Join table for tracking which users viewed lab equipment |
96 | | CREATE TABLE UserViewsLabEquipment ( |
97 | | user_id INT NOT NULL REFERENCES "User"(user_id) ON DELETE CASCADE, |
98 | | equipment_id INT NOT NULL REFERENCES LabEquipment(equipment_id) ON DELETE CASCADE, |
| 98 | CREATE TABLE userviewslabequipment ( |
| 99 | user_id INT NOT NULL REFERENCES "User"(user_id) ON DELETE CASCADE, |
| 100 | equipment_id INT NOT NULL REFERENCES labequipment(equipment_id) ON DELETE CASCADE, |
102 | | -- Join table for tracking which users viewed experiments |
103 | | CREATE TABLE UserViewsExperiment ( |
104 | | user_id INT NOT NULL REFERENCES "User"(user_id) ON DELETE CASCADE, |
105 | | experiment_id INT NOT NULL REFERENCES Experiment(experiment_id) ON DELETE CASCADE, |
106 | | PRIMARY KEY (user_id, experiment_id) |
107 | | ); |
108 | | |
109 | | -- Join table for tracking which users participated in an experiment |
110 | | CREATE TABLE UserParticipatesInExperiment ( |
111 | | user_id INT NOT NULL REFERENCES "User"(user_id) ON DELETE CASCADE, |
112 | | experiment_id INT NOT NULL REFERENCES Experiment(experiment_id) ON DELETE CASCADE, |
| 104 | -- USER PARTICIPATION |
| 105 | CREATE TABLE userparticipatesinexperiment ( |
| 106 | user_id INT NOT NULL REFERENCES "User"(user_id) ON DELETE CASCADE, |
| 107 | experiment_id INT NOT NULL REFERENCES experiment(experiment_id) ON DELETE CASCADE, |