| 1 | -- CREATE SCHEMA
|
|---|
| 2 | CREATE SCHEMA IF NOT EXISTS project;
|
|---|
| 3 |
|
|---|
| 4 | -- TABLE: ApplicationUser
|
|---|
| 5 | CREATE TABLE project.ApplicationUser (
|
|---|
| 6 | UserID SERIAL PRIMARY KEY,
|
|---|
| 7 | Name VARCHAR(255),
|
|---|
| 8 | Surname VARCHAR(255),
|
|---|
| 9 | Email VARCHAR(255) UNIQUE NOT NULL,
|
|---|
| 10 | Password VARCHAR(255) NOT NULL,
|
|---|
| 11 | PhoneNumber VARCHAR(20),
|
|---|
| 12 | DateJoined TIMESTAMP NOT NULL DEFAULT NOW()
|
|---|
| 13 | );
|
|---|
| 14 |
|
|---|
| 15 | -- TABLE: Destination
|
|---|
| 16 | CREATE TABLE project.Destination (
|
|---|
| 17 | DestinationID SERIAL PRIMARY KEY,
|
|---|
| 18 | Name VARCHAR(255) NOT NULL,
|
|---|
| 19 | Country VARCHAR(255),
|
|---|
| 20 | Description TEXT,
|
|---|
| 21 | PopularAttraction TEXT,
|
|---|
| 22 | BestTimeToVisit VARCHAR(255)
|
|---|
| 23 | );
|
|---|
| 24 |
|
|---|
| 25 | -- TABLE: Airport
|
|---|
| 26 | CREATE TABLE project.Airport (
|
|---|
| 27 | AirportID SERIAL PRIMARY KEY,
|
|---|
| 28 | Name VARCHAR(255) NOT NULL,
|
|---|
| 29 | Country VARCHAR(255),
|
|---|
| 30 | Code VARCHAR(10) UNIQUE,
|
|---|
| 31 | DestinationID INT NOT NULL,
|
|---|
| 32 | CONSTRAINT fk_airport_destination FOREIGN KEY (DestinationID) REFERENCES project.Destination(DestinationID)
|
|---|
| 33 | );
|
|---|
| 34 |
|
|---|
| 35 | -- TABLE: Flight
|
|---|
| 36 | CREATE TABLE project.Flight (
|
|---|
| 37 | FlightID SERIAL PRIMARY KEY,
|
|---|
| 38 | FlightNumber VARCHAR(50) NOT NULL,
|
|---|
| 39 | DepartureAirportID INT NOT NULL,
|
|---|
| 40 | ArrivalAirportID INT NOT NULL,
|
|---|
| 41 | DepartureTime TIMESTAMP NOT NULL,
|
|---|
| 42 | ArrivalTime TIMESTAMP NOT NULL,
|
|---|
| 43 | Price DECIMAL(10,2),
|
|---|
| 44 | AvailableSeats INT,
|
|---|
| 45 | CONSTRAINT fk_flight_departure FOREIGN KEY (DepartureAirportID) REFERENCES project.Airport(AirportID),
|
|---|
| 46 | CONSTRAINT fk_flight_arrival FOREIGN KEY (ArrivalAirportID) REFERENCES project.Airport(AirportID)
|
|---|
| 47 | );
|
|---|
| 48 |
|
|---|
| 49 | -- TABLE: Booking
|
|---|
| 50 | CREATE TABLE project.Booking (
|
|---|
| 51 | BookingID SERIAL PRIMARY KEY,
|
|---|
| 52 | UserID INT NOT NULL,
|
|---|
| 53 | BookingDate TIMESTAMP NOT NULL DEFAULT NOW(),
|
|---|
| 54 | PaymentStatus VARCHAR(20) CHECK (PaymentStatus IN ('Pending','Completed','Cancelled')),
|
|---|
| 55 | TotalCost DECIMAL(10,2),
|
|---|
| 56 | CONSTRAINT fk_booking_user FOREIGN KEY (UserID) REFERENCES project.ApplicationUser(UserID)
|
|---|
| 57 | );
|
|---|
| 58 |
|
|---|
| 59 | -- TABLE: BookingFlight (many-to-many)
|
|---|
| 60 | CREATE TABLE project.BookingFlight (
|
|---|
| 61 | BookingID INT NOT NULL,
|
|---|
| 62 | FlightID INT NOT NULL,
|
|---|
| 63 | SeatNumber INT,
|
|---|
| 64 | PRIMARY KEY (BookingID, FlightID),
|
|---|
| 65 | CONSTRAINT fk_bookingflight_booking FOREIGN KEY (BookingID) REFERENCES project.Booking(BookingID),
|
|---|
| 66 | CONSTRAINT fk_bookingflight_flight FOREIGN KEY (FlightID) REFERENCES project.Flight(FlightID)
|
|---|
| 67 | );
|
|---|
| 68 |
|
|---|
| 69 | -- TABLE: Review
|
|---|
| 70 | CREATE TABLE project.Review (
|
|---|
| 71 | ReviewID SERIAL PRIMARY KEY,
|
|---|
| 72 | UserID INT NOT NULL,
|
|---|
| 73 | BookingID INT NOT NULL,
|
|---|
| 74 | TargetID INT NOT NULL,
|
|---|
| 75 | TargetType VARCHAR(20) CHECK (TargetType IN ('Flight','Destination','Airport')),
|
|---|
| 76 | ReviewComment TEXT,
|
|---|
| 77 | Rating INT CHECK (Rating >= 1 AND Rating <= 5),
|
|---|
| 78 | ReviewDate TIMESTAMP NOT NULL DEFAULT NOW(),
|
|---|
| 79 | CONSTRAINT fk_review_user FOREIGN KEY (UserID) REFERENCES project.ApplicationUser(UserID),
|
|---|
| 80 | CONSTRAINT fk_review_booking FOREIGN KEY (BookingID) REFERENCES project.Booking(BookingID)
|
|---|
| 81 | );
|
|---|
| 82 |
|
|---|
| 83 | -- TABLE: Payment
|
|---|
| 84 | CREATE TABLE project.Payment (
|
|---|
| 85 | PaymentID SERIAL PRIMARY KEY,
|
|---|
| 86 | BookingID INT NOT NULL,
|
|---|
| 87 | UserID INT NOT NULL,
|
|---|
| 88 | PaymentMethod VARCHAR(20) CHECK (PaymentMethod IN ('Credit Card','Debit card','PayPal')),
|
|---|
| 89 | Amount DECIMAL(10,2),
|
|---|
| 90 | TransactionDate TIMESTAMP NOT NULL DEFAULT NOW(),
|
|---|
| 91 | PaymentStatus VARCHAR(20) CHECK (PaymentStatus IN ('Success','Failed','Processing')),
|
|---|
| 92 | CONSTRAINT fk_payment_booking FOREIGN KEY (BookingID) REFERENCES project.Booking(BookingID),
|
|---|
| 93 | CONSTRAINT fk_payment_user FOREIGN KEY (UserID) REFERENCES project.ApplicationUser(UserID)
|
|---|
| 94 | );
|
|---|
| 95 |
|
|---|
| 96 | -- TABLE: Notification
|
|---|
| 97 | CREATE TABLE project.Notification (
|
|---|
| 98 | NotificationID SERIAL PRIMARY KEY,
|
|---|
| 99 | UserID INT NOT NULL,
|
|---|
| 100 | Message TEXT,
|
|---|
| 101 | Type VARCHAR(30) CHECK (Type IN ('Booking Confirmation','Flight Delay','General Update')),
|
|---|
| 102 | DateSent TIMESTAMP NOT NULL DEFAULT NOW(),
|
|---|
| 103 | CONSTRAINT fk_notification_user FOREIGN KEY (UserID) REFERENCES project.ApplicationUser(UserID)
|
|---|
| 104 | );
|
|---|
| 105 |
|
|---|
| 106 | -- TABLE: Wishlist
|
|---|
| 107 | CREATE TABLE project.Wishlist (
|
|---|
| 108 | WishlistID SERIAL PRIMARY KEY,
|
|---|
| 109 | UserID INT NOT NULL,
|
|---|
| 110 | TargetID INT NOT NULL,
|
|---|
| 111 | DateAdded TIMESTAMP NOT NULL DEFAULT NOW(),
|
|---|
| 112 | CONSTRAINT fk_wishlist_user FOREIGN KEY (UserID) REFERENCES project.ApplicationUser(UserID)
|
|---|
| 113 | );
|
|---|
| 114 |
|
|---|
| 115 | -- TABLE: Administrator
|
|---|
| 116 | CREATE TABLE project.Administrator (
|
|---|
| 117 | AdminID SERIAL PRIMARY KEY,
|
|---|
| 118 | Email VARCHAR(255) UNIQUE NOT NULL
|
|---|
| 119 | );
|
|---|
| 120 |
|
|---|
| 121 | -- TABLE: SupportTicket
|
|---|
| 122 | CREATE TABLE project.SupportTicket (
|
|---|
| 123 | TicketID SERIAL PRIMARY KEY,
|
|---|
| 124 | UserID INT NOT NULL,
|
|---|
| 125 | Subject VARCHAR(255),
|
|---|
| 126 | Description TEXT,
|
|---|
| 127 | Status VARCHAR(20) CHECK (Status IN ('Open','In Progress','Resolved')),
|
|---|
| 128 | DateCreated TIMESTAMP NOT NULL DEFAULT NOW(),
|
|---|
| 129 | DateResolved TIMESTAMP,
|
|---|
| 130 | AssignedTo INT,
|
|---|
| 131 | CONSTRAINT fk_ticket_user FOREIGN KEY (UserID) REFERENCES project.ApplicationUser(UserID),
|
|---|
| 132 | CONSTRAINT fk_ticket_admin FOREIGN KEY (AssignedTo) REFERENCES project.Administrator(AdminID)
|
|---|
| 133 | );
|
|---|