logicalAndPhysicalDesign: web3EdnevnikDDL_v3.sql

File web3EdnevnikDDL_v3.sql, 9.2 KB (added by 192063, 9 days ago)
Line 
1CREATE EXTENSION IF NOT EXISTS "pgcrypto";
2
3CREATE TABLE Admin_User (
4 id UUID PRIMARY KEY DEFAULT gen_random_uuid (),
5 e_posta VARCHAR(100) NOT NULL UNIQUE,
6 lozinka VARCHAR(255) NOT NULL,
7 ime VARCHAR(30) NOT NULL,
8 prezime VARCHAR(30) NOT NULL,
9 active BOOLEAN NOT NULL DEFAULT true
10);
11
12CREATE TABLE Mon_Admin (
13 id UUID PRIMARY KEY,
14 active BOOLEAN NOT NULL DEFAULT true,
15 FOREIGN KEY (id) REFERENCES Admin_User (id)
16);
17
18CREATE TABLE Direktor_Admin (
19 id UUID PRIMARY KEY,
20 kreiran_Od UUID,
21 active BOOLEAN NOT NULL DEFAULT true,
22 FOREIGN KEY (id) REFERENCES Admin_User (id),
23 FOREIGN KEY (kreiran_Od) REFERENCES Mon_Admin (id)
24);
25
26CREATE TABLE Korisnik (
27 id UUID PRIMARY KEY DEFAULT gen_random_uuid (),
28 e_posta VARCHAR(100) NOT NULL UNIQUE,
29 lozinka VARCHAR(255) NOT NULL,
30 ime VARCHAR(30) NOT NULL,
31 prezime VARCHAR(30) NOT NULL,
32 pol VARCHAR(10) NOT NULL,
33 adresa VARCHAR(100),
34 kreiranOd_id UUID,
35 active BOOLEAN NOT NULL DEFAULT true,
36 FOREIGN KEY (kreiranOd_id) REFERENCES Admin_User (id)
37);
38
39CREATE TABLE Nastavnik (
40 id UUID PRIMARY KEY,
41 active BOOLEAN NOT NULL DEFAULT true,
42 FOREIGN KEY (id) REFERENCES Korisnik (id)
43);
44
45CREATE TABLE Klasen_Rakovoditel (
46 id UUID PRIMARY KEY,
47 active BOOLEAN NOT NULL DEFAULT true,
48 FOREIGN KEY (id) REFERENCES Nastavnik (id) ON DELETE CASCADE
49);
50
51CREATE TABLE Predmeten_Nastavnik (
52 id UUID PRIMARY KEY,
53 active BOOLEAN NOT NULL DEFAULT true,
54 FOREIGN KEY (id) REFERENCES Nastavnik (id) ON DELETE CASCADE
55);
56
57CREATE TABLE Blagajnik (
58 id UUID PRIMARY KEY,
59 metamusk_adresa VARCHAR(80) NOT NULL UNIQUE,
60 active BOOLEAN NOT NULL DEFAULT true,
61 FOREIGN KEY (id) REFERENCES Korisnik (id)
62);
63
64CREATE TABLE Roditel (
65 id UUID PRIMARY KEY,
66 active BOOLEAN NOT NULL DEFAULT true,
67 metamusk_adresa VARCHAR(80) UNIQUE,
68 FOREIGN KEY (id) REFERENCES Korisnik (id)
69);
70
71CREATE TABLE Raspored (
72 id UUID PRIMARY KEY DEFAULT gen_random_uuid (),
73 naslov VARCHAR(30) NOT NULL,
74 tip VARCHAR(10) NOT NULL,
75 izgotvenOd_Id UUID,
76 active BOOLEAN NOT NULL DEFAULT true,
77 FOREIGN KEY (izgotvenOd_Id) REFERENCES Direktor_Admin (id)
78);
79
80CREATE TABLE Klas (
81 id UUID PRIMARY KEY DEFAULT gen_random_uuid (),
82 godinaNa_Slusanje VARCHAR(10) NOT NULL,
83 paralelka CHAR(1) NOT NULL,
84 oddelenie INTEGER NOT NULL,
85 koristiRasporedId UUID,
86 active BOOLEAN NOT NULL DEFAULT true,
87 klasen_rakovoditel_id UUID NOT NULL,
88 FOREIGN KEY (koristiRasporedId) REFERENCES Raspored (id) ON DELETE RESTRICT,
89 FOREIGN KEY (klasen_rakovoditel_id) REFERENCES Klasen_Rakovoditel (id) ON DELETE RESTRICT
90);
91
92CREATE TABLE Ucenik (
93 id UUID PRIMARY KEY,
94 mestoNa_ragjanje VARCHAR(30) NOT NULL,
95 mobilen_telefon VARCHAR(15) NOT NULL,
96 datumNa_ragjanje DATE NOT NULL,
97 staratel_id UUID,
98 uciVoKlas_id UUID,
99 active BOOLEAN NOT NULL DEFAULT true,
100 FOREIGN KEY (uciVoKlas_id) REFERENCES Klas (id) ON DELETE RESTRICT,
101 FOREIGN KEY (staratel_id) REFERENCES Roditel (id) ON DELETE CASCADE,
102 FOREIGN KEY (id) REFERENCES Korisnik (id)
103);
104
105CREATE TABLE Predmet (
106 id UUID PRIMARY KEY DEFAULT gen_random_uuid (),
107 ime VARCHAR(30) NOT NULL,
108 fond_casovi INTEGER NOT NULL,
109 active BOOLEAN NOT NULL DEFAULT true
110
111);
112
113
114CREATE TABLE AktivnostZa_NedelenPlan (
115 id UUID PRIMARY KEY DEFAULT gen_random_uuid (),
116 naslov VARCHAR(30) NOT NULL,
117 opis VARCHAR(80) NOT NULL,
118 active BOOLEAN NOT NULL DEFAULT true,
119 denVo_Nedelata VARCHAR(10) NOT NULL,
120 predmet_id UUID NOT NULL,
121 FOREIGN KEY(predmet_id) REFERENCES Predmet(id)
122);
123
124
125CREATE TABLE Cas (
126 id UUID PRIMARY KEY DEFAULT gen_random_uuid (),
127 ime VARCHAR(30) NOT NULL,
128 reden_cas INTEGER NOT NULL,
129 predmet_Id UUID NOT NULL,
130 active BOOLEAN NOT NULL DEFAULT true,
131 denVo_Nedelata VARCHAR(10) NOT NULL,
132 FOREIGN KEY (predmet_Id) REFERENCES Predmet(id)
133);
134
135CREATE TABLE Prisustvo (
136 id UUID PRIMARY KEY DEFAULT gen_random_uuid (),
137 datum DATE NOT NULL,
138 status VARCHAR(10) NOT NULL,
139 zabeleska TEXT,
140 evidentiranoOd_Id UUID,
141 seOdnesuvaNaUcenikot_Id UUID,
142 zaCasot_Id UUID,
143 FOREIGN KEY (evidentiranoOd_Id) REFERENCES Nastavnik (id),
144 FOREIGN KEY (seOdnesuvaNaUcenikot_Id) REFERENCES Ucenik (id),
145 FOREIGN KEY (zaCasot_Id) REFERENCES Cas (id)
146);
147
148
149
150CREATE TABLE Ocenka (
151 id UUID PRIMARY KEY DEFAULT gen_random_uuid (),
152 ocenka INTEGER NOT NULL,
153 datum DATE NOT NULL,
154 zabeleska TEXT,
155 vnesena_Od UUID,
156 dobienaZaUcenikot_Id UUID,
157 eZaPredmetot_Id UUID,
158 zaAktivnosta_id UUID,
159 FOREIGN KEY (eZaPredmetot_Id) REFERENCES Predmet (id),
160 FOREIGN KEY (dobienaZaUcenikot_Id) REFERENCES Ucenik (id),
161 FOREIGN KEY (zaAktivnosta_id) REFERENCES AktivnostZa_NedelenPlan (id),
162 FOREIGN KEY (vnesena_Od) REFERENCES Nastavnik (id)
163);
164
165CREATE TABLE Usna_Ocenka (
166 id UUID,
167 tema VARCHAR(50) NOT NULL,
168 osvoeni_poeni INTEGER NOT NULL,
169 max_poeni INTEGER NOT NULL,
170 vid_isprasuvanje VARCHAR(20) NOT NULL,
171 FOREIGN KEY (id) REFERENCES Ocenka (id) ON DELETE CASCADE
172);
173
174CREATE TABLE Pismena_Ocenka (
175 id UUID,
176 tema VARCHAR(50) NOT NULL,
177 osvoeni_poeni INTEGER NOT NULL,
178 max_poeni INTEGER NOT NULL,
179 vid VARCHAR(20) NOT NULL,
180 FOREIGN KEY (id) REFERENCES Ocenka (id) ON DELETE CASCADE
181);
182
183CREATE TABLE Krajna_Ocenka (
184 id UUID,
185 tip VARCHAR(20) NOT NULL,
186 FOREIGN KEY (id) REFERENCES Ocenka (id) ON DELETE CASCADE
187);
188
189CREATE TABLE Soopstenie (
190 id UUID PRIMARY KEY DEFAULT gen_random_uuid (),
191 naslov VARCHAR(30) NOT NULL,
192 sodrzina TEXT NOT NULL,
193 kreirano_Na DATE NOT NULL,
194 zaKlas_Id UUID,
195 postiranoOd_Id UUID,
196 active BOOLEAN NOT NULL DEFAULT true,
197 FOREIGN KEY (postiranoOd_Id) REFERENCES Klasen_Rakovoditel (id),
198 FOREIGN KEY (zaKlas_Id) REFERENCES Klas (id)
199);
200
201CREATE TABLE Nedelen_Plan (
202 id UUID PRIMARY KEY DEFAULT gen_random_uuid (),
203 datum_Od DATE NOT NULL,
204 datum_Do DATE NOT NULL,
205 sledenOdKlas_Id UUID,
206 active BOOLEAN NOT NULL DEFAULT true,
207 FOREIGN KEY (sledenOdKlas_Id) REFERENCES Klas (id)
208);
209CREATE TYPE payment_status AS ENUM (
210 'KREIRANO',
211 'TX_SUBMITTED',
212 'ODOBRENO',
213 'ZAVRSENO',
214 'FAILED'
215);
216CREATE TYPE notice_status AS ENUM (
217 'PENDING',
218 'APPROVED',
219 'REJECTED'
220);
221
222CREATE TABLE SoopstenieZa_Plakjanje (
223 id UUID PRIMARY KEY DEFAULT gen_random_uuid (),
224 naslov VARCHAR(100) NOT NULL,
225 sodrzina TEXT NOT NULL,
226 iznos DECIMAL(38, 18) NOT NULL,
227 valuta VARCHAR(10) NOT NULL,
228 rokZa_Plakjanje DATE NOT NULL,
229 status notice_status NOT NULL DEFAULT 'PENDING',
230 obrabotenoOd_Id UUID,
231 sozdadenoOdBlagajnik_Id UUID NOT NULL,
232 active BOOLEAN NOT NULL DEFAULT true,
233 created_at TIMESTAMP DEFAULT now(),
234 FOREIGN KEY (sozdadenoOdBlagajnik_Id) REFERENCES Blagajnik (id),
235 FOREIGN KEY (obrabotenoOd_Id) REFERENCES Direktor_Admin (id)
236);
237
238CREATE TABLE Plakjanje (
239 id UUID PRIMARY KEY DEFAULT gen_random_uuid (),
240 status payment_status NOT NULL,
241 tx_hash VARCHAR(100) UNIQUE,
242 valuta VARCHAR(10) NOT NULL,
243 plateno_Na TIMESTAMP ,
244 iznos DECIMAL(38, 18) NOT NULL,
245 platenoOdRoditel_Id UUID NOT NULL,
246 soopstenie_za_plakjanje_id UUID NOT NULL,
247 created_at TIMESTAMP DEFAULT now(),
248 UNIQUE (platenoOdRoditel_Id, soopstenie_za_plakjanje_id),
249 CONSTRAINT chk_tx_hash_when_paid CHECK (
250 (status = 'KREIRANO' AND tx_hash IS NULL)
251 OR
252 (status IN ('TX_SUBMITTED', 'ODOBRENO', 'ZAVRSENO', 'FAILED') AND tx_hash IS NOT NULL)
253 ),
254 FOREIGN KEY (soopstenie_za_plakjanje_id) REFERENCES SoopstenieZa_Plakjanje (id),
255 FOREIGN KEY (platenoOdRoditel_Id) REFERENCES Roditel (id)
256);
257
258CREATE TABLE KlasSlusa_Predmet (
259 klas_Id UUID,
260 predmet_Id UUID,
261 PRIMARY KEY (klas_id, predmet_Id),
262 FOREIGN KEY (predmet_Id) REFERENCES Predmet (id),
263 FOREIGN KEY (klas_id) REFERENCES Klas (id)
264);
265
266CREATE TABLE NastavnikGoPredava_Predmetot (
267 nastavnik_Id UUID,
268 predmet_Id UUID,
269 PRIMARY KEY (nastavnik_Id, predmet_Id),
270 FOREIGN KEY (predmet_Id) REFERENCES Predmet (id),
271 FOREIGN KEY (nastavnik_Id) REFERENCES Nastavnik (id)
272);
273
274CREATE TABLE NedelenPlanOpfakja_Aktivnosti (
275 nedelenPlan_Id UUID,
276 aktivnostZaNedelenPlan_Id UUID,
277 PRIMARY KEY (
278 nedelenPlan_Id,
279 aktivnostZaNedelenPlan_Id
280 ),
281 FOREIGN KEY (aktivnostZaNedelenPlan_Id) REFERENCES AktivnostZa_NedelenPlan (id),
282 FOREIGN KEY (nedelenPlan_Id) REFERENCES Nedelen_Plan (id)
283);
284
285CREATE TABLE NastavnikZapisuvaAktivnostZaNedelen_Plan (
286 nastavnik_Id UUID,
287 aktivnostZaNedelenPlan_Id UUID,
288 PRIMARY KEY (
289 nastavnik_Id,
290 aktivnostZaNedelenPlan_Id
291 ),
292 FOREIGN KEY (aktivnostZaNedelenPlan_Id) REFERENCES AktivnostZa_NedelenPlan (id),
293 FOREIGN KEY (nastavnik_Id) REFERENCES Nastavnik(id)
294);
295
296CREATE TABLE RasporedSodrzi_Cas (
297 raspored_Id UUID,
298 cas_Id UUID,
299 PRIMARY KEY (raspored_Id, cas_Id),
300 FOREIGN KEY (cas_Id) REFERENCES Cas (id),
301 FOREIGN KEY (raspored_Id) REFERENCES Raspored (id)
302);
303