2009-06-25 9 views
1

たとえば、3つの異なるタイプのテーブル(ObjectTypes)にタグを結合するタグルックアップテーブルがあります。それぞれにはタグがありますが、それらは共有されていません。私はいつも外来キーの周りに設計すべきですか?

だから私はこの

TAGIDを行うことができます| ObjectType | ObjectId |

私がテーブルに一緒に参加するとき、私は参加する前にオブジェクトの種類でフィルターをかけます。

これは、ObjectId列で外部キーを実行する機能が無効になることを知っています.3つの表のいずれかになります。

質問です。これは恐ろしいことですか?もしそうなら、なぜですか?

もっと良い方法がない限り、オブジェクトごとにルックアップテーブルを作成することもできます。

+0

これは私がしてはいけない将来のための設計のケースかもしれません。他のオブジェクト表を追加する設計作業が少なくなりますが、長期的には状況が悪化する可能性があります。 – efbenson

答えて

1

外部キーについて考えるのではなく、データベースレベルで参照整合性を強制するかどうかを考えてください。参照整合性がRDBMSによって強制されなければ、アプリケーションでそれを強制するか、複雑なデータベース制約を作成してRDBMSがすでに外部キーの形であなたに与えていることを行う必要があります。

しかし、3つの概念テーブルを1つの大きなテーブルに格納する理由はありません。複数の表のデータを同じ表に格納することは、同じ列を持つためではありません。それらは同じスキーマを持ちますが、同じテーブルではありません。

関連する問題