DatabaseCreation: ddl.sql

File ddl.sql, 6.8 KB (added by 231069, 16 hours 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 RESTRICT
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 RESTRICT
49);
50
51
52CREATE 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
65CREATE 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
74CREATE 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
85CREATE 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
93CREATE 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
104CREATE 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
112CREATE 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
123CREATE 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
129CREATE 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
137CREATE 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
146CREATE 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
164CREATE 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
173CREATE 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
184CREATE 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