| 1 | --DDL
|
|---|
| 2 | CREATE 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 |
|
|---|
| 14 | CREATE TABLE Kategorija (
|
|---|
| 15 | id_kategorija SERIAL PRIMARY KEY,
|
|---|
| 16 | kod varchar(3) NOT NULL
|
|---|
| 17 | );
|
|---|
| 18 |
|
|---|
| 19 | CREATE 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 |
|
|---|
| 26 | CREATE 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 |
|
|---|
| 35 | CREATE 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 RESTRICT
|
|---|
| 42 | );
|
|---|
| 43 |
|
|---|
| 44 | CREATE 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 RESTRICT
|
|---|
| 49 | );
|
|---|
| 50 |
|
|---|
| 51 |
|
|---|
| 52 | CREATE TABLE Sopstvenost (
|
|---|
| 53 | id_sopstvenost SERIAL PRIMARY KEY,
|
|---|
| 54 | EMBG char(13),
|
|---|
| 55 | broj_na_sasija varchar(17),
|
|---|
| 56 | datum_steknuvanje date NOT NULL DEFAULT CURRENT_DATE,
|
|---|
| 57 | datum_kraj date,
|
|---|
| 58 | CHECK (datum_steknuvanje <= CURRENT_DATE),
|
|---|
| 59 | CHECK (datum_kraj IS NULL OR datum_kraj >= datum_steknuvanje),
|
|---|
| 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 |
|
|---|
| 64 |
|
|---|
| 65 | CREATE TABLE Registerska_tablica (
|
|---|
| 66 | id_tablica SERIAL PRIMARY KEY,
|
|---|
| 67 | region varchar(3) NOT NULL,
|
|---|
| 68 | broj varchar(4) NOT NULL,
|
|---|
| 69 | kod varchar(2) NOT NULL,
|
|---|
| 70 | UNIQUE (region, broj, kod)
|
|---|
| 71 | );
|
|---|
| 72 |
|
|---|
| 73 |
|
|---|
| 74 | CREATE TABLE Registracija (
|
|---|
| 75 | id_registracija SERIAL PRIMARY KEY,
|
|---|
| 76 | id_sopstvenost int NOT NULL,
|
|---|
| 77 | datum_na_izvadanje date NOT NULL,
|
|---|
| 78 | datum_na_istekuvanje date,
|
|---|
| 79 | id_tablica int,
|
|---|
| 80 | CHECK (datum_na_istekuvanje IS NULL OR datum_na_istekuvanje >= datum_na_izvadanje),
|
|---|
| 81 | FOREIGN KEY (id_sopstvenost) REFERENCES Sopstvenost(id_sopstvenost) ON UPDATE CASCADE ON DELETE RESTRICT,
|
|---|
| 82 | FOREIGN KEY (id_tablica) REFERENCES Registerska_tablica(id_tablica) ON UPDATE CASCADE ON DELETE RESTRICT
|
|---|
| 83 | );
|
|---|
| 84 |
|
|---|
| 85 | CREATE TABLE Policaec (
|
|---|
| 86 | EMBG_P char(13) PRIMARY KEY,
|
|---|
| 87 | broj_na_znacka varchar(20),
|
|---|
| 88 | EMBG_nadreden char(13),
|
|---|
| 89 | FOREIGN KEY (EMBG_P) REFERENCES Gragjanin(EMBG) ON UPDATE CASCADE ON DELETE RESTRICT,
|
|---|
| 90 | FOREIGN KEY (EMBG_nadreden) REFERENCES Policaec(EMBG_P) ON UPDATE CASCADE ON DELETE RESTRICT
|
|---|
| 91 | );
|
|---|
| 92 |
|
|---|
| 93 | CREATE TABLE Sektor (
|
|---|
| 94 | id_sektor int PRIMARY KEY,
|
|---|
| 95 | ime varchar(100) NOT NULL,
|
|---|
| 96 | region varchar(100),
|
|---|
| 97 | telefon varchar(13),
|
|---|
| 98 | CHECK (
|
|---|
| 99 | telefon IS NULL OR
|
|---|
| 100 | telefon ~ '^\+389[0-9]{8}$'
|
|---|
| 101 | )
|
|---|
| 102 | );
|
|---|
| 103 |
|
|---|
| 104 | CREATE TABLE Stanica (
|
|---|
| 105 | id_stanica SERIAL PRIMARY KEY,
|
|---|
| 106 | ime varchar(100) ,
|
|---|
| 107 | adresa varchar(100) ,
|
|---|
| 108 | id_sektor int ,
|
|---|
| 109 | FOREIGN KEY (id_sektor) REFERENCES Sektor(id_sektor) ON UPDATE CASCADE ON DELETE RESTRICT
|
|---|
| 110 | );
|
|---|
| 111 |
|
|---|
| 112 | CREATE TABLE Raboti_vo (
|
|---|
| 113 | EMBG_P char(13),
|
|---|
| 114 | id_stanica int,
|
|---|
| 115 | datum_od date not null,
|
|---|
| 116 | datum_do date ,
|
|---|
| 117 | PRIMARY KEY (EMBG_P, id_stanica),
|
|---|
| 118 | CHECK (datum_do IS NULL OR datum_do >= datum_od),
|
|---|
| 119 | FOREIGN KEY (EMBG_P) REFERENCES Policaec(EMBG_P) ON UPDATE CASCADE ON DELETE RESTRICT,
|
|---|
| 120 | FOREIGN KEY (id_stanica) REFERENCES Stanica(id_stanica) ON UPDATE CASCADE ON DELETE RESTRICT
|
|---|
| 121 | );
|
|---|
| 122 |
|
|---|
| 123 | CREATE TABLE Kazna (
|
|---|
| 124 | id_kazna int PRIMARY KEY,
|
|---|
| 125 | iznos_kazna numeric(10,2) NOT NULL CHECK (iznos_kazna >= 0),
|
|---|
| 126 | opis text
|
|---|
| 127 | );
|
|---|
| 128 |
|
|---|
| 129 | CREATE TABLE Prekrsok (
|
|---|
| 130 | id_prekrsok int PRIMARY KEY,
|
|---|
| 131 | ime varchar(100),
|
|---|
| 132 | opis text ,
|
|---|
| 133 | id_kazna int4,
|
|---|
| 134 | FOREIGN KEY (id_kazna) REFERENCES Kazna(id_kazna) ON UPDATE CASCADE ON DELETE RESTRICT
|
|---|
| 135 | );
|
|---|
| 136 |
|
|---|
| 137 | CREATE TABLE Slucaj (
|
|---|
| 138 | id_slucaj SERIAL PRIMARY KEY,
|
|---|
| 139 | datum_otvaranje date NOT NULL ,
|
|---|
| 140 | status varchar(20) default 'Otvoren',
|
|---|
| 141 | tip_nastan text,
|
|---|
| 142 | CHECK (status IN ('Otvoren', 'Zatvoren', 'Vo tek')),
|
|---|
| 143 | CHECK (datum_otvaranje <= CURRENT_DATE)
|
|---|
| 144 | );
|
|---|
| 145 |
|
|---|
| 146 | CREATE TABLE Zapisnik (
|
|---|
| 147 | id_na_zapisnik serial PRIMARY KEY,
|
|---|
| 148 | vreme time,
|
|---|
| 149 | datum date CHECK (datum IS NULL OR datum <= CURRENT_DATE),
|
|---|
| 150 | lokacija varchar(100),
|
|---|
| 151 | Potpis boolean DEFAULT false,
|
|---|
| 152 | id_slucaj int,
|
|---|
| 153 | status_zapisnik varchar(20) default 'Otvoren',
|
|---|
| 154 | EMBG_Prekrsuvach char(13),
|
|---|
| 155 | Vozilo_Broj_Sasija varchar(17),
|
|---|
| 156 | EMBG_Policaec char(13),
|
|---|
| 157 | CHECK (status_zapisnik IN ('Otvoren', 'Zatvoren')),
|
|---|
| 158 | FOREIGN KEY (id_slucaj) REFERENCES Slucaj(id_slucaj) ON UPDATE CASCADE ON DELETE RESTRICT,
|
|---|
| 159 | FOREIGN KEY (EMBG_Prekrsuvach) REFERENCES Gragjanin(EMBG) ON UPDATE CASCADE ON DELETE RESTRICT,
|
|---|
| 160 | FOREIGN KEY (Vozilo_Broj_Sasija) REFERENCES Vozilo(broj_na_sasija) ON UPDATE CASCADE ON DELETE RESTRICT,
|
|---|
| 161 | FOREIGN KEY (EMBG_Policaec) REFERENCES Policaec(EMBG_P) ON UPDATE CASCADE ON DELETE RESTRICT
|
|---|
| 162 | );
|
|---|
| 163 |
|
|---|
| 164 | CREATE TABLE Stavka_Zapisnik (
|
|---|
| 165 | id_stavka SERIAL PRIMARY KEY,
|
|---|
| 166 | reden_broj int,
|
|---|
| 167 | id_na_zapisnik int,
|
|---|
| 168 | id_na_prekrsok int,
|
|---|
| 169 | FOREIGN KEY (id_na_zapisnik) REFERENCES Zapisnik(id_na_zapisnik) ON UPDATE CASCADE ON DELETE RESTRICT,
|
|---|
| 170 | FOREIGN KEY (id_na_prekrsok) REFERENCES Prekrsok(id_prekrsok) ON UPDATE CASCADE ON DELETE RESTRICT
|
|---|
| 171 | );
|
|---|
| 172 |
|
|---|
| 173 | CREATE TABLE Zadaca (
|
|---|
| 174 | id_zadaca SERIAL PRIMARY KEY,
|
|---|
| 175 | opis varchar(255),
|
|---|
| 176 | status varchar(20) NOT NULL default 'Aktivna',
|
|---|
| 177 | EMBG_policaec char(13),
|
|---|
| 178 | id_slucaj int,
|
|---|
| 179 | FOREIGN KEY (EMBG_policaec) REFERENCES Policaec(EMBG_P) ON UPDATE CASCADE ON DELETE RESTRICT,
|
|---|
| 180 | FOREIGN KEY (id_slucaj) REFERENCES Slucaj(id_slucaj) ON UPDATE CASCADE ON DELETE RESTRICT,
|
|---|
| 181 | CHECK (status IN ('Aktivna', 'Zavrsena', 'Otkazana'))
|
|---|
| 182 | );
|
|---|
| 183 |
|
|---|
| 184 | CREATE TABLE Uplata (
|
|---|
| 185 | id_uplata serial PRIMARY KEY,
|
|---|
| 186 | iznos numeric(10,2) NOT NULL ,
|
|---|
| 187 | status varchar(30) NOT NULL DEFAULT 'Neplateno',
|
|---|
| 188 | datum_uplata date ,
|
|---|
| 189 | Uplatil_Gragjanin char(13),
|
|---|
| 190 | id_zapisnik int ,
|
|---|
| 191 | nacin_plakanje varchar(30),
|
|---|
| 192 | kazna_zgolemena boolean,
|
|---|
| 193 | FOREIGN KEY (Uplatil_Gragjanin) REFERENCES Gragjanin(EMBG) ON UPDATE CASCADE ON DELETE RESTRICT,
|
|---|
| 194 | FOREIGN KEY (id_zapisnik) REFERENCES Zapisnik(id_na_zapisnik) ON UPDATE CASCADE ON DELETE RESTRICT,
|
|---|
| 195 | CHECK(iznos >= 0),
|
|---|
| 196 | CHECK (datum_uplata IS NULL OR datum_uplata <= CURRENT_DATE),
|
|---|
| 197 | CHECK (status IN ('Plateno', 'Neplateno', 'Sudska_postapka'))
|
|---|
| 198 | );
|
|---|
| 199 |
|
|---|
| 200 |
|
|---|