LogicalModel: schema_creation.sql

File schema_creation.sql, 2.4 KB (added by 216009, 12 days ago)
Line 
1CREATE TABLE University (
2 Id SERIAL PRIMARY KEY,
3 Name VARCHAR(255) NOT NULL UNIQUE,
4 Location VARCHAR(255) NOT NULL,
5 IsPrivate BOOLEAN NOT NULL
6);
7
8CREATE TYPE study_field_enum AS ENUM ('ENGINEERING', 'MEDICINE', 'LAW', 'ARTS', 'SCIENCE');
9
10CREATE TABLE Faculty (
11 Id SERIAL PRIMARY KEY,
12 Name VARCHAR(255) NOT NULL,
13 Location VARCHAR(255) NOT NULL,
14 study_field study_field_enum NOT NULL,
15 University_Id INT NOT NULL,
16 UNIQUE(Name, University_Id),
17 FOREIGN KEY (University_Id) REFERENCES University(Id) ON DELETE RESTRICT
18);
19CREATE TABLE Professor (
20 Id SERIAL PRIMARY KEY,
21 Name VARCHAR(255) NOT NULL,
22 Surname VARCHAR(255) NOT NULL,
23 Age INT NOT NULL CHECK (Age BETWEEN 18 AND 80),
24 Faculty_Id INT NOT NULL,
25 UNIQUE(Name, Surname, Faculty_Id),
26 FOREIGN KEY (Faculty_Id) REFERENCES Faculty(Id) ON DELETE RESTRICT
27);
28CREATE TABLE Student (
29 Id SERIAL PRIMARY KEY,
30 Name VARCHAR(255) NOT NULL,
31 Surname VARCHAR(255) NOT NULL,
32 Location VARCHAR(255) NOT NULL,
33 Student_Index INT NOT NULL UNIQUE,
34 Faculty_Id INT NOT NULL,
35 FOREIGN KEY (Faculty_Id) REFERENCES Faculty(Id) ON DELETE RESTRICT
36);
37
38CREATE TABLE Subject (
39 Id SERIAL PRIMARY KEY,
40 Name VARCHAR(255) NOT NULL,
41 Semester INT NOT NULL CHECK (Semester BETWEEN 1 AND 8),
42 Credits INT NOT NULL CHECK (Credits BETWEEN 1 AND 10),
43 Faculty_Id INT NOT NULL,
44 FOREIGN KEY (Faculty_Id) REFERENCES Faculty(Id) ON DELETE RESTRICT
45);
46
47CREATE TABLE Subject_Professor (
48 Subject_Id INT NOT NULL,
49 Professor_Id INT NOT NULL,
50 PRIMARY KEY(Subject_Id, Professor_Id),
51 FOREIGN KEY (Subject_Id) REFERENCES Subject(Id) ON DELETE CASCADE,
52 FOREIGN KEY (Professor_Id) REFERENCES Professor(Id) ON DELETE CASCADE
53);
54
55 CREATE TYPE enrollment_status AS ENUM ('ENROLLED', 'PASSED', 'FAILED', 'DROPPED');
56
57CREATE TABLE Student_Subject (
58 Student_Id INT NOT NULL,
59 Subject_Id INT NOT NULL,
60 Enrollment_Date DATE NOT NULL,
61 Status enrollment_status NOT NULL DEFAULT 'ENROLLED',
62 Final_Grade INT CHECK (Final_Grade BETWEEN 5 AND 10),
63 Absences_Count INT NOT NULL DEFAULT 0 CHECK (Absences_Count >= 0),
64 PRIMARY KEY (Student_Id, Subject_Id),
65 FOREIGN KEY (Student_Id) REFERENCES Student(Id) ON DELETE CASCADE,
66 FOREIGN KEY (Subject_Id) REFERENCES Subject(Id) ON DELETE CASCADE
67);
68