2011-11-12 9 views
0

私は航空会社の大学のコースワーク用のOracleデータベースを作成しています。今私はスタッフテーブルを持っているstaff_allocationsは、フライトテーブルのフライトのスタッフを割り当てます。oracle findは日付がリストになる場所を見つけます

CREATE TABLE FLIGHT (
    FLIGHT_ID NUMBER(11) PRIMARY KEY, 
    ROUTE_ID NUMBER(11) NOT NULL, 
    PLANE_ID NUMBER(11) NOT NULL, 
    PILOT_ID NUMBER(11) NOT NULL, 
    DEPARTURE_TIME TIMESTAMP NOT NULL, 
    ARRIVAL_TIME TIMESTAMP NOT NULL, 
    FREE_SEATS NUMBER (4) 
); 

CREATE TABLE STAFF_ALLOCATION (
    FLIGHT_ID NUMBER(11) NOT NULL, 
    EMPLOYEE_ID NUMBER(11) NOT NULL 
); 

ここで、フライトテーブルのroute_idはroutesテーブルを参照します。私はstaff_allocationに挿入する前に把握しますトリガーを作成しようとしているID、宛先IDとトランジットID異なる空港コード(LHR、HAMなど)

へのすべてのポイントを開始

CREATE TABLE ROUTE (
    ROUTE_ID NUMBER(11) PRIMARY KEY, 
    START_ID VARCHAR2(3) NOT NULL, 
    DESTINATION_ID VARCHAR2(3) NOT NULL, 
    TRANSIT_ID VARCHAR2(3), 
    IS_ACTIVE VARCHAR2(1), 
    DISTANCE NUMBER (8,2), 
    BASE_PRICE NUMBER (6,2) 
); 

スタッフが新しい航空便と時間が重なる別の航空便に割り当てられているかどうか。また、スタッフが実際に飛行機の出発地と同じ国にいるかどうかをチェックする必要があります。

このように:

どの航空便スタッフが既に割り当てられているかを見つける。 新しい飛行出発時刻と既存の飛行出発時刻を比較します。 飛行時間が衝突しない場合は、スタッフが既に新しいstart_idの国にいるかどうかを確認してください

誰かが私に例コードを教えてもらうか、 /を使って?これはoracleで何かを作成する私の初めてのことです。

歓声。

答えて

1

最初のチェックは非常に簡単です。あなたが修正しているフライトの出発と到着を知っている場合、到着日時が現在のフライトの出発日よりも大きい、そのフライトの出発日時がその従業員の他のフライトが存在するかどうかを確認できます現在のフライトの到着日時の前に

このようなフライトが存在する場合、そのフライトは現在のフライトと重複します。しかし、これはOracleよりも論理的です。

もう一方のチェックは難しいです(データベースの場合)。特定の従業員の最新の到着を見つけ、従業員が到着する国として到着国を選択する必要があります。 これは仮説です。誰かが乗客として、またはバスで帰ってきた可能性があります。また、各従業員の出発点があることを確認する必要があります。だから、誰かの最初の飛行のためにすべてを許可するか、または従業員自身に国を登録する必要があります。後者の解決法は非常にうまく行きません。固定された場所に過ぎず、従業員が特定の日にどこにいるかは分かりません。だから私は新しい従業員のための割り当てを許可するだけで、この割り当てのための残りのことについては気にしない。

あなたが直面する主な問題は、同じテーブルの行レベルのトリガでテーブルをクエリできないことです。このためには、挿入されたレコードを覚えておき、挿入トリガーの後にテーブルレベルを書き込んでチェックを行う必要があります。

私はあなたにいくつかのコードを提供したいと思いますが、人々は自分のことを教えてくれることを続けています。だから私は自分の宿題をするつもりですが、私はあなたに実装を残します。 :)

-1

私はトリガー構文とpl/sqlについて知っていると思います。

トリガーのデバッグに役立つようにdbms_output.put_lineをチェックするか、ステップポイントをサポートするツールを使用することをお勧めします。

あなたが船外に出ようとしている(ほとんど意図しない)場合は、挿入しようとしている飛行の割り当てが到着した国から飛行を開始した後に開始されているかどうかを確認しなければなりません。

フライトBを挿入します。フライトAは米国からメキシコへ、フライトCはメキシコから米国へ、その後、メキシコからグアテマラへの飛行Bを挿入します。それは有効ですが、飛行Cを壊します。

良い飛行。

関連する問題