DatabaseCreation: console.sql

File console.sql, 16.1 KB (added by 231146, 6 days ago)

ddl.sql

Line 
1CREATE TABLE Passenger
2(
3 PassengerId BIGSERIAL NOT NULL,
4 FirstName varchar(30) NOT NULL,
5 LastName varchar(30) NOT NULL,
6 PassportNumber varchar(30) NOT NULL UNIQUE,
7 Nationality varchar(20) NOT NULL,
8 DateOfBirth date NOT NULL,
9 Gender varchar(10) NOT NULL,
10 PhoneNumber bigint UNIQUE,
11 Email varchar(40) UNIQUE,
12 SeatNumber int,
13 PRIMARY KEY (PassengerId)
14);
15
16CREATE TABLE Airport
17(
18 AirportId BIGSERIAL NOT NULL,
19 AirportName varchar(50) NOT NULL UNIQUE,
20 IataCode varchar(5) NOT NULL UNIQUE,
21 Location text NOT NULL,
22 ContactEmail varchar(40) UNIQUE,
23 ContactPhone bigint UNIQUE,
24 OperationalStatus varchar(20) NOT NULL,
25 CONSTRAINT chk_airport_status CHECK (OperationalStatus IN ('Open', 'Closed', 'Under Maintenance', 'Restricted')),
26 PRIMARY KEY (AirportId)
27);
28
29CREATE TABLE AircraftType
30(
31 AircraftTypeId BIGSERIAL NOT NULL,
32 Manifacturer varchar(50) NOT NULL,
33 Model varchar(30) NOT NULL,
34 Category varchar(30) NOT NULL,
35 PRIMARY KEY (AircraftTypeId)
36);
37
38CREATE TABLE Aircraft
39(
40 AircraftId BIGSERIAL NOT NULL,
41 AircraftModel varchar(20) NOT NULL,
42 Manufacturer varchar(50) NOT NULL,
43 Capacity int NOT NULL,
44 RegistrationNumber varchar(20) NOT NULL UNIQUE,
45 Status varchar(20) NOT NULL,
46 LastInspectionDate date,
47 AircraftTypeId BIGINT,
48 CONSTRAINT chk_aircraft_capacity CHECK (Capacity > 0),
49 CONSTRAINT chk_aircraft_status CHECK (Status IN ('Active', 'Inactive', 'Under Maintenance', 'Retired', 'Grounded')),
50 PRIMARY KEY (AircraftId),
51 FOREIGN KEY (AircraftTypeId) REFERENCES AircraftType (AircraftTypeId) ON DELETE RESTRICT ON UPDATE CASCADE
52);
53
54CREATE TABLE Hangar
55(
56 HangarId BIGSERIAL NOT NULL,
57 HangarName varchar(30) NOT NULL UNIQUE,
58 AirportId BIGINT,
59 HangarCapacity int,
60 HangarType varchar(50) NOT NULL,
61 Status varchar(20) NOT NULL,
62 CONSTRAINT chk_hangar_capacity CHECK (HangarCapacity IS NULL OR HangarCapacity > 0),
63 CONSTRAINT chk_hangar_status CHECK (Status IN ('Open', 'Closed', 'Under Maintenance', 'Full')),
64 PRIMARY KEY (HangarId),
65 FOREIGN KEY (AirportId) REFERENCES Airport (AirportId) ON DELETE RESTRICT ON UPDATE CASCADE
66);
67
68CREATE TABLE Airline
69(
70 AirlineId BIGSERIAL NOT NULL,
71 Name varchar(20) NOT NULL UNIQUE,
72 Country varchar(20) NOT NULL,
73 Contact bigint NOT NULL UNIQUE,
74 Email varchar(30) UNIQUE,
75 PRIMARY KEY (AirlineId)
76);
77
78CREATE TABLE Flights
79(
80 FlightId BIGSERIAL NOT NULL,
81 FlightNumber int NOT NULL UNIQUE,
82 AircraftId BIGINT,
83 ArrivalTime timestamp NOT NULL,
84 DepartureTime timestamp NOT NULL,
85 OriginAirportId BIGINT,
86 DestinationAirportId BIGINT,
87 FlightClass varchar(20) NOT NULL,
88 OperatingStatus varchar(20) NOT NULL,
89 AirlineId BIGINT,
90 CONSTRAINT chk_flight_arrival_after_departure CHECK (ArrivalTime > DepartureTime),
91 CONSTRAINT chk_flight_class CHECK (FlightClass IN ('Economy', 'Premium Economy', 'Business', 'First Class')),
92 CONSTRAINT chk_flight_status CHECK (OperatingStatus IN ('Scheduled', 'Boarding', 'Departed', 'En Route', 'Landed', 'Arrived','Delayed', 'Cancelled', 'Diverted')),
93 PRIMARY KEY (FlightId),
94 FOREIGN KEY (AircraftId) REFERENCES Aircraft (AircraftId) ON DELETE RESTRICT ON UPDATE CASCADE,
95 FOREIGN KEY (OriginAirportId) REFERENCES Airport (AirportId) ON DELETE RESTRICT ON UPDATE CASCADE,
96 FOREIGN KEY (DestinationAirportId) REFERENCES Airport (AirportId) ON DELETE RESTRICT ON UPDATE CASCADE,
97 FOREIGN KEY (AirlineId) REFERENCES Airline (AirlineId) ON DELETE RESTRICT ON UPDATE CASCADE
98);
99
100CREATE TABLE Gate
101(
102 GateId BIGSERIAL NOT NULL,
103 GateCode int NOT NULL,
104 TerminalId BIGINT NOT NULL,
105 Status varchar(20) NOT NULL,
106 CONSTRAINT chk_gate_status CHECK (Status IN ('Open', 'Closed', 'Boarding', 'Occupied', 'Under Maintenance')),
107 UNIQUE (GateCode, TerminalId),
108 PRIMARY KEY (GateId)
109);
110
111CREATE TABLE Runway
112(
113 RunwayId BIGSERIAL NOT NULL,
114 RunwayName varchar(20) NOT NULL,
115 AirportId BIGINT,
116 RunwayLength int,
117 RunwayType varchar(20) NOT NULL,
118 Status varchar(20) NOT NULL,
119 CONSTRAINT chk_runway_length CHECK (RunwayLength IS NULL OR RunwayLength > 0),
120 CONSTRAINT chk_runway_status CHECK (Status IN ('Open', 'Closed', 'Under Maintenance', 'Restricted', 'Occupied')),
121 UNIQUE (RunwayName, AirportId),
122 PRIMARY KEY (RunwayId),
123 FOREIGN KEY (AirportId) REFERENCES Airport (AirportId) ON DELETE RESTRICT ON UPDATE CASCADE
124);
125
126CREATE TABLE Taxiway
127(
128 TaxiwayId BIGSERIAL NOT NULL,
129 TaxiwayName varchar(10) NOT NULL,
130 AirportId BIGINT,
131 TaxiwayLength int NOT NULL,
132 Direction varchar(20) NOT NULL,
133 Status varchar(20) NOT NULL,
134 CONSTRAINT chk_taxiway_length CHECK (TaxiwayLength > 0),
135 CONSTRAINT chk_taxiway_status CHECK (Status IN ('Open', 'Closed', 'Restricted', 'Under Maintenance', 'Occupied', 'Available', 'Blocked', 'Inactive')),
136 UNIQUE (TaxiwayName, AirportId),
137 PRIMARY KEY (TaxiwayId),
138 FOREIGN KEY (AirportId) REFERENCES Airport (AirportId) ON DELETE RESTRICT ON UPDATE CASCADE
139);
140
141CREATE TABLE Terminal
142(
143 TerminalId BIGSERIAL NOT NULL,
144 TerminalName varchar(50) NOT NULL,
145 TerminalCode varchar(10) NOT NULL,
146 AirportId BIGINT,
147 TerminalStatus varchar(20) NOT NULL,
148 Capacity int,
149 CONSTRAINT chk_terminal_capacity CHECK (Capacity IS NULL OR Capacity > 0),
150 CONSTRAINT chk_terminal_status CHECK (TerminalStatus IN ('Open', 'Closed', 'Under Maintenance', 'Restricted')),
151 UNIQUE (TerminalCode, AirportId),
152 PRIMARY KEY (TerminalId),
153 FOREIGN KEY (AirportId) REFERENCES Airport (AirportId) ON DELETE RESTRICT ON UPDATE CASCADE
154);
155
156CREATE TABLE AircraftMaintenance
157(
158 MaintenanceId BIGSERIAL NOT NULL,
159 AircraftId BIGINT,
160 MaintenanceType varchar(20) NOT NULL,
161 StartDate timestamp NOT NULL,
162 EndDate timestamp,
163 DurationMinutes int,
164 WorkDescription text,
165 Status varchar(20) NOT NULL,
166 MaintenanceCost int,
167 AirportId BIGINT,
168 CONSTRAINT chk_maintenance_duration CHECK (DurationMinutes IS NULL OR DurationMinutes > 0),
169 CONSTRAINT chk_maintenance_cost CHECK (MaintenanceCost IS NULL OR MaintenanceCost >= 0),
170 CONSTRAINT chk_maintenance_end_after_start CHECK (EndDate IS NULL OR EndDate > StartDate),
171 CONSTRAINT chk_maintenance_status CHECK (Status IN ('Scheduled', 'In Progress', 'Completed', 'Cancelled', 'On Hold', 'Pending')),
172 PRIMARY KEY (MaintenanceId),
173 FOREIGN KEY (AircraftId) REFERENCES Aircraft (AircraftId) ON DELETE RESTRICT ON UPDATE CASCADE,
174 FOREIGN KEY (AirportId) REFERENCES Airport (AirportId) ON DELETE RESTRICT ON UPDATE CASCADE
175);
176
177CREATE TABLE Arrivals
178(
179 ArrivalId BIGSERIAL NOT NULL,
180 FlightId BIGINT,
181 GateId BIGINT,
182 RunwayId BIGINT,
183 Status varchar(20) NOT NULL,
184 ArrivalTime timestamp,
185 OriginAirportId BIGINT,
186 TaxiwayId BIGINT,
187 PRIMARY KEY (ArrivalId),
188 FOREIGN KEY (FlightId) REFERENCES Flights (FlightId) ON DELETE RESTRICT ON UPDATE CASCADE,
189 FOREIGN KEY (GateId) REFERENCES Gate (GateId) ON DELETE SET NULL ON UPDATE CASCADE,
190 FOREIGN KEY (RunwayId) REFERENCES Runway (RunwayId) ON DELETE SET NULL ON UPDATE CASCADE,
191 FOREIGN KEY (OriginAirportId) REFERENCES Airport (AirportId) ON DELETE RESTRICT ON UPDATE CASCADE,
192 FOREIGN KEY (TaxiwayId) REFERENCES Taxiway (TaxiwayId) ON DELETE SET NULL ON UPDATE CASCADE
193);
194
195CREATE TABLE Departures
196(
197 DepartureId BIGSERIAL NOT NULL,
198 FlightId BIGINT,
199 GateId BIGINT,
200 RunwayId BIGINT,
201 Status varchar(20) NOT NULL,
202 DepartureTime timestamp,
203 DestinationAirportId BIGINT,
204 TaxiwayId BIGINT,
205 PRIMARY KEY (DepartureId),
206 FOREIGN KEY (FlightId) REFERENCES Flights (FlightId) ON DELETE RESTRICT ON UPDATE CASCADE,
207 FOREIGN KEY (GateId) REFERENCES Gate (GateId) ON DELETE SET NULL ON UPDATE CASCADE,
208 FOREIGN KEY (RunwayId) REFERENCES Runway (RunwayId) ON DELETE SET NULL ON UPDATE CASCADE,
209 FOREIGN KEY (DestinationAirportId) REFERENCES Airport (AirportId) ON DELETE RESTRICT ON UPDATE CASCADE,
210 FOREIGN KEY (TaxiwayId) REFERENCES Taxiway (TaxiwayId) ON DELETE SET NULL ON UPDATE CASCADE
211);
212
213CREATE TABLE Luggage
214(
215 LuggageId BIGSERIAL NOT NULL,
216 LuggageType varchar(20) NOT NULL,
217 Weight numeric,
218 "Size" varchar(20),
219 Status varchar(20) NOT NULL,
220 CheckedAt timestamp,
221 FlightId BIGINT,
222 CONSTRAINT chk_luggage_weight CHECK (Weight IS NULL OR Weight > 0),
223 CONSTRAINT chk_luggage_status CHECK (Status IN ('Checked In', 'Loaded', 'In Transit', 'Arrived', 'Claimed', 'Lost', 'Delayed', 'Damaged')),
224 CONSTRAINT chk_luggage_type CHECK (LuggageType IN ('Carry-On', 'Checked', 'Oversized', 'Fragile', 'Special')),
225 PRIMARY KEY (LuggageId),
226 FOREIGN KEY (FlightId) REFERENCES Flights (FlightId) ON DELETE RESTRICT ON UPDATE CASCADE
227);
228
229CREATE TABLE Ticket
230(
231 TicketId BIGSERIAL NOT NULL,
232 FlightId BIGINT,
233 SeatNumber int NOT NULL,
234 Class varchar(20) NOT NULL,
235 BookingDate timestamp NOT NULL,
236 Status varchar(20) NOT NULL,
237 TicketPrice numeric NOT NULL,
238 PassengerId BIGINT,
239 LuggageId BIGINT,
240 CONSTRAINT chk_ticket_price CHECK (TicketPrice > 0),
241 CONSTRAINT chk_ticket_seat CHECK (SeatNumber > 0),
242 CONSTRAINT chk_ticket_class CHECK (Class IN ('Economy', 'Premium Economy', 'Business', 'First Class')),
243 CONSTRAINT chk_ticket_status CHECK (Status IN ('Booked', 'Confirmed', 'Cancelled', 'Used', 'Refunded', 'Pending')),
244 UNIQUE (FlightId, SeatNumber),
245 PRIMARY KEY (TicketId),
246 FOREIGN KEY (FlightId) REFERENCES Flights (FlightId) ON DELETE RESTRICT ON UPDATE CASCADE,
247 FOREIGN KEY (PassengerId) REFERENCES Passenger (PassengerId) ON DELETE RESTRICT ON UPDATE CASCADE,
248 FOREIGN KEY (LuggageId) REFERENCES Luggage (LuggageId) ON DELETE RESTRICT ON UPDATE CASCADE
249);
250
251CREATE TABLE BoardingPass
252(
253 PassId BIGSERIAL NOT NULL,
254 TicketId BIGINT UNIQUE,
255 BoardingTime timestamp NOT NULL,
256 Class varchar(10) NOT NULL,
257 Status varchar(20) NOT NULL,
258 PrintedAt timestamp,
259 GateId BIGINT,
260 LuggageId BIGINT,
261 CONSTRAINT chk_boardingpass_class CHECK (Class IN ('Economy', 'Premium Economy', 'Business', 'First Class')),
262 CONSTRAINT chk_boardingpass_status CHECK (Status IN ('Issued', 'Scanned', 'Boarded', 'Cancelled', 'Expired')),
263 PRIMARY KEY (PassId),
264 FOREIGN KEY (TicketId) REFERENCES Ticket (TicketId) ON DELETE RESTRICT ON UPDATE CASCADE,
265 FOREIGN KEY (GateId) REFERENCES Gate (GateId) ON DELETE RESTRICT ON UPDATE CASCADE,
266 FOREIGN KEY (LuggageId) REFERENCES Luggage (LuggageId) ON DELETE RESTRICT ON UPDATE CASCADE
267);
268
269CREATE TABLE SecurityCheck
270(
271 CheckId BIGSERIAL NOT NULL,
272 CheckTime timestamp NOT NULL,
273 CheckType varchar(20) NOT NULL,
274 TerminalId BIGINT,
275 Status varchar(20) NOT NULL,
276 Notes text,
277 PassengerId BIGINT,
278 CONSTRAINT chk_security_status CHECK (Status IN ('Passed', 'Failed', 'In Progress')),
279 CONSTRAINT chk_security_type CHECK (CheckType IN ('Baggage', 'Passenger', 'Document', 'Full Body', 'Random')),
280 PRIMARY KEY (CheckId),
281 FOREIGN KEY (TerminalId) REFERENCES Terminal (TerminalId) ON DELETE RESTRICT ON UPDATE CASCADE,
282 FOREIGN KEY (PassengerId) REFERENCES Passenger (PassengerId) ON DELETE RESTRICT ON UPDATE CASCADE
283);
284
285CREATE TABLE Employee
286(
287 EmployeeId BIGSERIAL NOT NULL,
288 FirstName varchar(30) NOT NULL,
289 LastName varchar(30) NOT NULL,
290 Position varchar(20) NOT NULL,
291 Email varchar(20) UNIQUE,
292 Phone bigint NOT NULL UNIQUE,
293 HireDate date NOT NULL,
294 Salary numeric NOT NULL,
295 DateOfBirth date NOT NULL,
296 Status varchar(20) NOT NULL,
297 QuitDate date,
298 AirportId BIGINT,
299 CONSTRAINT chk_employee_salary CHECK (Salary > 0),
300 CONSTRAINT chk_employee_hire_age CHECK (HireDate >= DateOfBirth + INTERVAL '18 years'),
301 CONSTRAINT chk_employee_quit_after_hire CHECK (QuitDate IS NULL OR QuitDate > HireDate),
302 CONSTRAINT chk_employee_status CHECK (Status IN ('Active', 'Inactive', 'Paid leave', 'Unpaid leave', 'Retired')),
303 FOREIGN KEY (AirportId) REFERENCES Airport (AirportId) ON DELETE RESTRICT ON UPDATE CASCADE,
304 PRIMARY KEY (EmployeeId)
305);
306
307CREATE TABLE MechanicEmployee
308(
309 EmployeeId BIGINT PRIMARY KEY,
310 MaintenanceId BIGINT,
311 FOREIGN KEY (EmployeeId) REFERENCES Employee (EmployeeId) ON DELETE RESTRICT ON UPDATE CASCADE,
312 FOREIGN KEY (MaintenanceId) REFERENCES AircraftMaintenance (MaintenanceId) ON DELETE RESTRICT ON UPDATE CASCADE
313);
314
315CREATE TABLE WorksOn
316(
317 EmployeeId BIGINT NOT NULL,
318 MaintenanceId BIGINT NOT NULL,
319 PRIMARY KEY (EmployeeId, MaintenanceId),
320 FOREIGN KEY (EmployeeId) REFERENCES MechanicEmployee (EmployeeId) ON DELETE RESTRICT ON UPDATE CASCADE,
321 FOREIGN KEY (MaintenanceId) REFERENCES AircraftMaintenance (MaintenanceId) ON DELETE RESTRICT ON UPDATE CASCADE
322);
323
324CREATE TABLE GateEmployee
325(
326 EmployeeId BIGINT PRIMARY KEY,
327 FOREIGN KEY (EmployeeId) REFERENCES Employee (EmployeeId) ON DELETE RESTRICT ON UPDATE CASCADE
328);
329
330CREATE TABLE SecurityEmployee
331(
332 EmployeeId BIGINT PRIMARY KEY,
333 FOREIGN KEY (EmployeeId) REFERENCES Employee (EmployeeId) ON DELETE RESTRICT ON UPDATE CASCADE
334);
335
336CREATE TABLE Ownership
337(
338 OwnerId BIGSERIAL NOT NULL,
339 StartDate timestamp NOT NULL,
340 AircraftId BIGINT,
341 EndDate timestamp NOT NULL,
342 AirlineId BIGINT,
343 CONSTRAINT chk_ownership_end_after_start CHECK (EndDate > StartDate),
344 PRIMARY KEY (OwnerId),
345 FOREIGN KEY (AircraftId) REFERENCES Aircraft (AircraftId) ON DELETE RESTRICT ON UPDATE CASCADE,
346 FOREIGN KEY (AirlineId) REFERENCES Airline (AirlineId) ON DELETE RESTRICT ON UPDATE CASCADE
347);
348
349CREATE TABLE AirportService
350(
351 ServiceId BIGSERIAL NOT NULL,
352 ServiceName varchar(30) NOT NULL UNIQUE,
353 ServiceType varchar(20) NOT NULL,
354 TerminalId BIGINT,
355 OperatingHours varchar(10),
356 Status varchar(20) NOT NULL,
357 CONSTRAINT chk_airportservice_status CHECK (Status IN ('Active', 'Inactive', 'Cancelled')),
358 PRIMARY KEY (ServiceId),
359 FOREIGN KEY (TerminalId) REFERENCES Terminal (TerminalId) ON DELETE RESTRICT ON UPDATE CASCADE
360);
361
362CREATE TABLE StaysAt
363(
364 HangarId BIGINT NOT NULL,
365 AircraftId BIGINT NOT NULL,
366 PRIMARY KEY (HangarId, AircraftId),
367 FOREIGN KEY (HangarId) REFERENCES Hangar (HangarId) ON DELETE RESTRICT ON UPDATE CASCADE,
368 FOREIGN KEY (AircraftId) REFERENCES Aircraft (AircraftId) ON DELETE RESTRICT ON UPDATE CASCADE
369);
370
371CREATE TABLE WorksOnGate
372(
373 GateId BIGINT NOT NULL,
374 GateEmployeeEmployeeId BIGINT NOT NULL,
375 Date DATE,
376 StartTime TIME,
377 EndTime TIME,
378 PRIMARY KEY (GateId, GateEmployeeEmployeeId),
379 FOREIGN KEY (GateId) REFERENCES Gate (GateId) ON DELETE CASCADE ON UPDATE CASCADE,
380 FOREIGN KEY (GateEmployeeEmployeeId) REFERENCES GateEmployee (EmployeeId) ON DELETE CASCADE ON UPDATE CASCADE
381);
382
383CREATE TABLE WorksOnSecurityCheck
384(
385 SecurityEmployeeEmployeeId BIGINT NOT NULL,
386 SecurityCheckCheckId BIGINT NOT NULL,
387 PRIMARY KEY (SecurityEmployeeEmployeeId, SecurityCheckCheckId),
388 FOREIGN KEY (SecurityEmployeeEmployeeId) REFERENCES SecurityEmployee (EmployeeId) ON DELETE CASCADE ON UPDATE CASCADE,
389 FOREIGN KEY (SecurityCheckCheckId) REFERENCES SecurityCheck (CheckId) ON DELETE CASCADE ON UPDATE CASCADE
390);