| 44 | | address_id int8 NOT NULL, |
| 45 | | country_id int8 NOT NULL, |
| 46 | | city_id int8 NOT NULL, |
| 47 | | street varchar(150) NOT NULL, |
| 48 | | street_number varchar(20), |
| 49 | | latitude numeric(10, 6), |
| 50 | | longitude numeric(10, 6), |
| 51 | | PRIMARY KEY (address_id)); |
| 52 | | |
| | 63 | address_id int8 NOT NULL, |
| | 64 | country_id int8 NOT NULL, |
| | 65 | city_id int8 NOT NULL, |
| | 66 | street varchar(150) NOT NULL, |
| | 67 | street_number varchar(20), |
| | 68 | latitude numeric(10, 6), |
| | 69 | longitude numeric(10, 6), |
| | 70 | PRIMARY KEY (address_id), |
| | 71 | CONSTRAINT FKAddress542818 FOREIGN KEY (country_id) REFERENCES Country (country_id), |
| | 72 | CONSTRAINT FKAddress943654 FOREIGN KEY (city_id) REFERENCES City (city_id) |
| | 73 | ); |
| 59 | | property_id int8 NOT NULL, |
| 60 | | host_id int8 NOT NULL, |
| 61 | | property_type_id int8 NOT NULL, |
| 62 | | address_id int8 NOT NULL, |
| 63 | | title varchar(150) NOT NULL, |
| 64 | | description text, |
| 65 | | max_guests int4 NOT NULL, |
| 66 | | bedroom_count int4, |
| 67 | | bathroom_count int4 NOT NULL, |
| 68 | | base_price numeric(10, 2) NOT NULL, |
| 69 | | check_in_time time, |
| 70 | | check_out_time time, |
| 71 | | status varchar(30) NOT NULL, |
| 72 | | created_at timestamp NOT NULL, |
| 73 | | PRIMARY KEY (property_id) |
| 74 | | ); |
| 75 | | |
| | 80 | property_id int8 NOT NULL, |
| | 81 | host_id int8 NOT NULL, |
| | 82 | property_type_id int8 NOT NULL, |
| | 83 | address_id int8 NOT NULL, |
| | 84 | title varchar(150) NOT NULL, |
| | 85 | description text, |
| | 86 | max_guests int4 NOT NULL, |
| | 87 | bedroom_count int4, |
| | 88 | bathroom_count int4 NOT NULL, |
| | 89 | base_price numeric(10, 2) NOT NULL, |
| | 90 | check_in_time time, |
| | 91 | check_out_time time, |
| | 92 | status varchar(30) NOT NULL, |
| | 93 | created_at timestamp NOT NULL, |
| | 94 | PRIMARY KEY (property_id), |
| | 95 | CONSTRAINT FKProperty146200 FOREIGN KEY (host_id) REFERENCES Host (host_id), |
| | 96 | CONSTRAINT FKProperty26489 FOREIGN KEY (property_type_id) REFERENCES PropertyType (property_type_id), |
| | 97 | CONSTRAINT FKProperty394643 FOREIGN KEY (address_id) REFERENCES Address (address_id) |
| | 98 | ); |
| 108 | | availability_id int8 NOT NULL, |
| 109 | | property_id int8 NOT NULL, |
| 110 | | room_id int8 NOT NULL, |
| 111 | | available_date date NOT NULL, |
| 112 | | is_available bool NOT NULL, |
| 113 | | special_price numeric(10, 2), |
| 114 | | PRIMARY KEY (availability_id)); |
| 115 | | |
| | 134 | availability_id int8 NOT NULL, |
| | 135 | property_id int8 NOT NULL, |
| | 136 | room_id int8 NOT NULL, |
| | 137 | available_date date NOT NULL, |
| | 138 | is_available bool NOT NULL, |
| | 139 | special_price numeric(10, 2), |
| | 140 | PRIMARY KEY (availability_id), |
| | 141 | CONSTRAINT FKAvailabili408544 FOREIGN KEY (property_id) REFERENCES Property (property_id), |
| | 142 | CONSTRAINT FKAvailabili235433 FOREIGN KEY (room_id) REFERENCES Room (room_id) |
| | 143 | ); |
| 117 | | booking_id int8 NOT NULL, |
| 118 | | guest_id int8 NOT NULL, |
| 119 | | property_id int8 NOT NULL, |
| 120 | | room_id int8 NOT NULL, |
| 121 | | check_in_date date NOT NULL, |
| 122 | | check_out_date date NOT NULL, |
| 123 | | guest_count int4 NOT NULL, |
| 124 | | total_price numeric(10, 2) NOT NULL, |
| 125 | | booking_status varchar(30) NOT NULL, |
| 126 | | created_at timestamp NOT NULL, |
| 127 | | PRIMARY KEY (booking_id), |
| 128 | | CONSTRAINT chk_booking_dates |
| 129 | | CHECK (check_out_date > check_in_date)); |
| 130 | | |
| | 145 | booking_id int8 NOT NULL, |
| | 146 | guest_id int8 NOT NULL, |
| | 147 | property_id int8 NOT NULL, |
| | 148 | room_id int8 NOT NULL, |
| | 149 | check_in_date date NOT NULL, |
| | 150 | check_out_date date NOT NULL, |
| | 151 | guest_count int4 NOT NULL, |
| | 152 | total_price numeric(10, 2) NOT NULL, |
| | 153 | booking_status varchar(30) NOT NULL, |
| | 154 | created_at timestamp NOT NULL, |
| | 155 | PRIMARY KEY (booking_id), |
| | 156 | CONSTRAINT chk_booking_dates CHECK (check_out_date > check_in_date), |
| | 157 | CONSTRAINT FKBooking733456 FOREIGN KEY (guest_id) REFERENCES Guest (guest_id), |
| | 158 | CONSTRAINT FKBooking932562 FOREIGN KEY (property_id) REFERENCES Property (property_id), |
| | 159 | CONSTRAINT FKBooking711414 FOREIGN KEY (room_id) REFERENCES Room (room_id) |
| | 160 | ); |
| 132 | | booking_guest_id int8 NOT NULL, |
| 133 | | booking_id int8 NOT NULL, |
| 134 | | guest_id int8 NOT NULL, |
| 135 | | full_name varchar(100) NOT NULL, |
| 136 | | age int4 NOT NULL, |
| 137 | | document_number varchar(50), |
| 138 | | is_primary_guest bool NOT NULL, |
| 139 | | PRIMARY KEY (booking_guest_id)); |
| 140 | | |
| 141 | | CREATE TABLE Payment ( |
| 142 | | payment_id int8 NOT NULL, |
| 143 | | booking_id int8 NOT NULL, |
| 144 | | amount numeric(10, 2) NOT NULL, |
| 145 | | payment_date timestamp NOT NULL, |
| 146 | | payment_method_id int8 NOT NULL, |
| 147 | | payment_status varchar(30) NOT NULL, |
| 148 | | transaction_reference varchar(100), |
| 149 | | PRIMARY KEY (payment_id)); |
| 150 | | |
| | 162 | booking_guest_id int8 NOT NULL, |
| | 163 | booking_id int8 NOT NULL, |
| | 164 | guest_id int8 NOT NULL, |
| | 165 | full_name varchar(100) NOT NULL, |
| | 166 | age int4 NOT NULL, |
| | 167 | document_number varchar(50), |
| | 168 | is_primary_guest bool NOT NULL, |
| | 169 | PRIMARY KEY (booking_guest_id), |
| | 170 | CONSTRAINT FKBookingGue951829 FOREIGN KEY (booking_id) REFERENCES Booking (booking_id), |
| | 171 | CONSTRAINT FKBookingGue340084 FOREIGN KEY (guest_id) REFERENCES Guest (guest_id) |
| | 172 | ); |
| 155 | | PRIMARY KEY (payment_method_id)); |
| 156 | | |
| | 177 | PRIMARY KEY (payment_method_id) |
| | 178 | ); |
| | 179 | CREATE TABLE Payment ( |
| | 180 | payment_id int8 NOT NULL, |
| | 181 | booking_id int8 NOT NULL, |
| | 182 | amount numeric(10, 2) NOT NULL, |
| | 183 | payment_date timestamp NOT NULL, |
| | 184 | payment_method_id int8 NOT NULL, |
| | 185 | payment_status varchar(30) NOT NULL, |
| | 186 | transaction_reference varchar(100), |
| | 187 | PRIMARY KEY (payment_id), |
| | 188 | CONSTRAINT FKPayment809900 FOREIGN KEY (booking_id) REFERENCES Booking (booking_id), |
| | 189 | CONSTRAINT FKPayment187362 FOREIGN KEY (payment_method_id) REFERENCES PaymentMethod (payment_method_id) |
| | 190 | ); |
| 158 | | review_id int8 NOT NULL, |
| 159 | | booking_id int8 NOT NULL UNIQUE, |
| 160 | | guest_id int8 NOT NULL, |
| 161 | | property_id int8 NOT NULL, |
| 162 | | rating int4 NOT NULL, |
| 163 | | comment text, |
| 164 | | review_date timestamp NOT NULL, |
| 165 | | PRIMARY KEY (review_id), |
| 166 | | CONSTRAINT chk_rating_range |
| 167 | | CHECK (rating >= 1 AND rating <= 5)); |
| 168 | | |
| | 192 | review_id int8 NOT NULL, |
| | 193 | booking_id int8 NOT NULL UNIQUE, |
| | 194 | guest_id int8 NOT NULL, |
| | 195 | property_id int8 NOT NULL, |
| | 196 | rating int4 NOT NULL, |
| | 197 | comment text, |
| | 198 | review_date timestamp NOT NULL, |
| | 199 | PRIMARY KEY (review_id), |
| | 200 | CONSTRAINT chk_rating_range CHECK (rating >= 1 AND rating <= 5), |
| | 201 | CONSTRAINT FKReview586694 FOREIGN KEY (guest_id) REFERENCES Guest (guest_id), |
| | 202 | CONSTRAINT FKReview785800 FOREIGN KEY (property_id) REFERENCES Property (property_id), |
| | 203 | CONSTRAINT FKReview705219 FOREIGN KEY (booking_id) REFERENCES Booking (booking_id) |
| | 204 | ); |
| 170 | | favorite_id int8 NOT NULL, |
| 171 | | guest_id int8 NOT NULL, |
| 172 | | property_id int8 NOT NULL, |
| 173 | | created_at timestamp NOT NULL, |
| 174 | | PRIMARY KEY (favorite_id), |
| 175 | | CONSTRAINT unique_const |
| 176 | | UNIQUE (guest_id, property_id)); |
| 177 | | |
| | 206 | favorite_id int8 NOT NULL, |
| | 207 | guest_id int8 NOT NULL, |
| | 208 | property_id int8 NOT NULL, |
| | 209 | created_at timestamp NOT NULL, |
| | 210 | PRIMARY KEY (favorite_id), |
| | 211 | CONSTRAINT unique_const UNIQUE (guest_id, property_id), |
| | 212 | CONSTRAINT FKFavorite639091 FOREIGN KEY (guest_id) REFERENCES Guest (guest_id), |
| | 213 | CONSTRAINT FKFavorite838197 FOREIGN KEY (property_id) REFERENCES Property (property_id) |
| | 214 | ); |
| 179 | | message_id int8 NOT NULL, |
| 180 | | sender_user_id int8 NOT NULL, |
| 181 | | reciever_user_id int8 NOT NULL, |
| 182 | | booking_id int8 NOT NULL, |
| 183 | | property_id int8 NOT NULL, |
| 184 | | message_text text NOT NULL, |
| 185 | | sent_at timestamp NOT NULL, |
| 186 | | is_read bool NOT NULL, |
| 187 | | PRIMARY KEY (message_id)); |
| 188 | | |
| | 216 | message_id int8 NOT NULL, |
| | 217 | sender_user_id int8 NOT NULL, |
| | 218 | reciever_user_id int8 NOT NULL, |
| | 219 | booking_id int8 NOT NULL, |
| | 220 | property_id int8 NOT NULL, |
| | 221 | message_text text NOT NULL, |
| | 222 | sent_at timestamp NOT NULL, |
| | 223 | is_read bool NOT NULL, |
| | 224 | PRIMARY KEY (message_id), |
| | 225 | CONSTRAINT FKMessage71564 FOREIGN KEY (sender_user_id) REFERENCES "User" (user_id), |
| | 226 | CONSTRAINT FKMessage798241 FOREIGN KEY (booking_id) REFERENCES Booking (booking_id), |
| | 227 | CONSTRAINT FKMessage715611 FOREIGN KEY (reciever_user_id) REFERENCES "User" (user_id), |
| | 228 | CONSTRAINT FKMessage307221 FOREIGN KEY (property_id) REFERENCES Property (property_id) |
| | 229 | ); |
| 190 | | discount_id int8 NOT NULL, |
| 191 | | property_id int8 NOT NULL, |
| 192 | | host_id int8 NOT NULL, |
| 193 | | discount_type varchar(30) NOT NULL, |
| 194 | | discount_value numeric(10, 2) NOT NULL, |
| 195 | | start_date date NOT NULL, |
| 196 | | end_date date NOT NULL, |
| 197 | | is_active bool NOT NULL, |
| 198 | | PRIMARY KEY (discount_id), |
| 199 | | CONSTRAINT chk_discount_dates |
| 200 | | CHECK (end_date >= start_date)); |
| 201 | | |
| 202 | | CREATE TABLE "User" ( |
| 203 | | user_id int8 NOT NULL, |
| 204 | | first_name varchar(100) NOT NULL, |
| 205 | | last_name varchar(100) NOT NULL, |
| 206 | | email varchar(255) NOT NULL UNIQUE, |
| 207 | | password_hash text NOT NULL, |
| 208 | | phone varchar(30), |
| 209 | | date_of_birth date, |
| 210 | | profile_image varchar(500), |
| 211 | | created_at timestamp NOT NULL, |
| 212 | | status varchar(30) NOT NULL, |
| 213 | | PRIMARY KEY (user_id), |
| 214 | | CONSTRAINT chk_user_email_format |
| 215 | | CHECK (email LIKE '^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}$') |
| 216 | | ); |
| 217 | | |
| 218 | | |
| 219 | | ALTER TABLE UserRole ADD CONSTRAINT FKUserRole510371 FOREIGN KEY (user_id) REFERENCES "User" (user_id); |
| 220 | | ALTER TABLE UserRole ADD CONSTRAINT FKUserRole537901 FOREIGN KEY (role_id) REFERENCES Role (role_id); |
| 221 | | ALTER TABLE Host ADD CONSTRAINT FKHost364816 FOREIGN KEY (user_id) REFERENCES "User" (user_id); |
| 222 | | ALTER TABLE Guest ADD CONSTRAINT FKGuest463773 FOREIGN KEY (user_id) REFERENCES "User" (user_id); |
| 223 | | ALTER TABLE City ADD CONSTRAINT FKCity681686 FOREIGN KEY (country_id) REFERENCES Country (country_id); |
| 224 | | ALTER TABLE Address ADD CONSTRAINT FKAddress542818 FOREIGN KEY (country_id) REFERENCES Country (country_id); |
| 225 | | ALTER TABLE Address ADD CONSTRAINT FKAddress943654 FOREIGN KEY (city_id) REFERENCES City (city_id); |
| 226 | | ALTER TABLE Property ADD CONSTRAINT FKProperty146200 FOREIGN KEY (host_id) REFERENCES Host (host_id); |
| 227 | | ALTER TABLE Property ADD CONSTRAINT FKProperty26489 FOREIGN KEY (property_type_id) REFERENCES PropertyType (property_type_id); |
| 228 | | ALTER TABLE Property ADD CONSTRAINT FKProperty394643 FOREIGN KEY (address_id) REFERENCES Address (address_id); |
| 229 | | ALTER TABLE PropertyImage ADD CONSTRAINT FKPropertyIm748462 FOREIGN KEY (property_id) REFERENCES Property (property_id); |
| 230 | | ALTER TABLE Room ADD CONSTRAINT FKRoom250935 FOREIGN KEY (property_id) REFERENCES Property (property_id); |
| 231 | | ALTER TABLE Availability ADD CONSTRAINT FKAvailabili408544 FOREIGN KEY (property_id) REFERENCES Property (property_id); |
| 232 | | ALTER TABLE Availability ADD CONSTRAINT FKAvailabili235433 FOREIGN KEY (room_id) REFERENCES Room (room_id); |
| 233 | | ALTER TABLE Booking ADD CONSTRAINT FKBooking733456 FOREIGN KEY (guest_id) REFERENCES Guest (guest_id); |
| 234 | | ALTER TABLE Booking ADD CONSTRAINT FKBooking932562 FOREIGN KEY (property_id) REFERENCES Property (property_id); |
| 235 | | ALTER TABLE Booking ADD CONSTRAINT FKBooking711414 FOREIGN KEY (room_id) REFERENCES Room (room_id); |
| 236 | | ALTER TABLE BookingGuest ADD CONSTRAINT FKBookingGue951829 FOREIGN KEY (booking_id) REFERENCES Booking (booking_id); |
| 237 | | ALTER TABLE Payment ADD CONSTRAINT FKPayment809900 FOREIGN KEY (booking_id) REFERENCES Booking (booking_id); |
| 238 | | ALTER TABLE Review ADD CONSTRAINT FKReview586694 FOREIGN KEY (guest_id) REFERENCES Guest (guest_id); |
| 239 | | ALTER TABLE Review ADD CONSTRAINT FKReview785800 FOREIGN KEY (property_id) REFERENCES Property (property_id); |
| 240 | | ALTER TABLE Review ADD CONSTRAINT FKReview705219 FOREIGN KEY (booking_id) REFERENCES Booking (booking_id); |
| 241 | | ALTER TABLE Favorite ADD CONSTRAINT FKFavorite639091 FOREIGN KEY (guest_id) REFERENCES Guest (guest_id); |
| 242 | | ALTER TABLE Favorite ADD CONSTRAINT FKFavorite838197 FOREIGN KEY (property_id) REFERENCES Property (property_id); |
| 243 | | ALTER TABLE Message ADD CONSTRAINT FKMessage71564 FOREIGN KEY (sender_user_id) REFERENCES "User" (user_id); |
| 244 | | ALTER TABLE Message ADD CONSTRAINT FKMessage798241 FOREIGN KEY (booking_id) REFERENCES Booking (booking_id); |
| 245 | | ALTER TABLE Discount ADD CONSTRAINT FKDiscount526380 FOREIGN KEY (property_id) REFERENCES Property (property_id); |
| 246 | | ALTER TABLE PropertyAmenity ADD CONSTRAINT FKPropertyAm351867 FOREIGN KEY (property_id) REFERENCES Property (property_id); |
| 247 | | ALTER TABLE Payment ADD CONSTRAINT FKPayment187362 FOREIGN KEY (payment_method_id) REFERENCES PaymentMethod (payment_method_id); |
| 248 | | ALTER TABLE BookingGuest ADD CONSTRAINT FKBookingGue340084 FOREIGN KEY (guest_id) REFERENCES Guest (guest_id); |
| 249 | | ALTER TABLE PropertyAmenity ADD CONSTRAINT FKPropertyAm118382 FOREIGN KEY (amenity_id) REFERENCES Amenity (amenity_id); |
| 250 | | ALTER TABLE Discount ADD CONSTRAINT FKDiscount498768 FOREIGN KEY (host_id) REFERENCES Host (host_id); |
| 251 | | ALTER TABLE Message ADD CONSTRAINT FKMessage715611 FOREIGN KEY (reciever_user_id) REFERENCES "User" (user_id); |
| 252 | | ALTER TABLE Message ADD CONSTRAINT FKMessage307221 FOREIGN KEY (property_id) REFERENCES Property (property_id); |
| | 231 | discount_id int8 NOT NULL, |
| | 232 | property_id int8 NOT NULL, |
| | 233 | host_id int8 NOT NULL, |
| | 234 | discount_type varchar(30) NOT NULL, |
| | 235 | discount_value numeric(10, 2) NOT NULL, |
| | 236 | start_date date NOT NULL, |
| | 237 | end_date date NOT NULL, |
| | 238 | is_active bool NOT NULL, |
| | 239 | PRIMARY KEY (discount_id), |
| | 240 | CONSTRAINT chk_discount_dates CHECK (end_date >= start_date), |
| | 241 | CONSTRAINT FKDiscount526380 FOREIGN KEY (property_id) REFERENCES Property (property_id), |
| | 242 | CONSTRAINT FKDiscount498768 FOREIGN KEY (host_id) REFERENCES Host (host_id) |
| | 243 | ); |