我有以下三个表:
CREATE TABLE Flights (
route_number INT NOT NULL PRIMARY KEY,
operated_by INT NOT NULL,
airplane_model VARCHAR(30) NOT NULL,
source VARCHAR(20),
destination VARCHAR(20),
FOREIGN KEY (operated_by) REFERENCES Airline(airline_id),
FOREIGN KEY (airplane_model) REFERENCES Airplanes(airplane_id)
);
CREATE TABLE outgoing (
route_number INT NOT NULL PRIMARY KEY,
poTime Date NOT NULL,
FOREIGN KEY (route_number) REFERENCES Flights(route_number)
);
CREATE TABLE incoming (
route_number INT NOT NULL PRIMARY KEY,
paTime date NOT NULL,
FOREIGN KEY (route_number) REFERENCES Flights(route_number)
);
CREATE TABLE departures(
depid int not null PRIMARY KEY,
route_number INT NOT NULL,
gate VARCHAR(3) NOT NULL,
depT date NOT NULL,
depD date NOT NULL,
status VARCHAR(10),
FOREIGN KEY (route_number) REFERENCES Flights(route_number)
);
CREATE TABLE ARRIVALS(
route_number INT NOT NULL,
gate VARCHAR(3) NOT NULL,
arrT date NOT NULL,
arrD date NOT NULL,
status VARCHAR(10),
arrid int not null PRIMARY KEY,
FOREIGN KEY (route_number) REFERENCES Flights(route_number)
);
我正在尝试创建一个约束,即在计划时间(paTime和poTime)间隔为-1,+ 1小时的计划时间内,没有两个航班可以拥有相同的门。
我以为我应该创建一个视图并插入到视图中...但显然你不允许在可更新的视图表中有子查询? 我将如何添加此约束?
注意:PaTime和PoTime是计划到达时间和计划出发时间,而arrT和depT是实际到达时间和实际出发时间,并且允许它们不同。
基本上是这样的: 1.航班被添加到航班表中(无需额外限制) 2.如果是入境航班,其计划到达时间将添加到抵达表中(再次无需担心限制)。 3.在“到达”表中,将实际到达时间(可能与计划到达时间不同),状态和门添加到表中。这是我需要约束的地方!检查此表中是否存在该门号以及离开时间表是否距其计划到达/离开时间为-1至+1小时。 所以对于这个表我需要一种方法来加入Incoming(用于Patime)Outgoing(用于Potime)时间并检查约束答案 0 :(得分:0)
约束只能引用一个表。如果您需要使用此数据模型,则无法创建满足所需要的约束。
您有几个选择
INSERT
并实现您想要的任何验证。然后,您可以限制应用程序在表上发出直接INSERT
,并要求它使用存储过程。ON COMMIT
物化视图,该视图组合了离场和到达的数据,然后在该物化视图上创建约束。