セットアップ外部キーにフィールド名の代わりに定数を使用できますか?だからここ
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つですか?の症例?
ありがとう@Billとええ、私は(私が欲しいもののための標準がないので)前に計算されたチェックトリガー列の提案を見た。あなたが(たとえ何らかの非標準的な方法でさえ)私が言及した構文を可能にするエンジンを知っていますか? –
申し訳ありませんが、わかりません。 –