6 | | DROP TABLE IF EXISTS NASTANI CASCADE; |
7 | | DROP TABLE IF EXISTS PREFERENCI CASCADE; |
8 | | DROP TABLE IF EXISTS PAKETI CASCADE; |
9 | | DROP TABLE IF EXISTS RECENZII CASCADE; |
10 | | DROP TABLE IF EXISTS REZERVACII CASCADE; |
11 | | DROP TABLE IF EXISTS PREMIUM CASCADE; |
12 | | DROP TABLE IF EXISTS STANDARD CASCADE; |
13 | | DROP TABLE IF EXISTS KORISNICI CASCADE; |
14 | | DROP TABLE IF EXISTS AKTIVNOSTI CASCADE; |
15 | | DROP TABLE IF EXISTS METEROLOSHKASOSTOJBA CASCADE; |
16 | | DROP TABLE IF EXISTS DESTINACII CASCADE; |
17 | | DROP TABLE IF EXISTS TAGOVI CASCADE; |
18 | | DROP TABLE IF EXISTS destinacii_has_tagovi CASCADE; |
19 | | DROP TABLE IF EXISTS aktivnosti_has_paketi CASCADE; |
20 | | DROP TABLE IF EXISTS aktivnosti_has_rezervacii CASCADE; |
21 | | DROP TABLE IF EXISTS destinacii_has_korisnici CASCADE; |
| 5 | DROP TABLE IF EXISTS destination_user CASCADE; |
| 6 | DROP TABLE IF EXISTS activity_reservation CASCADE; |
| 7 | DROP TABLE IF EXISTS package_reservation CASCADE; |
| 8 | DROP TABLE IF EXISTS package_activity CASCADE; |
| 9 | DROP TABLE IF EXISTS preference CASCADE; |
| 10 | DROP TABLE IF EXISTS destination_tag CASCADE; |
| 11 | DROP TABLE IF EXISTS tag CASCADE; |
| 12 | DROP TABLE IF EXISTS event CASCADE; |
| 13 | DROP TABLE IF EXISTS activity CASCADE; |
| 14 | DROP TABLE IF EXISTS package CASCADE; |
| 15 | DROP TABLE IF EXISTS meteorological_condition CASCADE; |
| 16 | DROP TABLE IF EXISTS review CASCADE; |
| 17 | DROP TABLE IF EXISTS reservation CASCADE; |
| 18 | DROP TABLE IF EXISTS premium CASCADE; |
| 19 | DROP TABLE IF EXISTS standard CASCADE; |
| 20 | DROP TABLE IF EXISTS users CASCADE; |
| 21 | DROP TABLE IF EXISTS destination CASCADE; |
23 | | |
24 | | CREATE TABLE TAGOVI ( |
25 | | idTag SERIAL PRIMARY KEY, |
26 | | tagOznaka VARCHAR(255) NOT NULL |
| 23 | CREATE TABLE IF NOT EXISTS destination ( |
| 24 | id_destination SERIAL PRIMARY KEY, |
| 25 | location_name VARCHAR(255) NOT NULL, |
| 26 | location_desc TEXT, |
| 27 | types_of_places TEXT, |
| 28 | recommended_season TEXT, |
| 29 | average_temp NUMERIC(5,2), |
| 30 | latitude DECIMAL(9,6), |
| 31 | longitude DECIMAL(9,6), |
| 32 | country VARCHAR(100), |
| 33 | popularity INTEGER DEFAULT 0, |
| 34 | important_location_name VARCHAR(255), |
| 35 | important_location_description TEXT |
29 | | CREATE TABLE DESTINACII ( |
30 | | idDest SERIAL PRIMARY KEY, |
31 | | imeLokacija VARCHAR(255) NOT NULL, |
32 | | opisLokacija VARCHAR(255), |
33 | | tipoviMesta VARCHAR(255) NOT NULL, |
34 | | preporachanaSezona VARCHAR(255) NOT NULL, |
35 | | prosechnaTemp DECIMAL(5, 2), |
36 | | lat DECIMAL(9, 6), |
37 | | lon DECIMAL(9, 6), |
38 | | drzhava VARCHAR(255), |
39 | | popularnost INT, |
40 | | ime VARCHAR(255) NOT NULL, |
41 | | opis VARCHAR(255) NOT NULL, |
42 | | idTag INT, |
43 | | CONSTRAINT fk_tag_dest FOREIGN KEY (idTag) REFERENCES TAGOVI(idTag) |
| 38 | CREATE TABLE IF NOT EXISTS users ( |
| 39 | id_user SERIAL PRIMARY KEY, |
| 40 | first_name VARCHAR(100) NOT NULL, |
| 41 | last_name VARCHAR(100) NOT NULL, |
| 42 | email VARCHAR(255) NOT NULL UNIQUE, |
| 43 | phone_number VARCHAR(30), |
| 44 | birth_date DATE, |
| 45 | is_premium BOOLEAN NOT NULL DEFAULT FALSE |
46 | | CREATE TABLE METEROLOSHKASOSTOJBA ( |
47 | | idMeteo SERIAL PRIMARY KEY, |
48 | | momentTemp DECIMAL(5, 2), |
49 | | sostojbaVreme VARCHAR(255) NOT NULL, |
50 | | predupreduvanja VARCHAR(255) NOT NULL, |
51 | | vlazhnost DECIMAL(5, 2), |
52 | | veter DECIMAL(5, 2), |
53 | | mesec INT, |
54 | | idDest INT, |
55 | | CONSTRAINT fk_dest_meteo FOREIGN KEY (idDest) REFERENCES DESTINACII(idDest) |
| 48 | CREATE TABLE IF NOT EXISTS standard ( |
| 49 | id_user INT PRIMARY KEY REFERENCES users(id_user) ON DELETE CASCADE |
58 | | CREATE TABLE AKTIVNOSTI ( |
59 | | idAktivnost SERIAL PRIMARY KEY, |
60 | | imeAktivnost VARCHAR(255) NOT NULL, |
61 | | informacii VARCHAR(255), |
62 | | kategorija VARCHAR(255) NOT NULL, |
63 | | iznos INT, |
64 | | idDest INT, |
65 | | CONSTRAINT fk_dest_aktivnost FOREIGN KEY (idDest) REFERENCES DESTINACII(idDest) |
| 52 | CREATE TABLE IF NOT EXISTS premium ( |
| 53 | id_user INT PRIMARY KEY REFERENCES users(id_user) ON DELETE CASCADE, |
| 54 | date_created TIMESTAMP NOT NULL DEFAULT now(), |
| 55 | discount NUMERIC(5,2) |
68 | | CREATE TABLE KORISNICI ( |
69 | | idKorisnik SERIAL PRIMARY KEY, |
70 | | ime VARCHAR(255) NOT NULL, |
71 | | prezime VARCHAR(255) NOT NULL, |
72 | | ePoshta VARCHAR(255) NOT NULL UNIQUE, |
73 | | telBr VARCHAR(255) NOT NULL, |
74 | | datumRagjanje DATE, |
75 | | idDest INT, |
76 | | CONSTRAINT fk_dest_korisnik FOREIGN KEY (idDest) REFERENCES DESTINACII(idDest) |
| 58 | CREATE TABLE IF NOT EXISTS reservation ( |
| 59 | id_reservation SERIAL PRIMARY KEY, |
| 60 | id_user INT NOT NULL REFERENCES users(id_user) ON DELETE CASCADE, |
| 61 | time_point TIMESTAMP NOT NULL DEFAULT now(), |
| 62 | premium_discount_applied BOOLEAN NOT NULL DEFAULT FALSE, |
| 63 | discount_amount NUMERIC(5,2) NOT NULL, |
| 64 | total_price NUMERIC(12,2) NOT NULL |
79 | | CREATE TABLE STANDARD ( |
80 | | idKorisnik INT, |
81 | | ime VARCHAR(255) NOT NULL, |
82 | | prezime VARCHAR(255) NOT NULL, |
83 | | ePoshta VARCHAR(255) NOT NULL UNIQUE, |
84 | | telBr VARCHAR(255) NOT NULL, |
85 | | datumRagjanje DATE, |
86 | | CONSTRAINT fk_korisnik_standard FOREIGN KEY (idKorisnik) REFERENCES KORISNICI(idKorisnik) |
| 67 | CREATE TABLE IF NOT EXISTS review ( |
| 68 | id_review SERIAL PRIMARY KEY, |
| 69 | username VARCHAR(255) NOT NULL, |
| 70 | reservation_id INT UNIQUE REFERENCES reservation(id_reservation) ON DELETE CASCADE, |
| 71 | id_destination INT NOT NULL REFERENCES destination(id_destination) ON DELETE CASCADE, |
| 72 | quality SMALLINT NOT NULL CHECK (quality BETWEEN 1 AND 5), |
| 73 | comment TEXT, |
| 74 | review_date TIMESTAMP DEFAULT now(), |
| 75 | vote_count INTEGER DEFAULT 0 |
89 | | CREATE TABLE PREMIUM ( |
90 | | idKorisnik INT, |
91 | | ime VARCHAR(255) NOT NULL, |
92 | | prezime VARCHAR(255) NOT NULL, |
93 | | ePoshta VARCHAR(255) NOT NULL UNIQUE, |
94 | | telBr VARCHAR(255) NOT NULL, |
95 | | datumRagjanje DATE, |
96 | | datumKreiranje DATE, |
97 | | popust DECIMAL(5, 2), |
98 | | CONSTRAINT fk_korisnik_premium FOREIGN KEY (idKorisnik) REFERENCES KORISNICI(idKorisnik) |
| 78 | CREATE TABLE IF NOT EXISTS meteorological_condition ( |
| 79 | id_meteo SERIAL PRIMARY KEY, |
| 80 | id_destination INT NOT NULL REFERENCES destination(id_destination) ON DELETE CASCADE, |
| 81 | current_temp NUMERIC(5,2) NOT NULL, |
| 82 | weather_condition VARCHAR(50) NOT NULL, |
| 83 | warnings VARCHAR(100) NOT NULL, |
| 84 | humidity NUMERIC(5,2), |
| 85 | wind NUMERIC(6,2), |
| 86 | month SMALLINT |
101 | | CREATE TABLE REZERVACII ( |
102 | | idRezervacija SERIAL PRIMARY KEY, |
103 | | vremenskaTochka DATE NOT NULL, |
104 | | vkupnaCena INT NOT NULL, |
105 | | idAktivnost INT, |
106 | | idKorisnik INT, |
107 | | idMeteo INT, |
108 | | CONSTRAINT fk_aktivnost_rezervacija FOREIGN KEY (idAktivnost) REFERENCES AKTIVNOSTI(idAktivnost), |
109 | | CONSTRAINT fk_korisnik_rezervacija FOREIGN KEY (idKorisnik) REFERENCES KORISNICI(idKorisnik), |
110 | | CONSTRAINT fk_meteo_rezervacija FOREIGN KEY (idMeteo) REFERENCES METEROLOSHKASOSTOJBA(idMeteo) |
| 89 | CREATE TABLE IF NOT EXISTS package ( |
| 90 | id_package SERIAL PRIMARY KEY, |
| 91 | package_name VARCHAR(255) NOT NULL, |
| 92 | id_destination INT NOT NULL REFERENCES destination(id_destination) ON DELETE CASCADE, |
| 93 | price NUMERIC(12,2) NOT NULL, |
| 94 | start_date DATE NOT NULL, |
| 95 | end_date DATE NOT NULL |
113 | | CREATE TABLE RECENZII ( |
114 | | idRecenzija SERIAL PRIMARY KEY, |
115 | | korisnichkoIme VARCHAR(255) NOT NULL, |
116 | | kvalitet INT NOT NULL, |
117 | | zabeleshka VARCHAR(255), |
118 | | datumRecenzija DATE, |
119 | | brGlasovi INT, |
120 | | idDest INT, |
121 | | idKorisnik INT, |
122 | | idRezervacija INT, |
123 | | CONSTRAINT fk_dest_recenzija FOREIGN KEY (idDest) REFERENCES DESTINACII(idDest), |
124 | | CONSTRAINT fk_korisnik_recenzija FOREIGN KEY (idKorisnik) REFERENCES KORISNICI(idKorisnik), |
125 | | CONSTRAINT fk_rezervacija_recenzija FOREIGN KEY (idRezervacija) REFERENCES REZERVACII(idRezervacija) |
| 98 | CREATE TABLE IF NOT EXISTS activity ( |
| 99 | id_activity SERIAL PRIMARY KEY, |
| 100 | activity_name VARCHAR(255) NOT NULL, |
| 101 | id_destination INT REFERENCES destination(id_destination) ON DELETE CASCADE, |
| 102 | information TEXT, |
| 103 | amount NUMERIC(10,2), |
| 104 | category VARCHAR(100) NOT NULL |
128 | | CREATE TABLE PAKETI ( |
129 | | idPaket SERIAL PRIMARY KEY, |
130 | | imePaket VARCHAR(255) NOT NULL, |
131 | | cena INT NOT NULL, |
132 | | pochetok TIMESTAMP NOT NULL, |
133 | | kraj TIMESTAMP NOT NULL, |
134 | | idDest INT, |
135 | | idAktivnost INT, |
136 | | idRezervacija INT, |
137 | | CONSTRAINT fk_dest_paket FOREIGN KEY (idDest) REFERENCES DESTINACII(idDest), |
138 | | CONSTRAINT fk_aktivnost_paket FOREIGN KEY (idAktivnost) REFERENCES AKTIVNOSTI(idAktivnost), |
139 | | CONSTRAINT fk_rezervacija_paket FOREIGN KEY (idRezervacija) REFERENCES REZERVACII(idRezervacija) |
| 107 | CREATE TABLE IF NOT EXISTS event ( |
| 108 | id_event SERIAL PRIMARY KEY, |
| 109 | event_name VARCHAR(255) NOT NULL, |
| 110 | id_destination INT NOT NULL REFERENCES destination(id_destination) ON DELETE CASCADE, |
| 111 | start_date DATE, |
| 112 | end_date DATE, |
| 113 | details TEXT, |
| 114 | event_type TEXT NOT NULL |
150 | | CREATE TABLE NASTANI ( |
151 | | idNastan SERIAL PRIMARY KEY, |
152 | | naziv VARCHAR(255) NOT NULL, |
153 | | vidovi VARCHAR(255) NOT NULL, |
154 | | pochetenDatum DATE, |
155 | | kraenDatum DATE, |
156 | | detali VARCHAR(255), |
157 | | idDest INT, |
158 | | CONSTRAINT fk_dest_nastan FOREIGN KEY (idDest) REFERENCES DESTINACII(idDest) |
| 122 | CREATE TABLE IF NOT EXISTS destination_tag ( |
| 123 | id_destination INT REFERENCES destination(id_destination) ON DELETE CASCADE, |
| 124 | id_tag INT REFERENCES tag(id_tag) ON DELETE CASCADE, |
| 125 | PRIMARY KEY(id_destination, id_tag) |
161 | | CREATE TABLE destinacii_has_tagovi ( |
162 | | destinacii_idDest INT NOT NULL, |
163 | | tagovi_idTag INT NOT NULL, |
164 | | PRIMARY KEY (destinacii_idDest, tagovi_idTag), |
165 | | FOREIGN KEY (destinacii_idDest) REFERENCES DESTINACII(idDest), |
166 | | FOREIGN KEY (tagovi_idTag) REFERENCES TAGOVI(idTag) |
| 128 | CREATE TABLE IF NOT EXISTS preference ( |
| 129 | id_preference SERIAL PRIMARY KEY, |
| 130 | id_user INT NOT NULL REFERENCES users(id_user) ON DELETE CASCADE, |
| 131 | priority INT, |
| 132 | type_preference TEXT NOT NULL |
169 | | CREATE TABLE aktivnosti_has_paketi ( |
170 | | aktivnosti_idAktivnost INT NOT NULL, |
171 | | paketi_idPaket INT NOT NULL, |
172 | | PRIMARY KEY (aktivnosti_idAktivnost, paketi_idPaket), |
173 | | FOREIGN KEY (aktivnosti_idAktivnost) REFERENCES AKTIVNOSTI(idAktivnost), |
174 | | FOREIGN KEY (paketi_idPaket) REFERENCES PAKETI(idPaket) |
| 135 | CREATE TABLE IF NOT EXISTS package_activity ( |
| 136 | id_package INT REFERENCES package(id_package) ON DELETE CASCADE, |
| 137 | id_activity INT REFERENCES activity(id_activity) ON DELETE CASCADE, |
| 138 | PRIMARY KEY(id_package, id_activity) |
177 | | CREATE TABLE aktivnosti_has_rezervacii ( |
178 | | aktivnosti_idAktivnost INT NOT NULL, |
179 | | rezervacii_idRezervacija INT NOT NULL, |
180 | | PRIMARY KEY (aktivnosti_idAktivnost, rezervacii_idRezervacija), |
181 | | FOREIGN KEY (aktivnosti_idAktivnost) REFERENCES AKTIVNOSTI(idAktivnost), |
182 | | FOREIGN KEY (rezervacii_idRezervacija) REFERENCES REZERVACII(idRezervacija) |
| 141 | CREATE TABLE IF NOT EXISTS package_reservation ( |
| 142 | id_package INT REFERENCES package(id_package) ON DELETE CASCADE, |
| 143 | id_reservation INT REFERENCES reservation(id_reservation) ON DELETE CASCADE, |
| 144 | PRIMARY KEY(id_package, id_reservation) |
185 | | CREATE TABLE destinacii_has_korisnici ( |
186 | | destinacii_idDest INT NOT NULL, |
187 | | korisnici_idKorisnik INT NOT NULL, |
188 | | ocena INT NULL, |
189 | | komentar VARCHAR(100) NULL, |
190 | | datum DATE NULL, |
191 | | PRIMARY KEY (destinacii_idDest, korisnici_idKorisnik), |
192 | | FOREIGN KEY (destinacii_idDest) REFERENCES DESTINACII(idDest), |
193 | | FOREIGN KEY (korisnici_idKorisnik) REFERENCES KORISNICI(idKorisnik) |
| 147 | CREATE TABLE IF NOT EXISTS activity_reservation ( |
| 148 | id_activity INT REFERENCES activity(id_activity) ON DELETE CASCADE, |
| 149 | id_reservation INT REFERENCES reservation(id_reservation) ON DELETE CASCADE, |
| 150 | PRIMARY KEY(id_activity, id_reservation) |
| 151 | ); |
| 152 | |
| 153 | CREATE TABLE IF NOT EXISTS destination_user ( |
| 154 | id_destination INT REFERENCES destination(id_destination) ON DELETE CASCADE, |
| 155 | id_user INT REFERENCES users(id_user) ON DELETE CASCADE, |
| 156 | rating SMALLINT CHECK (rating BETWEEN 1 AND 5), |
| 157 | comment TEXT, |
| 158 | recommendation_date TIMESTAMP DEFAULT now(), |
| 159 | PRIMARY KEY(id_destination, id_user) |