| Version 5 (modified by , 9 months ago) ( diff ) |
|---|
-- Drop existing tables if they exist
DROP TABLE IF EXISTS UserParticipatesInExperiment CASCADE;
DROP TABLE IF EXISTS UserViewsExperiment CASCADE;
DROP TABLE IF EXISTS UserViewsElement CASCADE;
DROP TABLE IF EXISTS UserViewsLabEquipment CASCADE;
DROP TABLE IF EXISTS ExperimentLabEquipment CASCADE;
DROP TABLE IF EXISTS Experiment CASCADE;
DROP TABLE IF EXISTS Reaction CASCADE;
DROP TABLE IF EXISTS Elements CASCADE;
DROP TABLE IF EXISTS LabEquipment CASCADE;
DROP TABLE IF EXISTS Student CASCADE;
DROP TABLE IF EXISTS Teacher CASCADE;
DROP TABLE IF EXISTS "User" CASCADE;
-- Create User table
CREATE TABLE "User" (
user_id SERIAL PRIMARY KEY,
user_name VARCHAR(30) NOT NULL,
user_surname VARCHAR(30) NOT NULL,
email VARCHAR(50) NOT NULL UNIQUE,
password VARCHAR(100) NOT NULL,
role ENUM('student', 'teacher') NOT NULL
);
-- Create Student table (inherits from User)
CREATE TABLE Student (
student_id INT PRIMARY KEY REFERENCES "User"(user_id) ON DELETE CASCADE,
teacher_id INT NOT NULL REFERENCES Teacher(teacher_id) ON DELETE CASCADE
);
-- Create Teacher table (inherits from User)
CREATE TABLE Teacher (
teacher_id INT PRIMARY KEY REFERENCES "User"(user_id) ON DELETE CASCADE
);
-- Create LabEquipment table
CREATE TABLE LabEquipment (
equipment_id SERIAL PRIMARY KEY,
equipment_name VARCHAR(50) NOT NULL UNIQUE,
type VARCHAR(50),
description TEXT,
safety_info TEXT,
teacher_id INT NOT NULL REFERENCES Teacher(teacher_id) ON DELETE CASCADE
);
-- Create Elements table
CREATE TABLE Elements (
element_id SERIAL PRIMARY KEY,
symbol VARCHAR(2) NOT NULL UNIQUE,
element_name VARCHAR(50) NOT NULL,
atomic_number INT NOT NULL,
atomic_weight FLOAT NOT NULL,
melting_point FLOAT,
boiling_point FLOAT,
hazard_type VARCHAR(50),
description_element TEXT,
teacher_id INT NOT NULL REFERENCES Teacher(teacher_id) ON DELETE CASCADE
);
-- Create Reaction table
CREATE TABLE Reaction (
reaction_id SERIAL PRIMARY KEY,
teacher_id INT NOT NULL REFERENCES Teacher(teacher_id) ON DELETE CASCADE,
element1_id INT NOT NULL REFERENCES Elements(element_id) ON DELETE CASCADE,
element2_id INT NOT NULL REFERENCES Elements(element_id) ON DELETE CASCADE,
product VARCHAR(50),
conditions TEXT
);
-- Create Experiment table
CREATE TABLE Experiment (
experiment_id SERIAL PRIMARY KEY,
teacher_id INT NOT NULL REFERENCES Teacher(teacher_id) ON DELETE CASCADE,
reaction_id INT NOT NULL REFERENCES Reaction(reaction_id) ON DELETE CASCADE,
result TEXT,
time_stamp TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
safety_warning TEXT
);
-- Join table for linking experiments and lab equipment
CREATE TABLE ExperimentLabEquipment (
experiment_id INT NOT NULL REFERENCES Experiment(experiment_id) ON DELETE CASCADE,
equipment_id INT NOT NULL REFERENCES LabEquipment(equipment_id) ON DELETE CASCADE,
PRIMARY KEY (experiment_id, equipment_id)
);
-- Join table for tracking which users viewed elements
CREATE TABLE UserViewsElement (
user_id INT NOT NULL REFERENCES "User"(user_id) ON DELETE CASCADE,
element_id INT NOT NULL REFERENCES Elements(element_id) ON DELETE CASCADE,
PRIMARY KEY (user_id, element_id)
);
-- Join table for tracking which users viewed lab equipment
CREATE TABLE UserViewsLabEquipment (
user_id INT NOT NULL REFERENCES "User"(user_id) ON DELETE CASCADE,
equipment_id INT NOT NULL REFERENCES LabEquipment(equipment_id) ON DELETE CASCADE,
PRIMARY KEY (user_id, equipment_id)
);
-- Join table for tracking which users viewed experiments
CREATE TABLE UserViewsExperiment (
user_id INT NOT NULL REFERENCES "User"(user_id) ON DELETE CASCADE,
experiment_id INT NOT NULL REFERENCES Experiment(experiment_id) ON DELETE CASCADE,
PRIMARY KEY (user_id, experiment_id)
);
-- Join table for tracking which users participated in an experiment
CREATE TABLE UserParticipatesInExperiment (
user_id INT NOT NULL REFERENCES "User"(user_id) ON DELETE CASCADE,
experiment_id INT NOT NULL REFERENCES Experiment(experiment_id) ON DELETE CASCADE,
PRIMARY KEY (user_id, experiment_id)
);
Note:
See TracWiki
for help on using the wiki.
