2012-11-25 14 views
5

セットアップ外部キーにフィールド名の代わりに定数を使用できますか?だからここ

STIのサブクラスにFKを関連付けるには、あなたはSTI(単一テーブル継承)でプレーすることを決定した後、私は見つけることだシナリオはかなり一般的であるのです。

さまざまなサブタイプを持つ基本タイプがあります。

  • 人<(教師、学生、スタッフ、など)
  • ユーザー<(メンバー、管理者)
  • メンバー<(買主、売主)
  • 車<(車、船、飛行機)
  • など

データベースにそれをモデル化という2つの主要な方法があります。

  • シングルテーブル継承
    • 一つの大きなタイプフィールドを持つテーブルとヌル値を許可するフィールドの束
  • 共有PKとタイプごとに1つのテーブル(FK'dクラス表の継承
    • 子供から親に)

STIにはいくつかの問題がありますが、私はとします。これは、作成する必要のある結合の数を減らす方法や、Railsのようなフレームワークのサポートのいくつかを好きですが、サブクラス特有のテーブルを関連付ける方法。例えば

  • 認定は
  • プロファイルは、あなただけは多分バットマンない限りWingInformationは、車やボート(に関係すべきではない
  • メンバー・ユーザーを参照する必要があります教師-者を参照する必要があります
  • 広告は売主・買主のメンバーではない、人によって所有されている)
  • Cで

TI、これらの関係は簡単です - ちょうど、関連テーブルの上に外部キーを平手打ちし、あなたが行っている:

ALTER TABLE advertisements 
ADD FOREIGN KEY (seller_id) REFERENCES sellers (id) 

しかし、STIとし、同様のことは、サブタイプの制限をキャプチャしません。私が見たい何

ALTER TABLE advertisements 
    ADD FOREIGN KEY (seller_id) REFERENCES members (id) 

のようなものです:私は見つけることができたすべてが関連テーブルに計算列を追加する必要汚いハックです

* Does not work in most (all?) databases * 
ALTER TABLE advertisements 
    ADD FOREIGN KEY (seller_id, 'seller') REFERENCES members (id, type) 

ALTER TABLE advertisements 
    ADD seller_type VARCHAR(20) NOT NULL DEFAULT 'seller' 
ALTER TABLE advertisements 
    FOREIGN KEY (seller_id, seller-type) REFERENCES members (id, type) 

これは私を奇妙なものにします(優雅ではありません)。

実際の質問

は私がこれを行うことができますそこにそこにRDBMSですか?

これが不可能な理由はありますか?

これはちょうどの場合を除いてSTIを使用しない理由の1つですか?の症例?

答えて

3

外部キー宣言に定数を宣言する標準的な方法はありません。列には名前を付ける必要があります。

  • 計算列

  • CHECK制約

  • トリガーINSERT/UPDATEの前に次のいずれかの方法を使用して

    しかし、あなたは固定値を持つように列を強制することができ、ユーザーが指定した値をデフォルト値で上書きします。

+0

ありがとう@Billとええ、私は(私が欲しいもののための標準がないので)前に計算されたチェックトリガー列の提案を見た。あなたが(たとえ何らかの非標準的な方法でさえ)私が言及した構文を可能にするエンジンを知っていますか? –

+0

申し訳ありませんが、わかりません。 –

関連する問題