| 1 | CREATE TABLE Zona
|
|---|
| 2 | (
|
|---|
| 3 | zona_id INTEGER GENERATED ALWAYS AS IDENTITY,
|
|---|
| 4 | ime VARCHAR(100),
|
|---|
| 5 | dozvolena_brzina INTEGER,
|
|---|
| 6 | opstina VARCHAR(100),
|
|---|
| 7 | PRIMARY KEY (zona_id),
|
|---|
| 8 | CONSTRAINT CHK_Zona_Brzina CHECK (dozvolena_brzina IS NULL OR dozvolena_brzina > 0),
|
|---|
| 9 | CONSTRAINT CHK_Zona_Ime CHECK (ime IS NULL OR TRIM(ime) <> ''),
|
|---|
| 10 | CONSTRAINT CHK_Zona_Opstina CHECK (opstina IS NULL OR TRIM(opstina) <> '')
|
|---|
| 11 | );
|
|---|
| 12 |
|
|---|
| 13 | CREATE TABLE Lokacija
|
|---|
| 14 | (
|
|---|
| 15 | lokacija_id INTEGER GENERATED ALWAYS AS IDENTITY,
|
|---|
| 16 | ulica VARCHAR(100),
|
|---|
| 17 | latitude DECIMAL(9, 6),
|
|---|
| 18 | longitude DECIMAL(9, 6),
|
|---|
| 19 | zona_id INTEGER,
|
|---|
| 20 | PRIMARY KEY (lokacija_id),
|
|---|
| 21 | CONSTRAINT FK_Lokacija_Zona
|
|---|
| 22 | FOREIGN KEY (zona_id) REFERENCES Zona (zona_id) ON DELETE SET NULL ON UPDATE CASCADE,
|
|---|
| 23 | CONSTRAINT CHK_Lokacija_Ulica
|
|---|
| 24 | CHECK (ulica IS NULL OR TRIM(ulica) <> ''),
|
|---|
| 25 | CONSTRAINT CHK_Lokacija_Lat
|
|---|
| 26 | CHECK (latitude IS NULL OR latitude BETWEEN -90 AND 90),
|
|---|
| 27 | CONSTRAINT CHK_Lokacija_Long
|
|---|
| 28 | CHECK (longitude IS NULL OR longitude BETWEEN -180 AND 180)
|
|---|
| 29 | );
|
|---|
| 30 |
|
|---|
| 31 | CREATE TABLE TipKamera
|
|---|
| 32 | (
|
|---|
| 33 | tip_kamera_id INTEGER GENERATED ALWAYS AS IDENTITY,
|
|---|
| 34 | ime VARCHAR(100),
|
|---|
| 35 | opis VARCHAR(255),
|
|---|
| 36 | max_opseg INTEGER,
|
|---|
| 37 | multifunkcionalna BOOLEAN,
|
|---|
| 38 | PRIMARY KEY (tip_kamera_id),
|
|---|
| 39 | CONSTRAINT CHK_TipKamera_Ime CHECK (ime IS NULL OR TRIM(ime) <> ''),
|
|---|
| 40 | CONSTRAINT CHK_TipKamera_MaxOpseg CHECK (max_opseg IS NULL OR max_opseg > 0)
|
|---|
| 41 | );
|
|---|
| 42 |
|
|---|
| 43 | CREATE TABLE Kamera
|
|---|
| 44 | (
|
|---|
| 45 | kamera_id INTEGER GENERATED ALWAYS AS IDENTITY,
|
|---|
| 46 | datum_instalacija DATE DEFAULT CURRENT_DATE,
|
|---|
| 47 | status VARCHAR(100) DEFAULT 'aktivna',
|
|---|
| 48 | seriski_broj VARCHAR(100),
|
|---|
| 49 | datum_posleden_servis DATE,
|
|---|
| 50 | lokacija_id INTEGER,
|
|---|
| 51 | tip_kamera_id INTEGER,
|
|---|
| 52 | PRIMARY KEY (kamera_id),
|
|---|
| 53 | CONSTRAINT FK_Kamera_Lokacija
|
|---|
| 54 | FOREIGN KEY (lokacija_id) REFERENCES Lokacija (lokacija_id)
|
|---|
| 55 | ON DELETE SET NULL
|
|---|
| 56 | ON UPDATE CASCADE,
|
|---|
| 57 | CONSTRAINT FK_Kamera_TipKamera
|
|---|
| 58 | FOREIGN KEY (tip_kamera_id) REFERENCES TipKamera (tip_kamera_id) ON DELETE RESTRICT ON UPDATE CASCADE,
|
|---|
| 59 | CONSTRAINT UQ_Kamera_SeriskiBroj UNIQUE (seriski_broj),
|
|---|
| 60 | CONSTRAINT CHK_Kamera_Status CHECK (status IS NULL OR status IN ('aktivna', 'neaktivna', 'servis')),
|
|---|
| 61 | CONSTRAINT CHK_Kamera_DatumInstalacija CHECK (datum_instalacija IS NULL OR datum_instalacija <= CURRENT_DATE),
|
|---|
| 62 | CONSTRAINT CHK_Kamera_SeriskiBroj CHECK (seriski_broj IS NULL OR TRIM(seriski_broj) <> ''),
|
|---|
| 63 | CONSTRAINT CHK_Kamera_PosledenServis CHECK (
|
|---|
| 64 | datum_posleden_servis IS NULL OR datum_posleden_servis <= CURRENT_DATE
|
|---|
| 65 | )
|
|---|
| 66 | );
|
|---|
| 67 |
|
|---|
| 68 | CREATE TABLE MrezhnaKonekcija
|
|---|
| 69 | (
|
|---|
| 70 | mrezna_konekcija_id INTEGER GENERATED ALWAYS AS IDENTITY,
|
|---|
| 71 | ime VARCHAR(50),
|
|---|
| 72 | opis VARCHAR(100),
|
|---|
| 73 | PRIMARY KEY (mrezna_konekcija_id),
|
|---|
| 74 | CONSTRAINT CHK_MrezhnaKonekcija_Ime CHECK (ime IS NULL OR TRIM(ime) <> '')
|
|---|
| 75 | );
|
|---|
| 76 |
|
|---|
| 77 | CREATE TABLE MrezhnaKonekcijaKamera
|
|---|
| 78 | (
|
|---|
| 79 | mrezna_konekcija_id INTEGER,
|
|---|
| 80 | kamera_id INTEGER,
|
|---|
| 81 | PRIMARY KEY (mrezna_konekcija_id, kamera_id),
|
|---|
| 82 | CONSTRAINT FK_MKK_MrezhnaKonekcija
|
|---|
| 83 | FOREIGN KEY (mrezna_konekcija_id) REFERENCES MrezhnaKonekcija (mrezna_konekcija_id) ON DELETE CASCADE ON UPDATE CASCADE,
|
|---|
| 84 | CONSTRAINT FK_MKK_Kamera
|
|---|
| 85 | FOREIGN KEY (kamera_id) REFERENCES Kamera (kamera_id)
|
|---|
| 86 | ON DELETE CASCADE
|
|---|
| 87 | ON UPDATE CASCADE
|
|---|
| 88 | );
|
|---|
| 89 |
|
|---|
| 90 | CREATE TABLE Snimka
|
|---|
| 91 | (
|
|---|
| 92 | snimka_id INTEGER GENERATED ALWAYS AS IDENTITY,
|
|---|
| 93 | datum DATE DEFAULT CURRENT_DATE,
|
|---|
| 94 | url_adresa VARCHAR(255),
|
|---|
| 95 | arhivirana BOOLEAN DEFAULT FALSE,
|
|---|
| 96 | datum_arhiviranje DATE,
|
|---|
| 97 | kamera_id INTEGER,
|
|---|
| 98 | PRIMARY KEY (snimka_id),
|
|---|
| 99 | CONSTRAINT FK_Snimka_Kamera
|
|---|
| 100 | FOREIGN KEY (kamera_id) REFERENCES Kamera (kamera_id) ON DELETE CASCADE ON UPDATE CASCADE,
|
|---|
| 101 | CONSTRAINT CHK_Snimka_Url CHECK (url_adresa IS NULL OR TRIM(url_adresa) <> ''),
|
|---|
| 102 | CONSTRAINT CHK_Snimka_Datum CHECK (datum IS NULL OR datum <= CURRENT_DATE),
|
|---|
| 103 | CONSTRAINT CHK_Snimka_Arhiviranje CHECK (
|
|---|
| 104 | datum_arhiviranje IS NULL OR datum_arhiviranje >= datum
|
|---|
| 105 | )
|
|---|
| 106 | );
|
|---|
| 107 |
|
|---|
| 108 | CREATE TABLE Slika
|
|---|
| 109 | (
|
|---|
| 110 | slika_id INTEGER GENERATED ALWAYS AS IDENTITY,
|
|---|
| 111 | url VARCHAR(255),
|
|---|
| 112 | format VARCHAR(100),
|
|---|
| 113 | golemina INTEGER,
|
|---|
| 114 | datum_kreiranje DATE,
|
|---|
| 115 | snimka_id INTEGER,
|
|---|
| 116 | PRIMARY KEY (slika_id),
|
|---|
| 117 | CONSTRAINT FK_Slika_Snimka
|
|---|
| 118 | FOREIGN KEY (snimka_id) REFERENCES Snimka (snimka_id)
|
|---|
| 119 | ON DELETE CASCADE
|
|---|
| 120 | ON UPDATE CASCADE,
|
|---|
| 121 | CONSTRAINT CHK_Slika_Url CHECK (url IS NULL OR TRIM(url) <> ''),
|
|---|
| 122 | CONSTRAINT CHK_Slika_Golemina CHECK (golemina IS NULL OR golemina > 0),
|
|---|
| 123 | CONSTRAINT CHK_Slika_Format CHECK (format IS NULL OR format IN ('jpg', 'jpeg', 'png', 'bmp', 'gif')),
|
|---|
| 124 | CONSTRAINT CHK_Slika_Datum CHECK (datum_kreiranje IS NULL OR datum_kreiranje <= CURRENT_DATE)
|
|---|
| 125 | );
|
|---|
| 126 |
|
|---|
| 127 | CREATE TABLE TipPrekrsok
|
|---|
| 128 | (
|
|---|
| 129 | tip_prekrsok_id INTEGER GENERATED ALWAYS AS IDENTITY,
|
|---|
| 130 | ime VARCHAR(100),
|
|---|
| 131 | iznos INTEGER,
|
|---|
| 132 | PRIMARY KEY (tip_prekrsok_id),
|
|---|
| 133 | CONSTRAINT CHK_TipPrekrsok_Ime CHECK (ime IS NULL OR TRIM(ime) <> ''),
|
|---|
| 134 | CONSTRAINT CHK_TipPrekrsok_Iznos CHECK (iznos IS NULL OR iznos > 0)
|
|---|
| 135 | );
|
|---|
| 136 |
|
|---|
| 137 | CREATE TABLE Kazna
|
|---|
| 138 | (
|
|---|
| 139 | kazna_id INTEGER GENERATED ALWAYS AS IDENTITY,
|
|---|
| 140 | datum DATE DEFAULT CURRENT_DATE,
|
|---|
| 141 | status INTEGER DEFAULT 0,
|
|---|
| 142 | rok_na_plakanje DATE,
|
|---|
| 143 | iznos_za_plakanje INTEGER,
|
|---|
| 144 | PRIMARY KEY (kazna_id),
|
|---|
| 145 | CONSTRAINT CHK_Kazna_Status CHECK (status IS NULL OR status IN (0, 1, 2)),
|
|---|
| 146 | CONSTRAINT CHK_Kazna_Rok CHECK (rok_na_plakanje IS NULL OR datum IS NULL OR rok_na_plakanje >= datum),
|
|---|
| 147 | CONSTRAINT CHK_Kazna_Iznos CHECK (iznos_za_plakanje IS NULL OR iznos_za_plakanje > 0)
|
|---|
| 148 | );
|
|---|
| 149 |
|
|---|
| 150 | CREATE TABLE Prekrsok
|
|---|
| 151 | (
|
|---|
| 152 | prekrsok_id INTEGER GENERATED ALWAYS AS IDENTITY,
|
|---|
| 153 | opis VARCHAR(500),
|
|---|
| 154 | vreme TIME,
|
|---|
| 155 | status INTEGER DEFAULT 0,
|
|---|
| 156 | datum DATE,
|
|---|
| 157 | detektirana_brzina INTEGER,
|
|---|
| 158 | tip_prekrsok_id INTEGER,
|
|---|
| 159 | kamera_id INTEGER,
|
|---|
| 160 | kazna_id INTEGER,
|
|---|
| 161 | PRIMARY KEY (prekrsok_id),
|
|---|
| 162 | CONSTRAINT FK_Prekrsok_TipPrekrsok
|
|---|
| 163 | FOREIGN KEY (tip_prekrsok_id) REFERENCES TipPrekrsok (tip_prekrsok_id)
|
|---|
| 164 | ON DELETE RESTRICT
|
|---|
| 165 | ON UPDATE CASCADE,
|
|---|
| 166 | CONSTRAINT FK_Prekrsok_Kamera
|
|---|
| 167 | FOREIGN KEY (kamera_id) REFERENCES Kamera (kamera_id)
|
|---|
| 168 | ON DELETE RESTRICT
|
|---|
| 169 | ON UPDATE CASCADE,
|
|---|
| 170 | CONSTRAINT FK_Prekrsok_Kazna
|
|---|
| 171 | FOREIGN KEY (kazna_id) REFERENCES Kazna (kazna_id)
|
|---|
| 172 | ON DELETE RESTRICT
|
|---|
| 173 | ON UPDATE CASCADE,
|
|---|
| 174 | CONSTRAINT CHK_Prekrsok_Status CHECK (status IS NULL OR status IN (0, 1, 2, 3)),
|
|---|
| 175 | CONSTRAINT CHK_Prekrsok_Datum CHECK (datum IS NULL OR datum <= CURRENT_DATE),
|
|---|
| 176 | CONSTRAINT CHK_Prekrsok_Brzina CHECK (detektirana_brzina IS NULL OR detektirana_brzina > 0)
|
|---|
| 177 | );
|
|---|
| 178 |
|
|---|
| 179 | CREATE TABLE Plakanje
|
|---|
| 180 | (
|
|---|
| 181 | plakanje_id INTEGER GENERATED ALWAYS AS IDENTITY,
|
|---|
| 182 | metod INTEGER DEFAULT 1,
|
|---|
| 183 | datum DATE DEFAULT CURRENT_DATE,
|
|---|
| 184 | kazna_id INTEGER UNIQUE,
|
|---|
| 185 | PRIMARY KEY (plakanje_id),
|
|---|
| 186 | CONSTRAINT FK_Plakanje_Kazna
|
|---|
| 187 | FOREIGN KEY (kazna_id) REFERENCES Kazna (kazna_id)
|
|---|
| 188 | ON DELETE RESTRICT
|
|---|
| 189 | ON UPDATE CASCADE,
|
|---|
| 190 | CONSTRAINT CHK_Plakanje_Metod CHECK (metod IS NULL OR metod IN (1, 2, 3)),
|
|---|
| 191 | CONSTRAINT CHK_Plakanje_Datum CHECK (datum IS NULL OR datum <= CURRENT_DATE)
|
|---|
| 192 | );
|
|---|
| 193 |
|
|---|
| 194 | --
|
|---|
| 195 | -- 1-kesh
|
|---|
| 196 | -- 2-kartichka
|
|---|
| 197 | -- 3-online
|
|---|
| 198 |
|
|---|
| 199 |
|
|---|
| 200 | CREATE TABLE Gragjanin
|
|---|
| 201 | (
|
|---|
| 202 | embg CHAR(13) PRIMARY KEY,
|
|---|
| 203 | ime VARCHAR(100),
|
|---|
| 204 | prezime VARCHAR(100),
|
|---|
| 205 | adresa VARCHAR(150),
|
|---|
| 206 | grad VARCHAR(100),
|
|---|
| 207 | telefonski_broj VARCHAR(20),
|
|---|
| 208 | datum_ragjanje DATE,
|
|---|
| 209 |
|
|---|
| 210 | CONSTRAINT CHK_Gragjanin_Embg CHECK (embg > 0),
|
|---|
| 211 | CONSTRAINT CHK_Gragjanin_Ime CHECK (ime IS NULL OR TRIM(ime) <> ''),
|
|---|
| 212 | CONSTRAINT CHK_Gragjanin_Prezime CHECK (prezime IS NULL OR TRIM(prezime) <> ''),
|
|---|
| 213 | CONSTRAINT CHK_Gragjanin_Adresa CHECK (adresa IS NULL OR TRIM(adresa) <> ''),
|
|---|
| 214 | CONSTRAINT CHK_Gragjanin_Grad CHECK (grad IS NULL OR TRIM(grad) <> ''),
|
|---|
| 215 | CONSTRAINT CHK_Gragjanin_Telefon CHECK (telefonski_broj IS NULL OR TRIM(telefonski_broj) <> ''),
|
|---|
| 216 | CONSTRAINT CHK_Gragjanin_Datum CHECK (datum_ragjanje IS NULL OR datum_ragjanje <= CURRENT_DATE)
|
|---|
| 217 | );
|
|---|
| 218 |
|
|---|
| 219 | CREATE TABLE Sopstvenik
|
|---|
| 220 | (
|
|---|
| 221 | embg CHAR(13),
|
|---|
| 222 | PRIMARY KEY (embg),
|
|---|
| 223 | CONSTRAINT FK_Sopstvenik_Gragjanin
|
|---|
| 224 | FOREIGN KEY (embg) REFERENCES Gragjanin (embg) ON DELETE RESTRICT ON UPDATE CASCADE
|
|---|
| 225 | );
|
|---|
| 226 |
|
|---|
| 227 | CREATE TABLE Vozacka
|
|---|
| 228 | (
|
|---|
| 229 | vozacka_id INTEGER GENERATED ALWAYS AS IDENTITY,
|
|---|
| 230 | vozacki_broj BIGINT,
|
|---|
| 231 | datum_izdavanje DATE,
|
|---|
| 232 | datum_istekuvanje DATE,
|
|---|
| 233 | status INTEGER,
|
|---|
| 234 | embg CHAR(13) UNIQUE,
|
|---|
| 235 | PRIMARY KEY (vozacka_id),
|
|---|
| 236 | CONSTRAINT FK_Vozacka_Sopstvenik
|
|---|
| 237 | FOREIGN KEY (embg) REFERENCES Sopstvenik (embg) ON DELETE RESTRICT ON UPDATE CASCADE,
|
|---|
| 238 | CONSTRAINT CHK_Vozacka_Broj CHECK (vozacki_broj IS NULL OR vozacki_broj > 0),
|
|---|
| 239 | CONSTRAINT CHK_Vozacka_Status CHECK (status IS NULL OR status IN (0, 1, 2)),
|
|---|
| 240 | CONSTRAINT CHK_Vozacka_Datumi CHECK (
|
|---|
| 241 | datum_izdavanje IS NULL OR datum_istekuvanje IS NULL OR datum_istekuvanje > datum_izdavanje
|
|---|
| 242 | )
|
|---|
| 243 | );
|
|---|
| 244 |
|
|---|
| 245 | CREATE TABLE Kategorija
|
|---|
| 246 | (
|
|---|
| 247 | kategorija_id INTEGER GENERATED ALWAYS AS IDENTITY,
|
|---|
| 248 | ime VARCHAR(100),
|
|---|
| 249 | opis VARCHAR(255),
|
|---|
| 250 | PRIMARY KEY (kategorija_id),
|
|---|
| 251 | CONSTRAINT CHK_Kategorija_Ime CHECK (ime IS NULL OR TRIM(ime) <> ''),
|
|---|
| 252 | CONSTRAINT CHK_Kategorija_Opis CHECK (opis IS NULL OR TRIM(opis) <> '')
|
|---|
| 253 | );
|
|---|
| 254 |
|
|---|
| 255 | CREATE TABLE Vozacka_Kategorija
|
|---|
| 256 | (
|
|---|
| 257 | vozacka_id INTEGER,
|
|---|
| 258 | kategorija_id INTEGER,
|
|---|
| 259 | PRIMARY KEY (vozacka_id, kategorija_id),
|
|---|
| 260 | CONSTRAINT FK_VK_Vozacka
|
|---|
| 261 | FOREIGN KEY (vozacka_id) REFERENCES Vozacka (vozacka_id) ON DELETE CASCADE ON UPDATE CASCADE,
|
|---|
| 262 | CONSTRAINT FK_VK_Kategorija
|
|---|
| 263 | FOREIGN KEY (kategorija_id) REFERENCES Kategorija (kategorija_id)
|
|---|
| 264 | ON DELETE CASCADE
|
|---|
| 265 | ON UPDATE CASCADE
|
|---|
| 266 | );
|
|---|
| 267 |
|
|---|
| 268 | CREATE TABLE Tip
|
|---|
| 269 | (
|
|---|
| 270 | tip_id INTEGER GENERATED ALWAYS AS IDENTITY,
|
|---|
| 271 | ime VARCHAR(100),
|
|---|
| 272 | PRIMARY KEY (tip_id),
|
|---|
| 273 | CONSTRAINT CHK_Tip_Ime CHECK (ime IS NULL OR TRIM(ime) <> '')
|
|---|
| 274 | );
|
|---|
| 275 |
|
|---|
| 276 | CREATE TABLE Vozilo
|
|---|
| 277 | (
|
|---|
| 278 | vozilo_id INTEGER GENERATED ALWAYS AS IDENTITY,
|
|---|
| 279 | marka VARCHAR(100),
|
|---|
| 280 | broj_sasija BIGINT,
|
|---|
| 281 | model VARCHAR(100),
|
|---|
| 282 | registarska_oznaka VARCHAR(20),
|
|---|
| 283 | boja VARCHAR(50),
|
|---|
| 284 | tip_id INTEGER,
|
|---|
| 285 | PRIMARY KEY (vozilo_id),
|
|---|
| 286 | CONSTRAINT FK_Vozilo_Tip
|
|---|
| 287 | FOREIGN KEY (tip_id) REFERENCES Tip (tip_id) ON DELETE SET NULL ON UPDATE CASCADE,
|
|---|
| 288 | CONSTRAINT UQ_Vozilo_Registarska UNIQUE (registarska_oznaka),
|
|---|
| 289 | CONSTRAINT CHK_Vozilo_Marka CHECK (marka IS NULL OR TRIM(marka) <> ''),
|
|---|
| 290 | CONSTRAINT CHK_Vozilo_Model CHECK (model IS NULL OR TRIM(model) <> ''),
|
|---|
| 291 | CONSTRAINT CHK_Vozilo_Boja CHECK (boja IS NULL OR TRIM(boja) <> ''),
|
|---|
| 292 | CONSTRAINT CHK_Vozilo_Registarska CHECK (registarska_oznaka IS NULL OR TRIM(registarska_oznaka) <> ''),
|
|---|
| 293 | CONSTRAINT CHK_Vozilo_BrojSasija CHECK (broj_sasija IS NULL OR broj_sasija > 0)
|
|---|
| 294 | );
|
|---|
| 295 |
|
|---|
| 296 | CREATE TABLE Registracija
|
|---|
| 297 | (
|
|---|
| 298 | registracija_id INTEGER GENERATED ALWAYS AS IDENTITY,
|
|---|
| 299 | broj INTEGER,
|
|---|
| 300 | mesto INTEGER,
|
|---|
| 301 | datum DATE,
|
|---|
| 302 | datum_istekuvanje DATE,
|
|---|
| 303 | sopstvenikEmbg BIGINT,
|
|---|
| 304 | Vozilovozilo_id INTEGER,
|
|---|
| 305 | PRIMARY KEY (registracija_id),
|
|---|
| 306 | CONSTRAINT FK_Registracija_Sopstvenik
|
|---|
| 307 | FOREIGN KEY (sopstvenikEmbg) REFERENCES Sopstvenik (embg)
|
|---|
| 308 | ON DELETE RESTRICT
|
|---|
| 309 | ON UPDATE CASCADE,
|
|---|
| 310 | CONSTRAINT FK_Registracija_Vozilo
|
|---|
| 311 | FOREIGN KEY (Vozilovozilo_id) REFERENCES Vozilo (vozilo_id) ON DELETE RESTRICT ON UPDATE CASCADE,
|
|---|
| 312 | CONSTRAINT CHK_Registracija_Broj CHECK (broj IS NULL OR broj > 0),
|
|---|
| 313 | CONSTRAINT CHK_Registracija_Mesto CHECK (mesto IS NULL OR mesto > 0),
|
|---|
| 314 | CONSTRAINT CHK_Registracija_Datum CHECK (datum IS NULL OR datum <= CURRENT_DATE),
|
|---|
| 315 | CONSTRAINT CHK_Registracija_Istek CHECK (
|
|---|
| 316 | datum_istekuvanje IS NULL OR datum IS NULL OR datum_istekuvanje >= datum
|
|---|
| 317 | )
|
|---|
| 318 | );
|
|---|
| 319 |
|
|---|
| 320 | CREATE TABLE Korisnik
|
|---|
| 321 | (
|
|---|
| 322 | korisnik_id INTEGER GENERATED ALWAYS AS IDENTITY,
|
|---|
| 323 | mail VARCHAR(100),
|
|---|
| 324 | hashed_password VARCHAR(255),
|
|---|
| 325 | embg CHAR(13),
|
|---|
| 326 | PRIMARY KEY (korisnik_id),
|
|---|
| 327 | CONSTRAINT FK_Korisnik_Gragjanin
|
|---|
| 328 | FOREIGN KEY (embg) REFERENCES Gragjanin (embg) ON DELETE RESTRICT ON UPDATE CASCADE,
|
|---|
| 329 | CONSTRAINT UQ_Korisnik_Embg UNIQUE (embg),
|
|---|
| 330 | CONSTRAINT UQ_Korisnik_Mail UNIQUE (mail),
|
|---|
| 331 | CONSTRAINT CHK_Korisnik_Mail CHECK (mail IS NULL OR mail LIKE '%@%'),
|
|---|
| 332 | CONSTRAINT CHK_Korisnik_Password CHECK (hashed_password IS NULL OR LENGTH(hashed_password) >= 8)
|
|---|
| 333 | );
|
|---|
| 334 |
|
|---|
| 335 | CREATE TABLE Uloga
|
|---|
| 336 | (
|
|---|
| 337 | uloga_id INTEGER GENERATED ALWAYS AS IDENTITY,
|
|---|
| 338 | ime VARCHAR(100),
|
|---|
| 339 | PRIMARY KEY (uloga_id),
|
|---|
| 340 | CONSTRAINT CHK_Uloga_Ime CHECK (ime IS NULL OR TRIM(ime) <> '')
|
|---|
| 341 | );
|
|---|
| 342 |
|
|---|
| 343 | CREATE TABLE Korisnik_Uloga
|
|---|
| 344 | (
|
|---|
| 345 | korisnik_id INTEGER,
|
|---|
| 346 | uloga_id INTEGER,
|
|---|
| 347 | PRIMARY KEY (korisnik_id, uloga_id),
|
|---|
| 348 | CONSTRAINT FK_KU_Korisnik
|
|---|
| 349 | FOREIGN KEY (korisnik_id) REFERENCES Korisnik (korisnik_id) ON DELETE CASCADE ON UPDATE CASCADE,
|
|---|
| 350 | CONSTRAINT FK_KU_Uloga
|
|---|
| 351 | FOREIGN KEY (uloga_id) REFERENCES Uloga (uloga_id) ON DELETE CASCADE ON UPDATE CASCADE
|
|---|
| 352 | );
|
|---|
| 353 |
|
|---|
| 354 | CREATE TABLE Administrator
|
|---|
| 355 | (
|
|---|
| 356 | administrator_id INTEGER GENERATED ALWAYS AS IDENTITY,
|
|---|
| 357 | datum_vrabotuvanje DATE,
|
|---|
| 358 | broj_na_licenca INTEGER,
|
|---|
| 359 | oddel VARCHAR(100),
|
|---|
| 360 | korisnik_id INTEGER UNIQUE,
|
|---|
| 361 | PRIMARY KEY (administrator_id),
|
|---|
| 362 | CONSTRAINT FK_Administrator_Korisnik
|
|---|
| 363 | FOREIGN KEY (korisnik_id) REFERENCES Korisnik (korisnik_id) ON DELETE RESTRICT ON UPDATE CASCADE,
|
|---|
| 364 | CONSTRAINT CHK_Administrator_Licenca CHECK (broj_na_licenca IS NULL OR broj_na_licenca > 0),
|
|---|
| 365 | CONSTRAINT CHK_Administrator_Oddel CHECK (oddel IS NULL OR TRIM(oddel) <> ''),
|
|---|
| 366 | CONSTRAINT CHK_Administrator_Datum CHECK (datum_vrabotuvanje IS NULL OR datum_vrabotuvanje <= CURRENT_DATE)
|
|---|
| 367 | );
|
|---|
| 368 |
|
|---|
| 369 | CREATE TABLE Zalba
|
|---|
| 370 | (
|
|---|
| 371 | zalba_id INTEGER GENERATED ALWAYS AS IDENTITY,
|
|---|
| 372 | sodrzina VARCHAR(500),
|
|---|
| 373 | datum_na_podnesuvanje DATE,
|
|---|
| 374 | status VARCHAR(100),
|
|---|
| 375 | administrator_id INTEGER,
|
|---|
| 376 | korisnik_id INTEGER,
|
|---|
| 377 | prekrsok_id INTEGER,
|
|---|
| 378 | PRIMARY KEY (zalba_id),
|
|---|
| 379 | CONSTRAINT FK_Zalba_Administrator
|
|---|
| 380 | FOREIGN KEY (administrator_id) REFERENCES Administrator (administrator_id) ON DELETE SET NULL ON UPDATE CASCADE,
|
|---|
| 381 | CONSTRAINT FK_Zalba_Korisnik
|
|---|
| 382 | FOREIGN KEY (korisnik_id) REFERENCES Korisnik (korisnik_id) ON DELETE RESTRICT ON UPDATE CASCADE,
|
|---|
| 383 | CONSTRAINT FK_Zalba_Prekrsok
|
|---|
| 384 | FOREIGN KEY (prekrsok_id) REFERENCES Prekrsok (prekrsok_id) ON DELETE RESTRICT ON UPDATE CASCADE,
|
|---|
| 385 | CONSTRAINT CHK_Zalba_Sodrzina CHECK (sodrzina IS NULL OR TRIM(sodrzina) <> ''),
|
|---|
| 386 | CONSTRAINT CHK_Zalba_Status CHECK (
|
|---|
| 387 | status IS NULL OR status IN ('podnesena', 'vo_postapka', 'prifatena', 'odbijena')
|
|---|
| 388 | ),
|
|---|
| 389 | CONSTRAINT CHK_Zalba_Datum CHECK (datum_na_podnesuvanje IS NULL OR datum_na_podnesuvanje <= CURRENT_DATE)
|
|---|
| 390 | );
|
|---|
| 391 |
|
|---|
| 392 | CREATE TABLE Notifikacija
|
|---|
| 393 | (
|
|---|
| 394 | notifikacija_id INTEGER GENERATED ALWAYS AS IDENTITY,
|
|---|
| 395 | sodrzina VARCHAR(500),
|
|---|
| 396 | datum_isprakjanje DATE DEFAULT CURRENT_DATE,
|
|---|
| 397 | procitana BOOLEAN DEFAULT FALSE,
|
|---|
| 398 | slika_id INTEGER,
|
|---|
| 399 | korisnik_id INTEGER,
|
|---|
| 400 | PRIMARY KEY (notifikacija_id),
|
|---|
| 401 | CONSTRAINT FK_Notifikacija_Slika
|
|---|
| 402 | FOREIGN KEY (slika_id) REFERENCES Slika (slika_id) ON DELETE SET NULL ON UPDATE CASCADE,
|
|---|
| 403 | CONSTRAINT FK_Notifikacija_Korisnik
|
|---|
| 404 | FOREIGN KEY (korisnik_id) REFERENCES Korisnik (korisnik_id) ON DELETE SET NULL ON UPDATE CASCADE,
|
|---|
| 405 | CONSTRAINT CHK_Notifikacija_Sodrzina CHECK (sodrzina IS NULL OR TRIM(sodrzina) <> ''),
|
|---|
| 406 | CONSTRAINT CHK_Notifikacija_Datum CHECK (datum_isprakjanje IS NULL OR datum_isprakjanje <= CURRENT_DATE)
|
|---|
| 407 | );
|
|---|
| 408 |
|
|---|
| 409 | CREATE TABLE Notifikacija_Kazna
|
|---|
| 410 | (
|
|---|
| 411 | notifikacija_id INTEGER,
|
|---|
| 412 | kazna_id INTEGER,
|
|---|
| 413 | PRIMARY KEY (notifikacija_id, kazna_id),
|
|---|
| 414 | CONSTRAINT FK_NK_Notifikacija
|
|---|
| 415 | FOREIGN KEY (notifikacija_id) REFERENCES Notifikacija (notifikacija_id) ON DELETE CASCADE ON UPDATE CASCADE,
|
|---|
| 416 | CONSTRAINT FK_NK_Kazna
|
|---|
| 417 | FOREIGN KEY (kazna_id) REFERENCES Kazna (kazna_id) ON DELETE CASCADE ON UPDATE CASCADE
|
|---|
| 418 | );
|
|---|
| 419 |
|
|---|
| 420 | CREATE TABLE Prekrsok_Vozilo
|
|---|
| 421 | (
|
|---|
| 422 | prekrsok_id INTEGER,
|
|---|
| 423 | vozilo_id INTEGER,
|
|---|
| 424 | PRIMARY KEY (prekrsok_id, vozilo_id),
|
|---|
| 425 | CONSTRAINT FK_PV_Prekrsok
|
|---|
| 426 | FOREIGN KEY (prekrsok_id) REFERENCES Prekrsok (prekrsok_id) ON DELETE CASCADE ON UPDATE CASCADE,
|
|---|
| 427 | CONSTRAINT FK_PV_Vozilo
|
|---|
| 428 | FOREIGN KEY (vozilo_id) REFERENCES Vozilo (vozilo_id) ON DELETE CASCADE ON UPDATE CASCADE
|
|---|
| 429 | );
|
|---|
| 430 |
|
|---|
| 431 | CREATE TABLE Sopstvenik_Vozilo
|
|---|
| 432 | (
|
|---|
| 433 | embg BIGINT,
|
|---|
| 434 | vozilo_id INTEGER,
|
|---|
| 435 | PRIMARY KEY (embg, vozilo_id),
|
|---|
| 436 | CONSTRAINT FK_SV_Sopstvenik
|
|---|
| 437 | FOREIGN KEY (embg) REFERENCES Sopstvenik (embg) ON DELETE CASCADE ON UPDATE CASCADE,
|
|---|
| 438 | CONSTRAINT FK_SV_Vozilo
|
|---|
| 439 | FOREIGN KEY (vozilo_id) REFERENCES Vozilo (vozilo_id) ON DELETE CASCADE ON UPDATE CASCADE
|
|---|
| 440 | );
|
|---|
| 441 |
|
|---|
| 442 | CREATE TABLE Prekrsok_Storitel
|
|---|
| 443 | (
|
|---|
| 444 | prekrsok_id INTEGER,
|
|---|
| 445 | storitel_embg BIGINT,
|
|---|
| 446 | PRIMARY KEY (prekrsok_id, storitel_embg),
|
|---|
| 447 | CONSTRAINT FK_PS_Prekrsok
|
|---|
| 448 | FOREIGN KEY (prekrsok_id) REFERENCES Prekrsok (prekrsok_id) ON DELETE CASCADE ON UPDATE CASCADE,
|
|---|
| 449 | CONSTRAINT FK_PS_Gragjanin
|
|---|
| 450 | FOREIGN KEY (storitel_embg) REFERENCES Gragjanin (embg) ON DELETE RESTRICT ON UPDATE CASCADE
|
|---|
| 451 | );
|
|---|
| 452 |
|
|---|
| 453 | CREATE TABLE PregledSnimka
|
|---|
| 454 | (
|
|---|
| 455 | administrator_id INTEGER,
|
|---|
| 456 | snimka_id INTEGER,
|
|---|
| 457 | status INTEGER DEFAULT 0,
|
|---|
| 458 | PRIMARY KEY (administrator_id, snimka_id),
|
|---|
| 459 | CONSTRAINT FK_PregledSnimka_Administrator
|
|---|
| 460 | FOREIGN KEY (administrator_id) REFERENCES Administrator (administrator_id) ON DELETE CASCADE ON UPDATE CASCADE,
|
|---|
| 461 | CONSTRAINT FK_PregledSnimka_Snimka
|
|---|
| 462 | FOREIGN KEY (snimka_id) REFERENCES Snimka (snimka_id) ON DELETE CASCADE ON UPDATE CASCADE,
|
|---|
| 463 | CONSTRAINT CHK_PregledSnimka_Status CHECK (status IS NULL OR status IN (0, 1, 2))
|
|---|
| 464 | ); |
|---|