DatabaseCreation: DDL.sql

File DDL.sql, 6.0 KB (added by 231069, 6 days ago)
Line 
1--DDL
2CREATE TABLE Gragjanin (
3 EMBG char(13) PRIMARY KEY,
4 ime varchar(50) NOT NULL default 'unknown',
5 prezime varchar(50) NOT NULL default'unknown',
6 pol varchar(1) ,
7 adresa varchar(100),
8 datum_ragjanje date ,
9 CHECK (pol IN ('M','F')),
10 CHECK (LENGTH(EMBG) = 13),
11 CHECK (datum_ragjanje <= CURRENT_DATE)
12);
13
14CREATE TABLE Kategorija (
15 id_kategorija SERIAL PRIMARY KEY,
16 kod varchar(3) NOT NULL
17);
18
19CREATE TABLE Vozilo (
20 broj_na_sasija varchar(17) PRIMARY KEY,
21 model varchar(50) ,
22 id_kategorija int,
23 FOREIGN KEY (id_kategorija) REFERENCES Kategorija(id_kategorija) ON UPDATE CASCADE ON DELETE RESTRICT
24);
25
26CREATE TABLE Vozacka_dozvola (
27 broj_dozvola varchar(30) PRIMARY KEY,
28 datum_izdavanje date NOT NULL,
29 datum_vaznost_do date NOT NULL,
30 EMBG char(13),
31 CHECK (datum_vaznost_do > datum_izdavanje),
32 FOREIGN KEY (EMBG) REFERENCES Gragjanin(EMBG) ON UPDATE CASCADE ON DELETE RESTRICT
33);
34
35CREATE TABLE Kategorija_Vozacka_dozvola (
36 id_kategorija int,
37 broj_dozvola varchar(30),
38 datum_polaganje date,
39 PRIMARY KEY (id_kategorija, broj_dozvola),
40 FOREIGN KEY (id_kategorija) REFERENCES Kategorija(id_kategorija) ON UPDATE CASCADE ON DELETE RESTRICT,
41 FOREIGN KEY (broj_dozvola) REFERENCES Vozacka_dozvola(broj_dozvola) ON UPDATE CASCADE ON DELETE CASCADE
42);
43
44CREATE TABLE Boja_vozilo (
45 broj_na_sasija varchar(17),
46 boja varchar(30),
47 PRIMARY KEY (broj_na_sasija, boja),
48 FOREIGN KEY (broj_na_sasija) REFERENCES Vozilo(broj_na_sasija) ON UPDATE CASCADE ON DELETE CASCADE
49);
50
51CREATE TABLE Registracija(
52 id_registracija SERIAL,
53 EMBG char(13),
54 broj_na_sasija varchar(17),
55 datum_na_izvadanje date not null,
56 datum_na_istekuvanje date,
57 registerska_tablica varchar(20),
58 PRIMARY KEY (id_registracija),
59 CHECK (datum_na_istekuvanje IS NULL OR datum_na_istekuvanje >= datum_na_izvadanje),
60 FOREIGN KEY (EMBG) REFERENCES Gragjanin(EMBG) ON UPDATE CASCADE ON DELETE RESTRICT,
61 FOREIGN KEY (broj_na_sasija) REFERENCES Vozilo(broj_na_sasija) ON UPDATE CASCADE ON DELETE RESTRICT
62);
63
64CREATE TABLE Policaec (
65 EMBG_P char(13) PRIMARY KEY,
66 broj_na_znacka varchar(20),
67 EMBG_nadreden char(13),
68 FOREIGN KEY (EMBG_P) REFERENCES Gragjanin(EMBG) ON UPDATE CASCADE ON DELETE RESTRICT,
69 FOREIGN KEY (EMBG_nadreden) REFERENCES Policaec(EMBG_P) ON UPDATE CASCADE ON DELETE RESTRICT
70);
71
72CREATE TABLE Sektor (
73 id_sektor int PRIMARY KEY,
74 ime varchar(100) NOT NULL,
75 region varchar(100),
76 telefon varchar(13),
77 CHECK (
78 telefon IS NULL OR
79 telefon ~ '^\+389[0-9]{8}$'
80 )
81);
82
83CREATE TABLE Stanica (
84 id_stanica SERIAL PRIMARY KEY,
85 ime varchar(100) ,
86 adresa varchar(100) ,
87 id_sektor int ,
88 FOREIGN KEY (id_sektor) REFERENCES Sektor(id_sektor) ON UPDATE CASCADE ON DELETE RESTRICT
89);
90
91CREATE TABLE Raboti_vo (
92 EMBG_P char(13),
93 id_stanica int,
94 datum_od date not null,
95 datum_do date ,
96 PRIMARY KEY (EMBG_P, id_stanica),
97 CHECK (datum_do IS NULL OR datum_do >= datum_od),
98 FOREIGN KEY (EMBG_P) REFERENCES Policaec(EMBG_P) ON UPDATE CASCADE ON DELETE RESTRICT,
99 FOREIGN KEY (id_stanica) REFERENCES Stanica(id_stanica) ON UPDATE CASCADE ON DELETE RESTRICT
100);
101
102CREATE TABLE Kazna (
103 id_kazna int PRIMARY KEY,
104 iznos_kazna numeric(10,2) NOT NULL CHECK (iznos_kazna >= 0),
105 opis text
106);
107
108CREATE TABLE Prekrsok (
109 id_prekrsok int PRIMARY KEY,
110 ime varchar(100),
111 opis text ,
112 id_kazna int4,
113 FOREIGN KEY (id_kazna) REFERENCES Kazna(id_kazna) ON UPDATE CASCADE ON DELETE RESTRICT
114);
115
116CREATE TABLE Slucaj (
117 id_slucaj SERIAL PRIMARY KEY,
118 datum_otvaranje date NOT NULL ,
119 status varchar(20) default 'Otvoren',
120 tip_nastan text,
121 CHECK (status IN ('Otvoren', 'Zatvoren', 'Vo tek')),
122 CHECK (datum_otvaranje <= CURRENT_DATE)
123);
124
125CREATE TABLE Zapisnik (
126 id_na_zapisnik serial PRIMARY KEY,
127 vreme time,
128 datum date CHECK (datum IS NULL OR datum <= CURRENT_DATE),
129 lokacija varchar(100),
130 Potpis boolean DEFAULT false,
131 id_slucaj int,
132 EMBG_Prekrsuvach char(13),
133 Vozilo_Broj_Sasija varchar(17),
134 EMBG_Policaec char(13),
135 FOREIGN KEY (id_slucaj) REFERENCES Slucaj(id_slucaj) ON UPDATE CASCADE ON DELETE RESTRICT,
136 FOREIGN KEY (EMBG_Prekrsuvach) REFERENCES Gragjanin(EMBG) ON UPDATE CASCADE ON DELETE RESTRICT,
137 FOREIGN KEY (Vozilo_Broj_Sasija) REFERENCES Vozilo(broj_na_sasija) ON UPDATE CASCADE ON DELETE RESTRICT,
138 FOREIGN KEY (EMBG_Policaec) REFERENCES Policaec(EMBG_P) ON UPDATE CASCADE ON DELETE RESTRICT
139);
140
141CREATE TABLE Stavka_Zapisnik (
142 id_stavka SERIAL PRIMARY KEY,
143 reden_broj int,
144 id_na_zapisnik int,
145 id_na_prekrsok int,
146 FOREIGN KEY (id_na_zapisnik) REFERENCES Zapisnik(id_na_zapisnik) ON UPDATE CASCADE ON DELETE CASCADE,
147 FOREIGN KEY (id_na_prekrsok) REFERENCES Prekrsok(id_prekrsok) ON UPDATE CASCADE ON DELETE RESTRICT
148);
149
150CREATE TABLE Zadaca (
151 id_zadaca SERIAL PRIMARY KEY,
152 opis varchar(255),
153 status varchar(20) NOT NULL default 'Aktivna',
154 EMBG_policaec char(13),
155 id_slucaj int,
156 FOREIGN KEY (EMBG_policaec) REFERENCES Policaec(EMBG_P) ON UPDATE CASCADE ON DELETE RESTRICT,
157 FOREIGN KEY (id_slucaj) REFERENCES Slucaj(id_slucaj) ON UPDATE CASCADE ON DELETE RESTRICT,
158 CHECK (status IN ('Aktivna', 'Zavrsena', 'Otkazana'))
159);
160
161CREATE TABLE Uplata (
162 id_uplata serial PRIMARY KEY,
163 iznos numeric(10,2) NOT NULL ,
164 status varchar(30) NOT NULL DEFAULT 'Neplateno',
165 datum_uplata date ,
166 Uplatil_Gragjanin char(13),
167 id_zapisnik int ,
168 nacin_plakanje varchar(30),
169 FOREIGN KEY (Uplatil_Gragjanin) REFERENCES Gragjanin(EMBG) ON UPDATE CASCADE ON DELETE RESTRICT,
170 FOREIGN KEY (id_zapisnik) REFERENCES Zapisnik(id_na_zapisnik) ON UPDATE CASCADE ON DELETE RESTRICT,
171 CHECK(iznos >= 0),
172 CHECK (datum_uplata IS NULL OR datum_uplata <= CURRENT_DATE),
173 CHECK (status IN ('Plateno', 'Neplateno'))
174);
175
176
177
178