2011-10-30 7 views
1

私はデータベースに基本的な一般化スキーマを持っています。私はスーパークラスのビークルを持ち、そのサブクラスは自動車、オートバイです。各スーパークラス/サブクラスの組み合わせごとにテーブルを作成して実装したので、私は自動車とオートバイのテーブルを作成しました。データベース継承リンク

しかし、今私は問題がある、私は他のテーブルからFKを "両方"これらのテーブルに設定する必要があります。だから "人"はオートバイか自動車のどちらかを持っていますが、決して両方の種類が決して同じではありません。それを達成するためにテーブルパーソンを自動車やオートバイとリンクさせるにはどうすればいいですか?どうもありがとうございました。

答えて

1

はそのようにそれをしないでください - それだけで痛みや高価なたくさんの合流になります。

は、クラス全体の階層構造のための1つのテーブルを持っており、いずれかの数字またはシンボルタイプを決定し、「弁別」の列を持っています。擬似-SQLを使用した簡単な例では:

create table machine { 
    machine_id int auto_increment, 
    machine_type char(1), -- can be 'a' for auto or 'm' for motorcyle, 
    make varchar(255), 
    model varchar(255), 
    auto_specific_field varchar(10) null, 
    moto_specific_field varchar(10) null 
} 
0

あなたはおそらくチェック制約またはストアドプロシージャ(具体的な実装の詳細は、ご使用のDBMSに依存)でこれを行うことができます。

しかし、私はあなたの全体的なアーキテクチャを再考すべきだと思います。 継承オブジェクト指向の概念であると明確ではないデータベースによって、クライアントコードで実装する必要があります。データベース(少なくとも関係するもの)は、そのようなものを扱うことを意図しておらず、それらはうまくいきません。あなたはとにかくそれをやっているとき...、

HTHをあなたは必要以上にハードあなたの人生を作っている(そして、あなたは多くの見つけにくいエラーのためにドアを開けます)!