| 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 CASCADE
|
|---|
| 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 CASCADE
|
|---|
| 49 | );
|
|---|
| 50 |
|
|---|
| 51 | CREATE 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 |
|
|---|
| 64 | CREATE 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 |
|
|---|
| 72 | CREATE 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 |
|
|---|
| 83 | CREATE 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 |
|
|---|
| 91 | CREATE 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 |
|
|---|
| 102 | CREATE 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 |
|
|---|
| 108 | CREATE 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 |
|
|---|
| 116 | CREATE 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 |
|
|---|
| 125 | CREATE 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 |
|
|---|
| 141 | CREATE 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 |
|
|---|
| 150 | CREATE 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 |
|
|---|
| 161 | CREATE 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 |
|
|---|