2012-01-26 7 views
1

私はバックエンドを設計しようとしており、次のユースケースがあります。旅程の間欠的な経由地を設計するにはどうすればいいですか

ポイントAからBまでのフライト情報があり、異なるユースケースをサポートするスキーマを定義する必要があります。

私は、ポイント経由で途中降機がある場合に、このケースを処理する良い方法を見つけることを試みています。

以下のための飛行ルート - > Bは、実際に次のようになります。

A -> C 
C -> D 
D -> B 

がそう - > Bは、一方のエンティティですが、今度は、それはいくつかの足で構成されています。

私の現在の設計:

AirLegテーブル:

- id 
- departure and arrival information 
- viaPoints: BOOL 

viaPoints表:viaPointsフラグがAirLegテーブルにTrueの場合

- id 
- airLegId // FK into Airleg table 
- similar departure and arrival information from airLeg table 

//は、viaPointsテーブルがために照会することができ、仲介者を取得するためにairLegIdテーブルを使用します。

これに対処するより良い方法はありますか?

私は片道またはセグメントについて格納しています情報を追加しますと思った:

  • AirLeg-ID
  • 出発空港:空港
  • 到着空港へのFK:空港へのFK
  • 出発タイムスタンプ(到着都市の現地時間で)(で出発地の現地時間)
  • 到着タイムスタンプ
  • 飛行duratiこのairlegの上:静的な値
  • フライトID:テキスト
  • その他(TEXT:キャンセルポリシー)

EDIT:

FK航空会社名とフライトナンバー
  • 手荷物方針をもたらすの航空会社に

    私は関連するquestionを追加しました。私はこの問題に対する答えが両方の要件に対応しなければならないと思います。

    旅行に複数のセグメントがある場合、価格は個々のセグメントは

    同様に、往復の料金を単位とA-> Bからのない個々の構成要素として指定されている完全な旅行のために定義されていませんバック、B-> A。

  • 答えて

    1

    私はこのようにそれを設計したい:

    Journeys: 
    
    - ID 
    - Other info (billing, whatever) 
    
    Segments: 
    
    - ID 
    - JourneyID (FK) 
    - departure, arrival, etc 
    

    と追加のビュー

    Journeys_View 
    
    - Journeys.* 
    - First departure 
    - Last arrival 
    
    +0

    最も早いセグメント(時間に基づいていますか?)を見て、旅の最初と最後のセグメントを調べます。 –

    +0

    はい。 IDを使用すると、最初に中間のセグメントを選択してから接続セグメントを選択すると良い考えではありません。したがって、UTCでの発着時刻は注文基準です。 –

    +0

    私は都市のローカルタイムゾーンに時間を保存しています。私は別のテーブルで請求しています。だから、私のテーブルでは、私が持っているのは出発/到着空港、時間と飛行情報です。あなたが私の質問に投稿したのと似たような提案はしていませんか? – brainydexter

    1

    私は2つの質問をつなぎ合わせるしようとしている、そしてそれはあなたがしたいものを完全に明確ではありませんそうですが、私はそれが次のようなものであると思います。

    旅程があります。これは親品目です。 「旅程」には複数の脚があります(質問:「ロンドン→パリ→ニューヨーク→ロンドン」など複数の旅程を扱いたいですか?)。旅程には価格があります。帰りの旅行は2つの方法よりも安いので、価格は足の価格の合計ではありません。

    Itinerary 
    --------- 
    ID 
    Price 
    
    Leg 
    ---- 
    Departure Airport : FK into airports 
    Arrival Airport : FK into airports 
    Departure timestamp (in departure city's local time) 
    Arrival timestamp (in arrival city's local time) 
    flight duration of this airleg: static value 
    flightId : FK into airlines yielding airline name and flight number 
    Baggage Policy : text 
    Misc (TEXT: Cancellation policy) 
    

    あなたは別のテーブルに価格を格納することができ - しかし、あなたは唯一の独立旅程の価格が変更された場合、これを行う必要がある(例えば、月曜日の価格は$ 100、そして火曜日に、それは$ 200の場合)。

    データベーススキーマで "magic numbers"を使用しないことをお勧めします。リターンレッグを "-1"にするのではなく、NULLにしておく必要があります。これはあなたのSQLをより読みやすくし、エラーを起こしにくいものにします。 "-1"は帰りの脚がないことを意味することを覚えている開発者には依存しません。-2は仮予約された脚などを意味します。

    +0

    私はユースケースとして複数の旅程を持っています。私は旅程の3つのタイプをサポートする必要があります:a)一方向b)戻り旅行c)複数の部分。 「旅程」には価格があり、個々の足ではないという事実は正しいです。私はここでさまざまな事実から解決策を集めました:http://stackoverflow.com/a/9018830/280924。どう考えているか教えてください。ありがとう.. – brainydexter

    関連する問題