| 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) |