我试图建立一个让客户预订飞机的数据库,客户可以为不同的飞机进行多次预订, 但是只有一个客户可以一次预订一架飞机。
例如:客户可以预订Aircraft_1D - > 12但是如果另一个客户来自同一个出发地或到达日期,则该客户不应该预订同一架飞机。
我甚至不确定从哪里开始,我应该创建检查约束还是触发器?
这是我的预订表代码;
CREATE TABLE Booking (
Booking_ID NUMBER(10) NOT NULL PRIMARY KEY,
Company_ID NUMBER(10) NOT NULL REFERENCES
Penrhyn_Jet_Charter(Company_ID),
Customer_ID NUMBER(10) NOT NULL REFERENCES
Customer(Customer_ID),
Aircraft_ID NUMBER(10) NOT NULL REFERENCES
Aircraft(Aircraft_ID),
Assignment_No NUMBER(10) NOT NULL,
Booking_Date DATE DEFAULT SYSDATE,
Charter_Cost NUMBER(14,2) CHECK(Charter_Cost > 0),
Departure_Date DATE NOT NULL,
Departure_Location CHAR(3) NOT NULL,
Arrival_Date DATE NOT NULL,
Arrival_Destination CHAR(3) NOT NULL
);
任何想法或线索? 谢谢!
答案 0 :(得分:1)
UNIQUE KEY
和Aircraft_ID,Departure_Date
Aircraft_ID,Arrival_Date
个约束
ALTER TABLE Booking
ADD CONSTRAINT booking_unq1 UNIQUE (Aircraft_ID,Departure_Date);
ALTER TABLE Booking
ADD CONSTRAINT booking_unq2 UNIQUE (Aircraft_ID,Arrival_Date);
答案 1 :(得分:1)
问题是你想在aircraft_id + date上有一个唯一约束,但是有两个日期:Departure_Date和Arrival_Date。解决这个问题的另一种方法是持有航班的第二张表:
create table flight
(
aircraft_id number(10),
flight_date date,
constraint pk_flight primary key (aircraft_id, flight_date)
);
该表的主键禁止在同一天使用同一架飞机进行两次飞行。
现在在预订时写一个插入触发器,写入两个条目,一个用于出发日期,一个用于到达日期,写入航班表。当您插入重复航班时,无论是出发还是到达,都会导致异常。