CREATE TABLE Zona
(
    zona_id          INTEGER GENERATED ALWAYS AS IDENTITY,
    ime              VARCHAR(100),
    dozvolena_brzina INTEGER,
    opstina          VARCHAR(100),
    PRIMARY KEY (zona_id),
    CONSTRAINT CHK_Zona_Brzina CHECK (dozvolena_brzina IS NULL OR dozvolena_brzina > 0),
    CONSTRAINT CHK_Zona_Ime CHECK (ime IS NULL OR TRIM(ime) <> ''),
    CONSTRAINT CHK_Zona_Opstina CHECK (opstina IS NULL OR TRIM(opstina) <> '')
);

CREATE TABLE Lokacija
(
    lokacija_id INTEGER GENERATED ALWAYS AS IDENTITY,
    ulica       VARCHAR(100),
    latitude    DECIMAL(9, 6),
    longitude   DECIMAL(9, 6),
    zona_id     INTEGER,
    PRIMARY KEY (lokacija_id),
    CONSTRAINT FK_Lokacija_Zona
        FOREIGN KEY (zona_id) REFERENCES Zona (zona_id) ON DELETE SET NULL ON UPDATE CASCADE,
    CONSTRAINT CHK_Lokacija_Ulica
        CHECK (ulica IS NULL OR TRIM(ulica) <> ''),
    CONSTRAINT CHK_Lokacija_Lat
        CHECK (latitude IS NULL OR latitude BETWEEN -90 AND 90),
    CONSTRAINT CHK_Lokacija_Long
        CHECK (longitude IS NULL OR longitude BETWEEN -180 AND 180)
);

CREATE TABLE TipKamera
(
    tip_kamera_id     INTEGER GENERATED ALWAYS AS IDENTITY,
    ime               VARCHAR(100),
    opis              VARCHAR(255),
    max_opseg         INTEGER,
    multifunkcionalna BOOLEAN,
    PRIMARY KEY (tip_kamera_id),
    CONSTRAINT CHK_TipKamera_Ime CHECK (ime IS NULL OR TRIM(ime) <> ''),
    CONSTRAINT CHK_TipKamera_MaxOpseg CHECK (max_opseg IS NULL OR max_opseg > 0)
);

CREATE TABLE Kamera
(
    kamera_id             INTEGER GENERATED ALWAYS AS IDENTITY,
    datum_instalacija     DATE         DEFAULT CURRENT_DATE,
    status                VARCHAR(100) DEFAULT 'aktivna',
    seriski_broj          VARCHAR(100),
    datum_posleden_servis DATE,
    lokacija_id           INTEGER,
    tip_kamera_id         INTEGER,
    PRIMARY KEY (kamera_id),
    CONSTRAINT FK_Kamera_Lokacija
        FOREIGN KEY (lokacija_id) REFERENCES Lokacija (lokacija_id)
            ON DELETE SET NULL
            ON UPDATE CASCADE,
    CONSTRAINT FK_Kamera_TipKamera
        FOREIGN KEY (tip_kamera_id) REFERENCES TipKamera (tip_kamera_id) ON DELETE RESTRICT ON UPDATE CASCADE,
    CONSTRAINT UQ_Kamera_SeriskiBroj UNIQUE (seriski_broj),
    CONSTRAINT CHK_Kamera_Status CHECK (status IS NULL OR status IN ('aktivna', 'neaktivna', 'servis')),
    CONSTRAINT CHK_Kamera_DatumInstalacija CHECK (datum_instalacija IS NULL OR datum_instalacija <= CURRENT_DATE),
    CONSTRAINT CHK_Kamera_SeriskiBroj CHECK (seriski_broj IS NULL OR TRIM(seriski_broj) <> ''),
    CONSTRAINT CHK_Kamera_PosledenServis CHECK (
        datum_posleden_servis IS NULL OR datum_posleden_servis <= CURRENT_DATE
        )
);

CREATE TABLE MrezhnaKonekcija
(
    mrezna_konekcija_id INTEGER GENERATED ALWAYS AS IDENTITY,
    ime                 VARCHAR(50),
    opis                VARCHAR(100),
    PRIMARY KEY (mrezna_konekcija_id),
    CONSTRAINT CHK_MrezhnaKonekcija_Ime CHECK (ime IS NULL OR TRIM(ime) <> '')
);

CREATE TABLE MrezhnaKonekcijaKamera
(
    mrezna_konekcija_id INTEGER,
    kamera_id           INTEGER,
    PRIMARY KEY (mrezna_konekcija_id, kamera_id),
    CONSTRAINT FK_MKK_MrezhnaKonekcija
        FOREIGN KEY (mrezna_konekcija_id) REFERENCES MrezhnaKonekcija (mrezna_konekcija_id) ON DELETE CASCADE ON UPDATE CASCADE,
    CONSTRAINT FK_MKK_Kamera
        FOREIGN KEY (kamera_id) REFERENCES Kamera (kamera_id)
            ON DELETE CASCADE
            ON UPDATE CASCADE
);

CREATE TABLE Snimka
(
    snimka_id         INTEGER GENERATED ALWAYS AS IDENTITY,
    datum             DATE    DEFAULT CURRENT_DATE,
    url_adresa        VARCHAR(255),
    arhivirana        BOOLEAN DEFAULT FALSE,
    datum_arhiviranje DATE,
    kamera_id         INTEGER,
    PRIMARY KEY (snimka_id),
    CONSTRAINT FK_Snimka_Kamera
        FOREIGN KEY (kamera_id) REFERENCES Kamera (kamera_id) ON DELETE CASCADE ON UPDATE CASCADE,
    CONSTRAINT CHK_Snimka_Url CHECK (url_adresa IS NULL OR TRIM(url_adresa) <> ''),
    CONSTRAINT CHK_Snimka_Datum CHECK (datum IS NULL OR datum <= CURRENT_DATE),
    CONSTRAINT CHK_Snimka_Arhiviranje CHECK (
        datum_arhiviranje IS NULL OR datum_arhiviranje >= datum
        )
);

CREATE TABLE Slika
(
    slika_id        INTEGER GENERATED ALWAYS AS IDENTITY,
    url             VARCHAR(255),
    format          VARCHAR(100),
    golemina        INTEGER,
    datum_kreiranje DATE,
    snimka_id       INTEGER,
    PRIMARY KEY (slika_id),
    CONSTRAINT FK_Slika_Snimka
        FOREIGN KEY (snimka_id) REFERENCES Snimka (snimka_id)
            ON DELETE CASCADE
            ON UPDATE CASCADE,
    CONSTRAINT CHK_Slika_Url CHECK (url IS NULL OR TRIM(url) <> ''),
    CONSTRAINT CHK_Slika_Golemina CHECK (golemina IS NULL OR golemina > 0),
    CONSTRAINT CHK_Slika_Format CHECK (format IS NULL OR format IN ('jpg', 'jpeg', 'png', 'bmp', 'gif')),
    CONSTRAINT CHK_Slika_Datum CHECK (datum_kreiranje IS NULL OR datum_kreiranje <= CURRENT_DATE)
);

CREATE TABLE TipPrekrsok
(
    tip_prekrsok_id INTEGER GENERATED ALWAYS AS IDENTITY,
    ime             VARCHAR(100),
    iznos           INTEGER,
    PRIMARY KEY (tip_prekrsok_id),
    CONSTRAINT CHK_TipPrekrsok_Ime CHECK (ime IS NULL OR TRIM(ime) <> ''),
    CONSTRAINT CHK_TipPrekrsok_Iznos CHECK (iznos IS NULL OR iznos > 0)
);

CREATE TABLE Kazna
(
    kazna_id          INTEGER GENERATED ALWAYS AS IDENTITY,
    datum             DATE    DEFAULT CURRENT_DATE,
    status            INTEGER DEFAULT 0,
    rok_na_plakanje   DATE,
    iznos_za_plakanje INTEGER,
    PRIMARY KEY (kazna_id),
    CONSTRAINT CHK_Kazna_Status CHECK (status IS NULL OR status IN (0, 1, 2)),
    CONSTRAINT CHK_Kazna_Rok CHECK (rok_na_plakanje IS NULL OR datum IS NULL OR rok_na_plakanje >= datum),
    CONSTRAINT CHK_Kazna_Iznos CHECK (iznos_za_plakanje IS NULL OR iznos_za_plakanje > 0)
);

CREATE TABLE Prekrsok
(
    prekrsok_id        INTEGER GENERATED ALWAYS AS IDENTITY,
    opis               VARCHAR(500),
    vreme              TIME,
    status             INTEGER DEFAULT 0,
    datum              DATE,
    detektirana_brzina INTEGER,
    tip_prekrsok_id    INTEGER,
    kamera_id          INTEGER,
    kazna_id           INTEGER,
    PRIMARY KEY (prekrsok_id),
    CONSTRAINT FK_Prekrsok_TipPrekrsok
        FOREIGN KEY (tip_prekrsok_id) REFERENCES TipPrekrsok (tip_prekrsok_id)
            ON DELETE RESTRICT
            ON UPDATE CASCADE,
    CONSTRAINT FK_Prekrsok_Kamera
        FOREIGN KEY (kamera_id) REFERENCES Kamera (kamera_id)
            ON DELETE RESTRICT
            ON UPDATE CASCADE,
    CONSTRAINT FK_Prekrsok_Kazna
        FOREIGN KEY (kazna_id) REFERENCES Kazna (kazna_id)
            ON DELETE RESTRICT
            ON UPDATE CASCADE,
    CONSTRAINT CHK_Prekrsok_Status CHECK (status IS NULL OR status IN (0, 1, 2, 3)),
    CONSTRAINT CHK_Prekrsok_Datum CHECK (datum IS NULL OR datum <= CURRENT_DATE),
    CONSTRAINT CHK_Prekrsok_Brzina CHECK (detektirana_brzina IS NULL OR detektirana_brzina > 0)
);

CREATE TABLE Plakanje
(
    plakanje_id INTEGER GENERATED ALWAYS AS IDENTITY,
    metod       INTEGER DEFAULT 1,
    datum       DATE    DEFAULT CURRENT_DATE,
    kazna_id    INTEGER UNIQUE,
    PRIMARY KEY (plakanje_id),
    CONSTRAINT FK_Plakanje_Kazna
        FOREIGN KEY (kazna_id) REFERENCES Kazna (kazna_id)
            ON DELETE RESTRICT
            ON UPDATE CASCADE,
    CONSTRAINT CHK_Plakanje_Metod CHECK (metod IS NULL OR metod IN (1, 2, 3)),
    CONSTRAINT CHK_Plakanje_Datum CHECK (datum IS NULL OR datum <= CURRENT_DATE)
);

--
-- 1-kesh
-- 2-kartichka
-- 3-online


CREATE TABLE Gragjanin
(
    embg            CHAR(13) PRIMARY KEY,
    ime             VARCHAR(100),
    prezime         VARCHAR(100),
    adresa          VARCHAR(150),
    grad            VARCHAR(100),
    telefonski_broj VARCHAR(20),
    datum_ragjanje  DATE,

    CONSTRAINT CHK_Gragjanin_Embg CHECK (embg > 0),
    CONSTRAINT CHK_Gragjanin_Ime CHECK (ime IS NULL OR TRIM(ime) <> ''),
    CONSTRAINT CHK_Gragjanin_Prezime CHECK (prezime IS NULL OR TRIM(prezime) <> ''),
    CONSTRAINT CHK_Gragjanin_Adresa CHECK (adresa IS NULL OR TRIM(adresa) <> ''),
    CONSTRAINT CHK_Gragjanin_Grad CHECK (grad IS NULL OR TRIM(grad) <> ''),
    CONSTRAINT CHK_Gragjanin_Telefon CHECK (telefonski_broj IS NULL OR TRIM(telefonski_broj) <> ''),
    CONSTRAINT CHK_Gragjanin_Datum CHECK (datum_ragjanje IS NULL OR datum_ragjanje <= CURRENT_DATE)
);

CREATE TABLE Sopstvenik
(
    embg CHAR(13),
    PRIMARY KEY (embg),
    CONSTRAINT FK_Sopstvenik_Gragjanin
        FOREIGN KEY (embg) REFERENCES Gragjanin (embg) ON DELETE RESTRICT ON UPDATE CASCADE
);

CREATE TABLE Vozacka
(
    vozacka_id        INTEGER GENERATED ALWAYS AS IDENTITY,
    vozacki_broj      BIGINT,
    datum_izdavanje   DATE,
    datum_istekuvanje DATE,
    status            INTEGER,
    embg              CHAR(13) UNIQUE,
    PRIMARY KEY (vozacka_id),
    CONSTRAINT FK_Vozacka_Sopstvenik
        FOREIGN KEY (embg) REFERENCES Sopstvenik (embg) ON DELETE RESTRICT ON UPDATE CASCADE,
    CONSTRAINT CHK_Vozacka_Broj CHECK (vozacki_broj IS NULL OR vozacki_broj > 0),
    CONSTRAINT CHK_Vozacka_Status CHECK (status IS NULL OR status IN (0, 1, 2)),
    CONSTRAINT CHK_Vozacka_Datumi CHECK (
        datum_izdavanje IS NULL OR datum_istekuvanje IS NULL OR datum_istekuvanje > datum_izdavanje
        )
);

CREATE TABLE Kategorija
(
    kategorija_id INTEGER GENERATED ALWAYS AS IDENTITY,
    ime           VARCHAR(100),
    opis          VARCHAR(255),
    PRIMARY KEY (kategorija_id),
    CONSTRAINT CHK_Kategorija_Ime CHECK (ime IS NULL OR TRIM(ime) <> ''),
    CONSTRAINT CHK_Kategorija_Opis CHECK (opis IS NULL OR TRIM(opis) <> '')
);

CREATE TABLE Vozacka_Kategorija
(
    vozacka_id    INTEGER,
    kategorija_id INTEGER,
    PRIMARY KEY (vozacka_id, kategorija_id),
    CONSTRAINT FK_VK_Vozacka
        FOREIGN KEY (vozacka_id) REFERENCES Vozacka (vozacka_id) ON DELETE CASCADE ON UPDATE CASCADE,
    CONSTRAINT FK_VK_Kategorija
        FOREIGN KEY (kategorija_id) REFERENCES Kategorija (kategorija_id)
            ON DELETE CASCADE
            ON UPDATE CASCADE
);

CREATE TABLE Tip
(
    tip_id INTEGER GENERATED ALWAYS AS IDENTITY,
    ime    VARCHAR(100),
    PRIMARY KEY (tip_id),
    CONSTRAINT CHK_Tip_Ime CHECK (ime IS NULL OR TRIM(ime) <> '')
);

CREATE TABLE Vozilo
(
    vozilo_id          INTEGER GENERATED ALWAYS AS IDENTITY,
    marka              VARCHAR(100),
    broj_sasija        BIGINT,
    model              VARCHAR(100),
    registarska_oznaka VARCHAR(20),
    boja               VARCHAR(50),
    tip_id             INTEGER,
    PRIMARY KEY (vozilo_id),
    CONSTRAINT FK_Vozilo_Tip
        FOREIGN KEY (tip_id) REFERENCES Tip (tip_id) ON DELETE SET NULL ON UPDATE CASCADE,
    CONSTRAINT UQ_Vozilo_Registarska UNIQUE (registarska_oznaka),
    CONSTRAINT CHK_Vozilo_Marka CHECK (marka IS NULL OR TRIM(marka) <> ''),
    CONSTRAINT CHK_Vozilo_Model CHECK (model IS NULL OR TRIM(model) <> ''),
    CONSTRAINT CHK_Vozilo_Boja CHECK (boja IS NULL OR TRIM(boja) <> ''),
    CONSTRAINT CHK_Vozilo_Registarska CHECK (registarska_oznaka IS NULL OR TRIM(registarska_oznaka) <> ''),
    CONSTRAINT CHK_Vozilo_BrojSasija CHECK (broj_sasija IS NULL OR broj_sasija > 0)
);

CREATE TABLE Registracija
(
    registracija_id   INTEGER GENERATED ALWAYS AS IDENTITY,
    broj              INTEGER,
    mesto             INTEGER,
    datum             DATE,
    datum_istekuvanje DATE,
    sopstvenikEmbg    BIGINT,
    Vozilovozilo_id   INTEGER,
    PRIMARY KEY (registracija_id),
    CONSTRAINT FK_Registracija_Sopstvenik
        FOREIGN KEY (sopstvenikEmbg) REFERENCES Sopstvenik (embg)
            ON DELETE RESTRICT
            ON UPDATE CASCADE,
    CONSTRAINT FK_Registracija_Vozilo
        FOREIGN KEY (Vozilovozilo_id) REFERENCES Vozilo (vozilo_id) ON DELETE RESTRICT ON UPDATE CASCADE,
    CONSTRAINT CHK_Registracija_Broj CHECK (broj IS NULL OR broj > 0),
    CONSTRAINT CHK_Registracija_Mesto CHECK (mesto IS NULL OR mesto > 0),
    CONSTRAINT CHK_Registracija_Datum CHECK (datum IS NULL OR datum <= CURRENT_DATE),
    CONSTRAINT CHK_Registracija_Istek CHECK (
        datum_istekuvanje IS NULL OR datum IS NULL OR datum_istekuvanje >= datum
        )
);

CREATE TABLE Korisnik
(
    korisnik_id     INTEGER GENERATED ALWAYS AS IDENTITY,
    mail            VARCHAR(100),
    hashed_password VARCHAR(255),
    embg            CHAR(13),
    PRIMARY KEY (korisnik_id),
    CONSTRAINT FK_Korisnik_Gragjanin
        FOREIGN KEY (embg) REFERENCES Gragjanin (embg) ON DELETE RESTRICT ON UPDATE CASCADE,
    CONSTRAINT UQ_Korisnik_Embg UNIQUE (embg),
    CONSTRAINT UQ_Korisnik_Mail UNIQUE (mail),
    CONSTRAINT CHK_Korisnik_Mail CHECK (mail IS NULL OR mail LIKE '%@%'),
    CONSTRAINT CHK_Korisnik_Password CHECK (hashed_password IS NULL OR LENGTH(hashed_password) >= 8)
);

CREATE TABLE Uloga
(
    uloga_id INTEGER GENERATED ALWAYS AS IDENTITY,
    ime      VARCHAR(100),
    PRIMARY KEY (uloga_id),
    CONSTRAINT CHK_Uloga_Ime CHECK (ime IS NULL OR TRIM(ime) <> '')
);

CREATE TABLE Korisnik_Uloga
(
    korisnik_id INTEGER,
    uloga_id    INTEGER,
    PRIMARY KEY (korisnik_id, uloga_id),
    CONSTRAINT FK_KU_Korisnik
        FOREIGN KEY (korisnik_id) REFERENCES Korisnik (korisnik_id) ON DELETE CASCADE ON UPDATE CASCADE,
    CONSTRAINT FK_KU_Uloga
        FOREIGN KEY (uloga_id) REFERENCES Uloga (uloga_id) ON DELETE CASCADE ON UPDATE CASCADE
);

CREATE TABLE Administrator
(
    administrator_id   INTEGER GENERATED ALWAYS AS IDENTITY,
    datum_vrabotuvanje DATE,
    broj_na_licenca    INTEGER,
    oddel              VARCHAR(100),
    korisnik_id        INTEGER UNIQUE,
    PRIMARY KEY (administrator_id),
    CONSTRAINT FK_Administrator_Korisnik
        FOREIGN KEY (korisnik_id) REFERENCES Korisnik (korisnik_id) ON DELETE RESTRICT ON UPDATE CASCADE,
    CONSTRAINT CHK_Administrator_Licenca CHECK (broj_na_licenca IS NULL OR broj_na_licenca > 0),
    CONSTRAINT CHK_Administrator_Oddel CHECK (oddel IS NULL OR TRIM(oddel) <> ''),
    CONSTRAINT CHK_Administrator_Datum CHECK (datum_vrabotuvanje IS NULL OR datum_vrabotuvanje <= CURRENT_DATE)
);

CREATE TABLE Zalba
(
    zalba_id              INTEGER GENERATED ALWAYS AS IDENTITY,
    sodrzina              VARCHAR(500),
    datum_na_podnesuvanje DATE,
    status                VARCHAR(100),
    administrator_id      INTEGER,
    korisnik_id           INTEGER,
    prekrsok_id           INTEGER,
    PRIMARY KEY (zalba_id),
    CONSTRAINT FK_Zalba_Administrator
        FOREIGN KEY (administrator_id) REFERENCES Administrator (administrator_id) ON DELETE SET NULL ON UPDATE CASCADE,
    CONSTRAINT FK_Zalba_Korisnik
        FOREIGN KEY (korisnik_id) REFERENCES Korisnik (korisnik_id) ON DELETE RESTRICT ON UPDATE CASCADE,
    CONSTRAINT FK_Zalba_Prekrsok
        FOREIGN KEY (prekrsok_id) REFERENCES Prekrsok (prekrsok_id) ON DELETE RESTRICT ON UPDATE CASCADE,
    CONSTRAINT CHK_Zalba_Sodrzina CHECK (sodrzina IS NULL OR TRIM(sodrzina) <> ''),
    CONSTRAINT CHK_Zalba_Status CHECK (
        status IS NULL OR status IN ('podnesena', 'vo_postapka', 'prifatena', 'odbijena')
        ),
    CONSTRAINT CHK_Zalba_Datum CHECK (datum_na_podnesuvanje IS NULL OR datum_na_podnesuvanje <= CURRENT_DATE)
);

CREATE TABLE Notifikacija
(
    notifikacija_id   INTEGER GENERATED ALWAYS AS IDENTITY,
    sodrzina          VARCHAR(500),
    datum_isprakjanje DATE    DEFAULT CURRENT_DATE,
    procitana         BOOLEAN DEFAULT FALSE,
    slika_id          INTEGER,
    korisnik_id       INTEGER,
    PRIMARY KEY (notifikacija_id),
    CONSTRAINT FK_Notifikacija_Slika
        FOREIGN KEY (slika_id) REFERENCES Slika (slika_id) ON DELETE SET NULL ON UPDATE CASCADE,
    CONSTRAINT FK_Notifikacija_Korisnik
        FOREIGN KEY (korisnik_id) REFERENCES Korisnik (korisnik_id) ON DELETE SET NULL ON UPDATE CASCADE,
    CONSTRAINT CHK_Notifikacija_Sodrzina CHECK (sodrzina IS NULL OR TRIM(sodrzina) <> ''),
    CONSTRAINT CHK_Notifikacija_Datum CHECK (datum_isprakjanje IS NULL OR datum_isprakjanje <= CURRENT_DATE)
);

CREATE TABLE Notifikacija_Kazna
(
    notifikacija_id INTEGER,
    kazna_id        INTEGER,
    PRIMARY KEY (notifikacija_id, kazna_id),
    CONSTRAINT FK_NK_Notifikacija
        FOREIGN KEY (notifikacija_id) REFERENCES Notifikacija (notifikacija_id) ON DELETE CASCADE ON UPDATE CASCADE,
    CONSTRAINT FK_NK_Kazna
        FOREIGN KEY (kazna_id) REFERENCES Kazna (kazna_id) ON DELETE CASCADE ON UPDATE CASCADE
);

CREATE TABLE Prekrsok_Vozilo
(
    prekrsok_id INTEGER,
    vozilo_id   INTEGER,
    PRIMARY KEY (prekrsok_id, vozilo_id),
    CONSTRAINT FK_PV_Prekrsok
        FOREIGN KEY (prekrsok_id) REFERENCES Prekrsok (prekrsok_id) ON DELETE CASCADE ON UPDATE CASCADE,
    CONSTRAINT FK_PV_Vozilo
        FOREIGN KEY (vozilo_id) REFERENCES Vozilo (vozilo_id) ON DELETE CASCADE ON UPDATE CASCADE
);

CREATE TABLE Sopstvenik_Vozilo
(
    embg      BIGINT,
    vozilo_id INTEGER,
    PRIMARY KEY (embg, vozilo_id),
    CONSTRAINT FK_SV_Sopstvenik
        FOREIGN KEY (embg) REFERENCES Sopstvenik (embg) ON DELETE CASCADE ON UPDATE CASCADE,
    CONSTRAINT FK_SV_Vozilo
        FOREIGN KEY (vozilo_id) REFERENCES Vozilo (vozilo_id) ON DELETE CASCADE ON UPDATE CASCADE
);

CREATE TABLE Prekrsok_Storitel
(
    prekrsok_id   INTEGER,
    storitel_embg BIGINT,
    PRIMARY KEY (prekrsok_id, storitel_embg),
    CONSTRAINT FK_PS_Prekrsok
        FOREIGN KEY (prekrsok_id) REFERENCES Prekrsok (prekrsok_id) ON DELETE CASCADE ON UPDATE CASCADE,
    CONSTRAINT FK_PS_Gragjanin
        FOREIGN KEY (storitel_embg) REFERENCES Gragjanin (embg) ON DELETE RESTRICT ON UPDATE CASCADE
);

CREATE TABLE PregledSnimka
(
    administrator_id INTEGER,
    snimka_id        INTEGER,
    status           INTEGER DEFAULT 0,
    PRIMARY KEY (administrator_id, snimka_id),
    CONSTRAINT FK_PregledSnimka_Administrator
        FOREIGN KEY (administrator_id) REFERENCES Administrator (administrator_id) ON DELETE CASCADE ON UPDATE CASCADE,
    CONSTRAINT FK_PregledSnimka_Snimka
        FOREIGN KEY (snimka_id) REFERENCES Snimka (snimka_id) ON DELETE CASCADE ON UPDATE CASCADE,
    CONSTRAINT CHK_PregledSnimka_Status CHECK (status IS NULL OR status IN (0, 1, 2))
);