0

次の3つのテーブルがあります。

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 時間) の間に、2 つのフライトが同じゲートを持つことができないという制約を作成しようとしています。

ビューを作成してビューに挿入する必要があると思いました...しかし、更新可能なビューテーブルにサブクエリを含めることは許可されていないようです? この制約を追加するにはどうすればよいですか?

注: PaTime と PoTime は予定到着時刻と予定出発時刻であり、arrT と depT は実際の到着時刻と実際の出発時刻であり、異なる場合があります。

SO 基本的に: 1. フライトがフライト テーブルに追加されます (追加の制約は必要ありません)。3. 到着テーブルでは、実際の到着時間 (到着予定時間とは異なる場合があります)、ステータス、およびゲートがテーブルに追加されます。これは、制約が必要な場所です。そのゲート番号がこのテーブルと出発テーブルに存在するかどうかを確認するには、予定の到着/出発時刻から -1 ~ +1 時間。したがって、このテーブルでは、着信 (Patime の場合) 発信 (Potime の場合) の時間を結合し、制約を確認する方法が必要です。

4

1 に答える 1

0

制約は 1 つのテーブルのみを参照できます。このデータ モデルを使用する必要がある場合、目的の制約を作成することはできません。

いくつかのオプションがあります

  1. 制約を作成する代わりにINSERT、新しいフライトを実行し、必要な検証を実装するストアド プロシージャを作成できます。次に、アプリケーションがテーブルに対してダイレクトを発行することを制限し、INSERT代わりにストアド プロシージャを使用するように要求します。
  2. 既存のデータ モデルを保持し、ON COMMIT出発と到着のデータを組み合わせたマテリアライズド ビューを作成し、そのマテリアライズド ビューに制約を作成できます。
  3. 制約に必要なすべての情報が 1 つのテーブルに含まれるように、データ モデルを変更できます。
于 2013-04-01T14:06:04.557 に答える