| 1 | -- 1. User
|
|---|
| 2 | CREATE TABLE "User" (
|
|---|
| 3 | user_id SERIAL PRIMARY KEY,
|
|---|
| 4 | name VARCHAR(255) NOT NULL DEFAULT 'Unknown',
|
|---|
| 5 | surname VARCHAR(255) NOT NULL DEFAULT 'Unknown',
|
|---|
| 6 | email VARCHAR(255) UNIQUE,
|
|---|
| 7 | telephone_num VARCHAR(20),
|
|---|
| 8 | date_registration DATE,
|
|---|
| 9 | type VARCHAR(10) NOT NULL,
|
|---|
| 10 | ssn varchar(13) NOT NULL UNIQUE,
|
|---|
| 11 | CHECK (length(trim(name)) > 0 AND length(trim(surname)) > 0),
|
|---|
| 12 | CHECK (type IN ('guest', 'host')),
|
|---|
| 13 | CHECK (date_registration <= CURRENT_DATE),
|
|---|
| 14 | CHECK (email ~ '^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}$')
|
|---|
| 15 | );
|
|---|
| 16 |
|
|---|
| 17 | -- 2. Guest
|
|---|
| 18 | CREATE TABLE Guest (
|
|---|
| 19 | UseruserId int4 PRIMARY KEY,
|
|---|
| 20 | num_reservations int4 NOT NULL DEFAULT 0,
|
|---|
| 21 | preference_type VARCHAR(100) NOT NULL,
|
|---|
| 22 | FOREIGN KEY (UseruserId) REFERENCES "User"(user_id) ON DELETE CASCADE,
|
|---|
| 23 | CHECK (num_reservations >= 0)
|
|---|
| 24 | );
|
|---|
| 25 |
|
|---|
| 26 | -- 3. Host
|
|---|
| 27 | CREATE TABLE Host (
|
|---|
| 28 | UseruserId int4 PRIMARY KEY,
|
|---|
| 29 | IBAN VARCHAR(34) NOT NULL,
|
|---|
| 30 | average_score int4,
|
|---|
| 31 | is_verified VARCHAR(3) NOT NULL DEFAULT 'no',
|
|---|
| 32 | FOREIGN KEY (UseruserId) REFERENCES "User"(user_id) ON DELETE CASCADE,
|
|---|
| 33 | CHECK (is_verified IN ('yes', 'no')),
|
|---|
| 34 | CHECK (average_score BETWEEN 1 AND 5 OR average_score IS NULL),
|
|---|
| 35 | CHECK (IBAN ~ '^[A-Z]{2}[0-9]{2}[A-Z0-9]{11,30}$')
|
|---|
| 36 | );
|
|---|
| 37 |
|
|---|
| 38 | -- 4. CampType
|
|---|
| 39 | CREATE TABLE CampType (
|
|---|
| 40 | typeId SERIAL PRIMARY KEY,
|
|---|
| 41 | type_name VARCHAR(100) NOT NULL UNIQUE,
|
|---|
| 42 | description VARCHAR(255)
|
|---|
| 43 | );
|
|---|
| 44 |
|
|---|
| 45 | -- 5. CampLocation
|
|---|
| 46 | CREATE TABLE CampLocation (
|
|---|
| 47 | campLocationId SERIAL PRIMARY KEY,
|
|---|
| 48 | CampTypetypeId int4 NOT NULL,
|
|---|
| 49 | name VARCHAR(255) NOT NULL,
|
|---|
| 50 | description varchar(255),
|
|---|
| 51 | type VARCHAR(20) NOT NULL,
|
|---|
| 52 | max_guests int4 NOT NULL,
|
|---|
| 53 | min_nights_stay int4 NOT NULL,
|
|---|
| 54 | status VARCHAR(20) NOT NULL DEFAULT 'active',
|
|---|
| 55 | season VARCHAR(20) NOT NULL,
|
|---|
| 56 | opening_date DATE NOT NULL,
|
|---|
| 57 | closing_date DATE NOT NULL,
|
|---|
| 58 | FOREIGN KEY (CampTypetypeId) REFERENCES CampType(typeId) ON DELETE CASCADE,
|
|---|
| 59 | CHECK (closing_date > opening_date),
|
|---|
| 60 | CHECK (max_guests > 0),
|
|---|
| 61 | CHECK (min_nights_stay > 0),
|
|---|
| 62 | CHECK (status IN ('active', 'inactive', 'closed')),
|
|---|
| 63 | CHECK (season IN ('spring', 'summer', 'autumn', 'winter', 'all')),
|
|---|
| 64 | CHECK (type IN ('tent', 'cabin', 'bungalow')),
|
|---|
| 65 | CHECK (length(trim(name)) > 0)
|
|---|
| 66 | );
|
|---|
| 67 |
|
|---|
| 68 | -- 6. Promotion
|
|---|
| 69 | CREATE TABLE Promotion (
|
|---|
| 70 | promotionId SERIAL PRIMARY KEY,
|
|---|
| 71 | HostUserUserId int4 NOT NULL,
|
|---|
| 72 | promo_code VARCHAR(50) NOT NULL UNIQUE,
|
|---|
| 73 | discount_percent int4 NOT NULL DEFAULT 0,
|
|---|
| 74 | discount_amount NUMERIC(10,2) NOT NULL DEFAULT 0,
|
|---|
| 75 | valid_from DATE NOT NULL,
|
|---|
| 76 | valid_to DATE NOT NULL,
|
|---|
| 77 | description varchar(255),
|
|---|
| 78 | FOREIGN KEY (HostUserUserId) REFERENCES Host(UseruserId) ON DELETE CASCADE,
|
|---|
| 79 | CHECK (valid_to >= valid_from),
|
|---|
| 80 | CHECK (
|
|---|
| 81 | (discount_percent>0 AND discount_amount = 0)
|
|---|
| 82 | OR
|
|---|
| 83 | (discount_amount>0 AND discount_percent = 0)
|
|---|
| 84 | ),
|
|---|
| 85 | CHECK (discount_percent BETWEEN 0 AND 100),
|
|---|
| 86 | CHECK (discount_amount >= 0)
|
|---|
| 87 | );
|
|---|
| 88 |
|
|---|
| 89 | CREATE EXTENSION IF NOT EXISTS btree_gist;
|
|---|
| 90 | -- 7. Reservation
|
|---|
| 91 | CREATE TABLE Reservation (
|
|---|
| 92 | reservationId SERIAL PRIMARY KEY,
|
|---|
| 93 | GuestUseruserId int4,
|
|---|
| 94 | PromotionpromotionId int4,
|
|---|
| 95 | CampLocationcamplocationId int4 NOT NULL,
|
|---|
| 96 | number_of_guests int4 NOT NULL,
|
|---|
| 97 | reservation_status VARCHAR(20) NOT NULL DEFAULT 'pending',
|
|---|
| 98 | check_in_date DATE NOT NULL,
|
|---|
| 99 | check_out_date DATE NOT NULL,
|
|---|
| 100 | created_at DATE NOT NULL DEFAULT CURRENT_DATE,
|
|---|
| 101 | total_price NUMERIC(12,2) NOT NULL,
|
|---|
| 102 | FOREIGN KEY (GuestUseruserId) REFERENCES Guest(UseruserId) ON DELETE SET NULL,
|
|---|
| 103 | FOREIGN KEY (PromotionpromotionId) REFERENCES Promotion(promotionId) ON DELETE SET NULL,
|
|---|
| 104 | FOREIGN KEY (CampLocationcamplocationId) REFERENCES CampLocation(campLocationId) ON DELETE RESTRICT,
|
|---|
| 105 | CHECK (number_of_guests > 0),
|
|---|
| 106 | CHECK (total_price >= 0),
|
|---|
| 107 | CHECK (reservation_status IN ('pending', 'confirmed', 'cancelled', 'completed')),
|
|---|
| 108 | CHECK (check_out_date > check_in_date),
|
|---|
| 109 | CHECK (created_at <= check_in_date),
|
|---|
| 110 | EXCLUDE USING gist (
|
|---|
| 111 | CampLocationcamplocationId WITH =,
|
|---|
| 112 | daterange(check_in_date, check_out_date, '[]') WITH &&
|
|---|
| 113 | )
|
|---|
| 114 | );
|
|---|
| 115 |
|
|---|
| 116 | -- 8. Payment
|
|---|
| 117 | CREATE TABLE Payment (
|
|---|
| 118 | paymentId SERIAL PRIMARY KEY,
|
|---|
| 119 | ReservationreservationId int4 NOT NULL,
|
|---|
| 120 | amount NUMERIC(12,2) NOT NULL,
|
|---|
| 121 | payment_method VARCHAR(20) NOT NULL,
|
|---|
| 122 | payment_date DATE NOT NULL,
|
|---|
| 123 | transaction_reference VARCHAR(50),
|
|---|
| 124 | payment_status VARCHAR(30) NOT NULL,
|
|---|
| 125 | FOREIGN KEY (ReservationreservationId) REFERENCES Reservation(reservationId) ON DELETE RESTRICT,
|
|---|
| 126 | CHECK (amount > 0),
|
|---|
| 127 | CHECK (payment_method IN ('online','cash')),
|
|---|
| 128 | CHECK (payment_status IN ('pending','completed','failed','refunded','partially_refunded')),
|
|---|
| 129 | CHECK (payment_date <= CURRENT_DATE)
|
|---|
| 130 | );
|
|---|
| 131 |
|
|---|
| 132 | -- 9. ReservationStatus
|
|---|
| 133 | CREATE TABLE ReservationStatus (
|
|---|
| 134 | statusReservationId SERIAL PRIMARY KEY,
|
|---|
| 135 | ReservationreservationId int4 NOT NULL,
|
|---|
| 136 | refund_amount NUMERIC(12,2) NOT NULL DEFAULT 0,
|
|---|
| 137 | cancellation_date DATE,
|
|---|
| 138 | FOREIGN KEY (ReservationreservationId) REFERENCES Reservation(reservationId) ON DELETE RESTRICT,
|
|---|
| 139 | CHECK (refund_amount >= 0),
|
|---|
| 140 | CHECK (cancellation_date IS NULL OR cancellation_date <= CURRENT_DATE)
|
|---|
| 141 | );
|
|---|
| 142 |
|
|---|
| 143 | -- 10. Activity
|
|---|
| 144 | CREATE TABLE Activity (
|
|---|
| 145 | activity_id SERIAL PRIMARY KEY,
|
|---|
| 146 | location_id int4 NOT NULL,
|
|---|
| 147 | name VARCHAR(255) NOT NULL,
|
|---|
| 148 | description varchar(255),
|
|---|
| 149 | price_per_person int4 NOT NULL,
|
|---|
| 150 | max_participants int4 NOT NULL,
|
|---|
| 151 | duration_hours int4 NOT NULL,
|
|---|
| 152 | difficulty_level int4,
|
|---|
| 153 | equipment_provided varchar(255),
|
|---|
| 154 | CHECK (price_per_person >= 0),
|
|---|
| 155 | CHECK (max_participants > 0),
|
|---|
| 156 | CHECK (duration_hours > 0),
|
|---|
| 157 | CHECK (difficulty_level BETWEEN 1 AND 5 OR difficulty_level IS NULL)
|
|---|
| 158 | );
|
|---|
| 159 |
|
|---|
| 160 | -- 11. ReservationActivity
|
|---|
| 161 | CREATE TABLE ReservationActivity (
|
|---|
| 162 | ReservationActivityId SERIAL PRIMARY KEY,
|
|---|
| 163 | Activityactivity_id int4 NOT NULL,
|
|---|
| 164 | ReservationreservationId int4 NOT NULL,
|
|---|
| 165 | number_of_participants int4 NOT NULL,
|
|---|
| 166 | total_price_for_activity NUMERIC(12,2) NOT NULL,
|
|---|
| 167 | status VARCHAR(20),
|
|---|
| 168 | booking_date DATE NOT NULL,
|
|---|
| 169 | FOREIGN KEY (Activityactivity_id) REFERENCES Activity(activity_id) ON DELETE RESTRICT,
|
|---|
| 170 | FOREIGN KEY (ReservationreservationId) REFERENCES Reservation(reservationId) ON DELETE RESTRICT,
|
|---|
| 171 | CHECK (number_of_participants > 0),
|
|---|
| 172 | CHECK (status IN ('booked','completed','cancelled')),
|
|---|
| 173 | CHECK (booking_date <= CURRENT_DATE)
|
|---|
| 174 | );
|
|---|
| 175 |
|
|---|
| 176 | -- 12. ActivityReview
|
|---|
| 177 | CREATE TABLE ActivityReview (
|
|---|
| 178 | activityReviewId SERIAL PRIMARY KEY,
|
|---|
| 179 | GuestUseruserId int4,
|
|---|
| 180 | Activityactivity_id int4 NOT NULL,
|
|---|
| 181 | rating int4 NOT NULL,
|
|---|
| 182 | comment varchar(255),
|
|---|
| 183 | review_date DATE NOT NULL DEFAULT CURRENT_DATE,
|
|---|
| 184 | FOREIGN KEY (GuestUseruserId) REFERENCES Guest(UseruserId) ON DELETE SET NULL,
|
|---|
| 185 | FOREIGN KEY (Activityactivity_id) REFERENCES Activity(activity_id) ON DELETE CASCADE,
|
|---|
| 186 | CHECK (rating BETWEEN 1 AND 5),
|
|---|
| 187 | CHECK (review_date <= CURRENT_DATE)
|
|---|
| 188 | );
|
|---|
| 189 |
|
|---|
| 190 | -- 13. Review
|
|---|
| 191 | CREATE TABLE Review (
|
|---|
| 192 | reviewId SERIAL PRIMARY KEY,
|
|---|
| 193 | CampLocationcampLocationId int4 NOT NULL,
|
|---|
| 194 | GuestUseruserId int4,
|
|---|
| 195 | review_date DATE NOT NULL DEFAULT CURRENT_DATE,
|
|---|
| 196 | comment varchar(255),
|
|---|
| 197 | rating int4,
|
|---|
| 198 | FOREIGN KEY (CampLocationcampLocationId) REFERENCES CampLocation(campLocationId) ON DELETE CASCADE,
|
|---|
| 199 | FOREIGN KEY (GuestUseruserId) REFERENCES Guest(UseruserId) ON DELETE SET NULL,
|
|---|
| 200 | CHECK (rating BETWEEN 1 AND 5),
|
|---|
| 201 | CHECK (review_date <= CURRENT_DATE)
|
|---|
| 202 | );
|
|---|
| 203 |
|
|---|
| 204 | -- 14. EquipmentType
|
|---|
| 205 | CREATE TABLE EquipmentType (
|
|---|
| 206 | EquipmentTypeId SERIAL PRIMARY KEY,
|
|---|
| 207 | type_name VARCHAR(100) NOT NULL UNIQUE,
|
|---|
| 208 | description VARCHAR(255)
|
|---|
| 209 | );
|
|---|
| 210 |
|
|---|
| 211 | -- 15. Equipment
|
|---|
| 212 | CREATE TABLE Equipment (
|
|---|
| 213 | equipmentId SERIAL PRIMARY KEY,
|
|---|
| 214 | EquipmentTypeEquipmentTypeId int4 NOT NULL,
|
|---|
| 215 | CampLocationcampLocationId int4,
|
|---|
| 216 | name VARCHAR(255) NOT NULL,
|
|---|
| 217 | description varchar(255),
|
|---|
| 218 | total_quantity int4 NOT NULL,
|
|---|
| 219 | available_quantity int4 NOT NULL,
|
|---|
| 220 | rental_price_per_day NUMERIC(10,2) NOT NULL,
|
|---|
| 221 | deposit_amount NUMERIC(10,2) NOT NULL DEFAULT 0,
|
|---|
| 222 | condition_status VARCHAR(20),
|
|---|
| 223 | is_available VARCHAR(3) NOT NULL DEFAULT 'yes',
|
|---|
| 224 | FOREIGN KEY (EquipmentTypeEquipmentTypeId) REFERENCES EquipmentType(EquipmentTypeId) ON DELETE CASCADE,
|
|---|
| 225 | FOREIGN KEY (CampLocationcampLocationId) REFERENCES CampLocation(campLocationId) ON DELETE SET NULL,
|
|---|
| 226 | CHECK (available_quantity <= total_quantity),
|
|---|
| 227 | CHECK (total_quantity > 0 AND available_quantity >= 0),
|
|---|
| 228 | CHECK (condition_status IN ('new','good','fair','poor','under_repair')),
|
|---|
| 229 | CHECK (is_available IN ('yes','no')),
|
|---|
| 230 | CHECK (deposit_amount >= 0)
|
|---|
| 231 | );
|
|---|
| 232 |
|
|---|
| 233 | -- 16. EquipmentRental
|
|---|
| 234 | CREATE TABLE EquipmentRental (
|
|---|
| 235 | equipmentRentalId SERIAL PRIMARY KEY,
|
|---|
| 236 | EquipmentequipmentId int4 NOT NULL DEFAULT 0,
|
|---|
| 237 | ReservationreservationId int4,
|
|---|
| 238 | quantity int4 NOT NULL,
|
|---|
| 239 | start_date DATE NOT NULL,
|
|---|
| 240 | end_date DATE NOT NULL,
|
|---|
| 241 | total_price NUMERIC(12,2) NOT NULL,
|
|---|
| 242 | deposit_paid NUMERIC(12,2) NOT NULL,
|
|---|
| 243 | status VARCHAR(20) NOT NULL ,
|
|---|
| 244 | FOREIGN KEY (EquipmentequipmentId) REFERENCES Equipment(equipmentId) ON DELETE SET DEFAULT,
|
|---|
| 245 | FOREIGN KEY (ReservationreservationId) REFERENCES Reservation(reservationId) ON DELETE RESTRICT,
|
|---|
| 246 | CHECK (quantity > 0),
|
|---|
| 247 | CHECK (end_date > start_date),
|
|---|
| 248 | CHECK (status IN ('active','returned','overdue','cancelled','damaged')),
|
|---|
| 249 | CHECK (deposit_paid >= 0),
|
|---|
| 250 | CHECK (total_price >= 0)
|
|---|
| 251 | );
|
|---|
| 252 |
|
|---|
| 253 | -- 17. Service
|
|---|
| 254 | CREATE TABLE Service (
|
|---|
| 255 | serviceId SERIAL PRIMARY KEY,
|
|---|
| 256 | service_name VARCHAR(100) NOT NULL,
|
|---|
| 257 | description varchar(255),
|
|---|
| 258 | additional_fee NUMERIC(10,2) NOT NULL
|
|---|
| 259 | );
|
|---|
| 260 |
|
|---|
| 261 | -- 18. Availability
|
|---|
| 262 | CREATE TABLE Availability (
|
|---|
| 263 | availabilityId SERIAL PRIMARY KEY,
|
|---|
| 264 | available_from_date DATE NOT NULL,
|
|---|
| 265 | available_to_date DATE NOT NULL,
|
|---|
| 266 | status VARCHAR(20) NOT NULL,
|
|---|
| 267 | CHECK (available_to_date >= available_from_date)
|
|---|
| 268 | );
|
|---|
| 269 |
|
|---|
| 270 | -- 19. EmergencyContact
|
|---|
| 271 | CREATE TABLE EmergencyContact (
|
|---|
| 272 | emergencyContactId SERIAL PRIMARY KEY,
|
|---|
| 273 | CampLocationcampLocationId int4 NOT NULL,
|
|---|
| 274 | contact_name VARCHAR(255) NOT NULL,
|
|---|
| 275 | phone_number VARCHAR(20) NOT NULL,
|
|---|
| 276 | created_at DATE NOT NULL,
|
|---|
| 277 | FOREIGN KEY (CampLocationcampLocationId) REFERENCES CampLocation(campLocationId) ON DELETE CASCADE
|
|---|
| 278 | );
|
|---|
| 279 |
|
|---|
| 280 | -- 20. PriceHistory
|
|---|
| 281 | CREATE TABLE PriceHistory (
|
|---|
| 282 | priceHistoryId SERIAL PRIMARY KEY,
|
|---|
| 283 | CampLocationcampLocationId int4,
|
|---|
| 284 | price_per_night NUMERIC(12,2) NOT NULL,
|
|---|
| 285 | date_from DATE NOT NULL,
|
|---|
| 286 | date_to DATE NOT NULL,
|
|---|
| 287 | FOREIGN KEY (CampLocationcampLocationId) REFERENCES CampLocation(campLocationId) ON DELETE SET NULL,
|
|---|
| 288 | CHECK (date_to >= date_from),
|
|---|
| 289 | CHECK (price_per_night>=0)
|
|---|
| 290 | );
|
|---|
| 291 |
|
|---|
| 292 | -- 21. Message
|
|---|
| 293 | CREATE TABLE "Message" (
|
|---|
| 294 | messageId SERIAL NOT NULL,
|
|---|
| 295 | UseruserId int4 NOT NULL DEFAULT 0,
|
|---|
| 296 | senderId int4 NOT NULL,
|
|---|
| 297 | receiverId int4 NOT NULL,
|
|---|
| 298 | content varchar(1500) NOT NULL,
|
|---|
| 299 | sent_time time(7) NOT NULL,
|
|---|
| 300 | PRIMARY KEY (messageId),
|
|---|
| 301 | FOREIGN KEY (UseruserId) REFERENCES "User"(user_id) ON DELETE SET DEFAULT,
|
|---|
| 302 | CHECK (senderId != receiverId),
|
|---|
| 303 | CHECK (length(trim(content)) > 0)
|
|---|
| 304 | );
|
|---|
| 305 |
|
|---|
| 306 |
|
|---|
| 307 | -- 22. CampLocation - Host
|
|---|
| 308 | CREATE TABLE Host_Host (
|
|---|
| 309 | CampLocationcampLocationId int4 NOT NULL,
|
|---|
| 310 | HostUseruserid int4 NOT NULL,
|
|---|
| 311 | PRIMARY KEY (CampLocationcampLocationId, HostUseruserid),
|
|---|
| 312 | FOREIGN KEY (CampLocationcampLocationId) REFERENCES CampLocation(campLocationId) ON DELETE CASCADE,
|
|---|
| 313 | FOREIGN KEY (HostUseruserid) REFERENCES Host(UseruserId) ON DELETE CASCADE
|
|---|
| 314 | );
|
|---|
| 315 |
|
|---|
| 316 | -- 23. CampLocation - Service
|
|---|
| 317 | CREATE TABLE camp_location_service (
|
|---|
| 318 | ServiceserviceId int4 NOT NULL,
|
|---|
| 319 | CampLocationcampLocationId int4 NOT NULL,
|
|---|
| 320 | PRIMARY KEY (ServiceserviceId, CampLocationcampLocationId),
|
|---|
| 321 | FOREIGN KEY (ServiceserviceId) REFERENCES Service(serviceId) ON DELETE CASCADE,
|
|---|
| 322 | FOREIGN KEY (CampLocationcampLocationId) REFERENCES CampLocation(campLocationId) ON DELETE CASCADE
|
|---|
| 323 | );
|
|---|
| 324 |
|
|---|
| 325 | -- 24. Activity - CampLocation
|
|---|
| 326 | CREATE TABLE Activity_Activity (
|
|---|
| 327 | Activityactivity_id2 int4 NOT NULL,
|
|---|
| 328 | CampLocationcampLocationId int4 NOT NULL,
|
|---|
| 329 | PRIMARY KEY (Activityactivity_id2, CampLocationcampLocationId),
|
|---|
| 330 | FOREIGN KEY (Activityactivity_id2) REFERENCES Activity(activity_id) ON DELETE CASCADE,
|
|---|
| 331 | FOREIGN KEY (CampLocationcampLocationId) REFERENCES CampLocation(campLocationId) ON DELETE CASCADE
|
|---|
| 332 | );
|
|---|
| 333 |
|
|---|
| 334 | -- 25. Guest Favorites
|
|---|
| 335 | CREATE TABLE Favorites (
|
|---|
| 336 | favorite_id SERIAL PRIMARY KEY,
|
|---|
| 337 | locationId int4 NOT NULL,
|
|---|
| 338 | date_added DATE NOT NULL DEFAULT CURRENT_DATE
|
|---|
| 339 |
|
|---|
| 340 | );
|
|---|
| 341 |
|
|---|
| 342 | -- 26. Favorites_Guest_saves (old style - kept for compatibility if needed)
|
|---|
| 343 | CREATE TABLE Favorites_Guest_saves (
|
|---|
| 344 | FavoritesfavoriteId int4 NOT NULL,
|
|---|
| 345 | GuestUseruserId int4 NOT NULL,
|
|---|
| 346 | PRIMARY KEY (FavoritesfavoriteId, GuestUseruserId),
|
|---|
| 347 | FOREIGN KEY (FavoritesfavoriteId) REFERENCES Favorites(favorite_id) ON DELETE CASCADE,
|
|---|
| 348 | FOREIGN KEY (GuestUseruserId) REFERENCES Guest(UseruserId) ON DELETE CASCADE
|
|---|
| 349 | );
|
|---|
| 350 |
|
|---|
| 351 | -- 27. User_Message_receiver
|
|---|
| 352 | CREATE TABLE user_message_receiver (
|
|---|
| 353 | UseruserId int4 NOT NULL,
|
|---|
| 354 | MessagemessageId int4 NOT NULL,
|
|---|
| 355 | PRIMARY KEY (UseruserId, MessagemessageId),
|
|---|
| 356 | FOREIGN KEY (UseruserId) REFERENCES "User"(user_id) ON DELETE CASCADE,
|
|---|
| 357 | FOREIGN KEY (MessagemessageId) REFERENCES "Message"(messageId) ON DELETE CASCADE
|
|---|
| 358 | );
|
|---|
| 359 |
|
|---|
| 360 |
|
|---|
| 361 | --28.Availability_CampLocation_has
|
|---|
| 362 | CREATE TABLE Availability_CampLocation_has (
|
|---|
| 363 | AvailabilityavailabilityId int4 NOT NULL,
|
|---|
| 364 | CampLocationcampLocationId int4 NOT NULL,
|
|---|
| 365 | PRIMARY KEY (AvailabilityavailabilityId, CampLocationcampLocationId),
|
|---|
| 366 | FOREIGN KEY (AvailabilityavailabilityId) REFERENCES Availability(availabilityId) ON DELETE CASCADE,
|
|---|
| 367 | FOREIGN KEY (CampLocationcampLocationId) REFERENCES CampLocation(campLocationId) ON DELETE CASCADE
|
|---|
| 368 | );
|
|---|
| 369 |
|
|---|
| 370 | ALTER TABLE "User"
|
|---|
| 371 | ADD CONSTRAINT ssn_length_check
|
|---|
| 372 | CHECK (length(ssn) = 13);
|
|---|
| 373 |
|
|---|
| 374 | ALTER TABLE Favorites
|
|---|
| 375 | ADD CONSTRAINT fk_favorites_camp
|
|---|
| 376 | FOREIGN KEY (locationId)
|
|---|
| 377 | REFERENCES CampLocation(campLocationId)
|
|---|
| 378 | ON DELETE CASCADE; |
|---|