2010-12-27 24 views
3

私はASP.net MVCアプリケーションで使用するデータベースを設計しようとしています。シナリオは次のとおりです。3つのエンティティがあり、ユーザーはこれらの異なるエンティティごとにコメントを投稿できます。私はちょうどコメントのために1つのテーブルを入れ、それに他のすべてのエンティティをどのようにリンクさせるのだろうかと思います明らかに、Commentsテーブルはこれらのテーブルに対して3つの参照(外部キー)を必要としますが、これらの外部キーはnullではなく、各行に1つだけ埋め込むことができます。エンティティのコメントごとに3つの異なるテーブルを実装するよりも良い方法はありますか?SQL Serverで複数の関係を実装する方法は?

答えて

7

EntityType固有のテーブル

  • EntityMaster:実体識別子、FOO、バー
  • コメント:実体識別子、CommentID、ユーザーID、... 3エンティティ表のPKは(実体識別子、CommentIDなど)である

、PKは実体識別子であります

  • EntityOne:実体識別子、EntityTypeID(チェック制約= 1)、...
  • EntityTwo:実体識別子、EntityTypeIDは(チェック制約= 2)、...
  • EntityThree:それは、データベース設計の面で間違っている:実体識別子、EntityTypeID(チェック制約= 3)、...

3親のための1件のコメントテーブルを持つにはショートカットや優雅さはありません。個人的に

、私はおそらく反射に、

編集...オプション1のために行くだろう:

時々、あなたはデータの使い方を見ています。 3つのエンティティが別々に使用されている場合

、別々の画面上で、相互にリンクしていない3つのエンティティを使用して一緒に表示されている場合、それは、オプション2は、よりになり、オプション1

だろうデータをより簡単に取り込むことができるためです。

+0

+1チェック制約を使って「分散」キーをどのようにシミュレートできるかを指摘するため。しかし、私は、後者のアプローチが受け入れられる時代(ここではない)があると主張したい。 –

+0

@pst:はい、あります。私の編集をご覧ください – gbn

3

3つのエンティティテーブルをすべて同じコメントテーブルに接続すると、外部キーを使用して参照整合性を保つことができなくなります。このシナリオでは、コメントテーブルに1つの「キー」列と1つの「エンティティタイプ」列があります。 cerainエンティティのコメントを取得するには、entity-typeでフィルタする必要があります。

私はすべてのエンティティのすべてのコメントを取得するために結合によって結合することができます同じ構造を持つ3つのコメントテーブルが好きです。

+0

私は同じ構造提案を持つ複数のコメントテーブルに同意します。 - 列が一貫している限り、コメントをビューに統合するのは簡単です。 – Nikhil

1

以下の画像のようなdb構造です。 Entity1またはEntity2を作成するときにCommentHistoryを作成する必要があります。

alt text

ですから、Entity1のためにすべてのコメントを取得する必要がある場合は、あなただけの必要があります:エンティティタイプごとに1つのコメントテーブルが

または::子コメントと一つのマスターエンティティテーブルのどちらか

Select * from Comment where CommentHistoryId = 5 -- '5' it CommentHistoryId from Entity1 
関連する問題