0

我有以下三个表:

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)的计划时间(paTime 和 poTime)间隔内,没有两个航班可以在计划时间周围有相同的登机口。

我想我应该创建一个视图并插入到视图中......但显然你不允许在可更新的视图表中使用子查询?我将如何添加此约束?

注:PaTime 和 PoTime 是计划到达时间和计划出发时间,而 arrT 和 depT 是实际到达和实际出发时间,允许不同。

所以基本上: 1. 一个航班被添加到航班表中(不需要额外的约束) 2. 如果它是一个入境航班,它的计划到达时间被添加到 Arrivals 表中(同样没有约束需要担心)。3. 在 Arrivals 表中,将实际到达时间(可以与计划到达时间不同)、状态和门添加到表中。这是我需要约束的地方!检查此表和出发表中是否存在该门号,从他们的计划到达/出发时间开始 -1 到 +1 小时。所以对于这张表,我需要一种加入传入(用于 Patime)传出(用于 Potime)时间并检查约束的方法

4

1 回答 1

0

一个约束只能引用一个表。如果您需要使用此数据模型,则无法创建执行所需操作的约束。

你有几个选择

  1. INSERT您可以创建一个存储过程来执行新航班并实现您想要的任何验证,而不是创建约束。然后,您限制应用程序对表发出直接INSERT指令,并要求它改为使用存储过程。
  2. 您可以保留现有数据模型并创建一个ON COMMIT物化视图,将出发和到达的数据组合起来,然后在该物化视图上创建一个约束。
  3. 您可以修改数据模型,以便约束所需的所有信息都在一个表中。
于 2013-04-01T14:06:04.557 回答