forked from itucsdb1963/itucsdb1963
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathdbinit.py
192 lines (173 loc) · 6.52 KB
/
dbinit.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
import os
import sys
import psycopg2 as dbapi2
INIT_STATEMENTS = [
"""CREATE TABLE IF NOT EXISTS PEOPLE (
P_ID SERIAL PRIMARY KEY,
NAME VARCHAR(100),
EMAIL VARCHAR(120) UNIQUE,
PHOTO VARCHAR(120),
PASSWORD VARCHAR(280),
TYPE VARCHAR(120)
)""",
"""CREATE TABLE IF NOT EXISTS BUILDINGS (
BU_ID SERIAL PRIMARY KEY,
BU_NAME VARCHAR(100),
BU_CODE VARCHAR(5),
CAMPUS VARCHAR(20)
)""",
"""CREATE TABLE IF NOT EXISTS FACULTIES (
FAC_ID SERIAL PRIMARY KEY,
FAC_NAME VARCHAR(100) NOT NULL,
FAC_BUILDING INTEGER,
DEAN INTEGER NOT NULL,
DEAN_ASST_1 INTEGER NOT NULL,
DEAN_ASST_2 INTEGER,
FOREIGN KEY (FAC_BUILDING) REFERENCES BUILDINGS(BU_ID) ON UPDATE CASCADE ON DELETE RESTRICT,
FOREIGN KEY (DEAN) REFERENCES PEOPLE(P_ID) ON UPDATE CASCADE ON DELETE RESTRICT,
FOREIGN KEY (DEAN_ASST_1) REFERENCES PEOPLE(P_ID) ON UPDATE CASCADE ON DELETE RESTRICT,
FOREIGN KEY (DEAN_ASST_2) REFERENCES PEOPLE(P_ID) ON UPDATE CASCADE ON DELETE RESTRICT
)""",
"""CREATE TABLE IF NOT EXISTS DEPARTMENTS (
DEP_ID SERIAL PRIMARY KEY,
DEP_NAME VARCHAR(100),
FACULTY INTEGER,
BUILDING INTEGER,
DEAN INTEGER,
FOREIGN KEY (BUILDING) REFERENCES BUILDINGS(BU_ID) ON UPDATE CASCADE ON DELETE RESTRICT,
FOREIGN KEY (FACULTY) REFERENCES FACULTIES(FAC_ID) ON UPDATE CASCADE ON DELETE RESTRICT,
FOREIGN KEY (DEAN) REFERENCES PEOPLE(P_ID) ON UPDATE CASCADE ON DELETE RESTRICT
)""",
"""CREATE TABLE IF NOT EXISTS ROOMS (
ROOM_ID SERIAL PRIMARY KEY,
BUILDING INTEGER,
ROOM_NAME VARCHAR(10) UNIQUE NOT NULL,
AVAILABLE BOOL DEFAULT TRUE,
CLASS BOOLEAN DEFAULT FALSE,
LAB BOOLEAN DEFAULT FALSE,
ROOM BOOLEAN DEFAULT FALSE,
FOREIGN KEY (BUILDING) REFERENCES BUILDINGS(BU_ID) ON UPDATE CASCADE ON DELETE CASCADE
)""",
"""CREATE TABLE IF NOT EXISTS LABS (
LAB_ID SERIAL PRIMARY KEY,
LAB_NAME VARCHAR(100) UNIQUE,
DEPARTMENT INTEGER,
FACULTY INTEGER,
BUILDING INTEGER,
ROOM INTEGER,
INVESTIGATOR INTEGER NOT NULL,
FOREIGN KEY (BUILDING) REFERENCES BUILDINGS(BU_ID) ON UPDATE CASCADE ON DELETE RESTRICT,
FOREIGN KEY (FACULTY) REFERENCES FACULTIES(FAC_ID) ON UPDATE CASCADE ON DELETE RESTRICT,
FOREIGN KEY (DEPARTMENT) REFERENCES DEPARTMENTS(DEP_ID) ON UPDATE CASCADE ON DELETE RESTRICT,
FOREIGN KEY (ROOM) REFERENCES ROOMS(ROOM_ID) ON UPDATE CASCADE ON DELETE RESTRICT,
FOREIGN KEY (INVESTIGATOR) REFERENCES PEOPLE(P_ID) ON UPDATE CASCADE ON DELETE RESTRICT
)""",
"""CREATE TABLE IF NOT EXISTS ASSISTANTS (
AS_ID SERIAL PRIMARY KEY,
AS_PERSON INTEGER NOT NULL,
LAB INTEGER,
DEGREE VARCHAR(10),
DEPARTMENT INTEGER,
FACULTY INTEGER,
FOREIGN KEY (AS_PERSON) REFERENCES PEOPLE(P_ID) ON UPDATE CASCADE ON DELETE RESTRICT,
FOREIGN KEY (LAB) REFERENCES LABS(LAB_ID) ON UPDATE CASCADE ON DELETE RESTRICT,
FOREIGN KEY (DEPARTMENT) REFERENCES DEPARTMENTS(DEP_ID) ON UPDATE CASCADE ON DELETE RESTRICT,
FOREIGN KEY (FACULTY) REFERENCES FACULTIES(FAC_ID) ON UPDATE CASCADE ON DELETE RESTRICT
)""",
"""CREATE TABLE IF NOT EXISTS PAPERS (
PAPER_ID SERIAL PRIMARY KEY,
TITLE VARCHAR (100),
PLAT VARCHAR(100),
CITATION_COUNT INTEGER DEFAULT 0,
AUTHOR INTEGER,
CONFERENCE BOOLEAN NOT NULL,
FOREIGN KEY (AUTHOR) REFERENCES PEOPLE(P_ID) ON UPDATE CASCADE ON DELETE RESTRICT
)""",
"""CREATE TABLE IF NOT EXISTS CLUBS (
CLUB_ID SERIAL PRIMARY KEY,
NAME VARCHAR(100) NOT NULL,
FACULTY INTEGER,
ADVISOR INTEGER,
CHAIRMAN INTEGER,
V_CHAIRMAN_1 INTEGER,
V_CHAIRMAN_2 INTEGER,
FOREIGN KEY (FACULTY) REFERENCES FACULTIES(FAC_ID) ON UPDATE CASCADE ON DELETE RESTRICT,
FOREIGN KEY (ADVISOR) REFERENCES PEOPLE(P_ID) ON UPDATE CASCADE ON DELETE RESTRICT,
FOREIGN KEY (CHAIRMAN) REFERENCES PEOPLE(P_ID) ON UPDATE CASCADE ON DELETE RESTRICT,
FOREIGN KEY (V_CHAIRMAN_1) REFERENCES PEOPLE(P_ID) ON UPDATE CASCADE ON DELETE RESTRICT,
FOREIGN KEY (V_CHAIRMAN_2) REFERENCES PEOPLE(P_ID) ON UPDATE CASCADE ON DELETE RESTRICT
)""",
"""CREATE TABLE IF NOT EXISTS INSTRUCTORS(
INS_ID INTEGER PRIMARY KEY,
BACHELORS VARCHAR(90),
MASTERS VARCHAR(90),
DOCTORATES VARCHAR(90),
DEPARTMENT INTEGER,
ROOM INTEGER UNIQUE,
LAB INTEGER,
FOREIGN KEY (DEPARTMENT) REFERENCES DEPARTMENTS(DEP_ID) ON UPDATE CASCADE ON DELETE SET NULL,
FOREIGN KEY (ROOM) REFERENCES ROOMS(ROOM_ID) ON DELETE SET NULL,
FOREIGN KEY (LAB) REFERENCES LABS(LAB_ID) ON DELETE SET NULL,
FOREIGN KEY (INS_ID) REFERENCES PEOPLE ON DELETE CASCADE
)""",
"""CREATE TABLE IF NOT EXISTS CLASSES(
CL_ID INTEGER PRIMARY KEY,
CAP INTEGER NOT NULL,
TYPE VARCHAR(15) DEFAULT 'Lecture',
AIR_CONDITIONER BOOL,
LAST_RESTORATION VARCHAR(4),
BOARD_TYPE VARCHAR(5) DEFAULT 'Mixed',
FOREIGN KEY (CL_ID) REFERENCES ROOMS(ROOM_ID) ON DELETE CASCADE
)""",
"""CREATE TABLE IF NOT EXISTS LESSONS (
LESSON_ID SERIAL PRIMARY KEY,
CAP INTEGER,
ENROLLED INTEGER,
DATE VARCHAR(280),
CRN INTEGER UNIQUE NOT NULL,
CODE VARCHAR(7),
INSTRUCTOR INTEGER,
LOCATION INTEGER,
ASSISTANT INTEGER,
CREDIT INTEGER,
FOREIGN KEY (INSTRUCTOR) REFERENCES INSTRUCTORS(INS_ID),
FOREIGN KEY (ASSISTANT) REFERENCES ASSISTANTS(AS_ID),
FOREIGN KEY (LOCATION) REFERENCES CLASSES(CL_ID)
)""",
"""CREATE TABLE IF NOT EXISTS STUDENTS (
STU_ID INTEGER PRIMARY KEY ,
NUMBER INTEGER,
EARNED_CREDITS INTEGER,
DEPARTMENT INTEGER NOT NULL,
FACULTY INTEGER NOT NULL,
CLUB INTEGER,
LAB INTEGER,
FOREIGN KEY (STU_ID) REFERENCES PEOPLE ON DELETE CASCADE,
FOREIGN KEY (DEPARTMENT) REFERENCES DEPARTMENTS,
FOREIGN KEY (FACULTY) REFERENCES FACULTIES,
FOREIGN KEY (CLUB) REFERENCES CLUBS,
FOREIGN KEY (LAB) REFERENCES LABS
)""",
"""CREATE TABLE IF NOT EXISTS ENROLLMENT(
ENROLL_ID SERIAL PRIMARY KEY,
STUDENT_ID INTEGER NOT NULL,
LESSON_ID INTEGER NOT NULL,
FOREIGN KEY (STUDENT_ID) REFERENCES STUDENTS ON DELETE CASCADE,
FOREIGN KEY (LESSON_ID) REFERENCES LESSONS ON DELETE CASCADE
)""",
]
def initialize(url):
try:
with dbapi2.connect(url) as connection:
cursor = connection.cursor()
for statement in INIT_STATEMENTS:
cursor.execute(statement)
cursor.close()
except Exception as err:
print("Error: ", err)
if __name__ == "__main__":
url = os.getenv("DATABASE_URL")
if url is None:
print("Usage: DATABASE_URL=url python dbinit.py", file=sys.stderr)
sys.exit(1)
initialize(url)