2011-10-11 13 views
1

パーセルの場所を追跡するためにデータベースを実装する必要があります。データベースのスーパータイプ/サブタイプ

基本的に飛行機、船舶、車、中継所など4つの場所があります。

は、私は彼らのすべてが(みとめそれぞれのインスタンス(例えば、多くの飛行機、多くの車)

また、これら4つの事業体のそれぞれが1で管理されている、唯一の従業員を持っているため、これらの4箇所のために別々のエンティティを持っている必要があります別のエンティティ)。

私は、jobという名前の関連エンティティを作成しました。パイロットIDを持つ飛行機IDを含むフライト番号と同様に、4つの場所のそれぞれで働く従業員の情報を格納します。

私は4つの場所の属性を調べて、それらがスーパータイプである車と、車のサブタイプである飛行機、船舶およびオフィスに分類されることが分かった。

飛行機にあるかスーパータイプにあるかを示すlocation_idのユニークな属性があるため、サブタイプはこの属性を継承します。

私の質問は、テーブルが4つの異なるテーブルに分かれているかどうかです。私がjob_id(FK)をジョブエンティティから参照したときはいつでも、外部キーは通常は一つのテーブルではなく、この場合には4つのテーブル..

EMPLOYEE [をEMPLOYEE_ID、EMPLOYEE_NAME、性別、contact_number、job_scope]

ジョブが

[ は(location_idの)、(EMPLOYEE_ID)、をJOB_ID]

OFFICE [をLOCATION_ID、office_id、アドレス]

CAR

飛行機[SHIP

[ をunladen_weight、vehicle_id、タイプ、をLOCATION_ID] をvehicle_id、をLOCATION_IDを[ はvehicle_id、をLOCATION_ID] 、サイズ]

+0

私はここで少し誤解しているようです。下記の私の更新された答えを見てください。 –

答えて

1

ロケーションテーブルを作成します。

Location-id 
Location-Type 
Description 

(NB:場所は「船」である場合は、船のテーブル内のレコードを検索し、どこにも、しかし、あると便利かもしれないので2番目のフィールドは、冗長である)

ロケーションIDは、ロケーションテーブルのプライマリキーになります。船、航空、オフィスなどの外来キーになります。

2つの「場所」をマップしたいとします.1つは船、もう1つはオフィスです。

場所テーブル:あなたは、「場所のすべての4つのタイプのために存在する他のいくつかのフィールドを見つけるために管理する場合には

Location-Id | Location-Type | Description 
     ... | ...   | ... 
    005768 | Ship   | "The Sea Witch" Mexican Cargo 
     ... | ...   | ... 
    087956 | Office  | "Our offices in Albuquerque" 

事務所表

Office-Id | Address 
    ... | ... 
    087956 | "145 Rose St. Albuquerque" 
    ... | ... 

船表

Ship-Id | Size 
    ... | ... 
    005768 | 14000 
    ... | ... 

それをLocationテーブルに追加します。

残りの部分は多かれ少なかれOKです:あなたのジョブテーブルはここを指しており、すべての「具体的な」クラスはLocationレコードを特定の「サブタイプ」レコードと結合することで得られます。

注:「場所」を「アリゾナ」や「メキシコ湾」などの「地理的領域」などの別の場所として使用していた場合は、これを場所表の属性として追加する必要があります。 Officeの場合は静的になりますが、他のタイプの「場所」は移動すると変更される可能性があります。

したがって、スーパータイプは「ロケーション」であり、オフィスまたはシップは「汎用」ロケーションのサブタイプです。

すでに説明したように、これはRDBMSのスーパータイプ、btwをモデル化するための標準的な方法ですin some other places

+0

この場合、スーパータイプはロケーションテーブルになりますが、飛行機や船舶などのインスタンスが多数あることを考慮して、ロケーションテーブルを4つの異なる場所にリンクするにはどうすればよいでしょうか。 LOCATION [location_id、description]? ship [vehicle_id、unladen_weight]? – user776914

+0

と私は現在設計の段階にあるだけなので、実際には "他の場所で"コーディングで説明する方法をあまり理解していません。(私は、現在のように矩形とカラスの表記で描画モデルを使って学習しています) – user776914

+0

「他の場所」は、RDBMSのオブジェクト階層をマッピングするための多くの説明の1つであり、これを引用しています。http://www.agiledata.org/essays/mappingObjects.html#MappingInheritanceは「コーディング」ではなく、かなり完成しています。 。 –