私はASP.net MVCアプリケーションで使用するデータベースを設計しようとしています。シナリオは次のとおりです。3つのエンティティがあり、ユーザーはこれらの異なるエンティティごとにコメントを投稿できます。私はちょうどコメントのために1つのテーブルを入れ、それに他のすべてのエンティティをどのようにリンクさせるのだろうかと思います明らかに、Commentsテーブルはこれらのテーブルに対して3つの参照(外部キー)を必要としますが、これらの外部キーはnullではなく、各行に1つだけ埋め込むことができます。エンティティのコメントごとに3つの異なるテーブルを実装するよりも良い方法はありますか?SQL Serverで複数の関係を実装する方法は?
答えて
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
だろうデータをより簡単に取り込むことができるためです。
3つのエンティティテーブルをすべて同じコメントテーブルに接続すると、外部キーを使用して参照整合性を保つことができなくなります。このシナリオでは、コメントテーブルに1つの「キー」列と1つの「エンティティタイプ」列があります。 cerainエンティティのコメントを取得するには、entity-typeでフィルタする必要があります。
私はすべてのエンティティのすべてのコメントを取得するために結合によって結合することができます同じ構造を持つ3つのコメントテーブルが好きです。
私は同じ構造提案を持つ複数のコメントテーブルに同意します。 - 列が一貫している限り、コメントをビューに統合するのは簡単です。 – Nikhil
以下の画像のようなdb構造です。 Entity1またはEntity2を作成するときにCommentHistoryを作成する必要があります。
ですから、Entity1のためにすべてのコメントを取得する必要がある場合は、あなただけの必要があります:エンティティタイプごとに1つのコメントテーブルが
または::子コメントと一つのマスターエンティティテーブルのどちらか
Select * from Comment where CommentHistoryId = 5 -- '5' it CommentHistoryId from Entity1
- 1. iosコアデータSQLトランザクション関数を実装する方法は?
- 2. SQL Server 2008 r2でmodパーティショニングを実装する方法は?
- 3. mvcで依存関係注入を実装する方法は?
- 4. C#でデータグリッドの行間にこの関係を実装する方法は?
- 5. SQL Server 2005で高性能ツリービューを実装する方法
- 6. SQL Server CE 4.0でIDatabaseInitializerを実装する方法
- 7. Cocos2dで複数のCCSpritesにタッチを実装する方法は?
- 8. MySQLで多対多の関係を実装する最良の方法
- 9. Ruby on Railsでの嘆願とユーザーモデルの関係を実装する方法は?
- 10. SQL Serverレポートで複数のチャートを生成する方法
- 11. sql server queryサブクエリで複数の列を比較する方法
- 12. Unityでこの(HttpContext)依存関係を実装する方法は?
- 13. struts2-jquery-gridに "del"関数を実装する方法は?
- 14. m2m関係の作成方法に関するSQL Serverのアドバイスが必要
- 15. Cで "private/restricted"関数を実装する方法は?
- 16. UNITY:スレッドセーフなContainer.Resolve()関数をコンストラクタインジェクションで実装する方法は?
- 17. スカラーで汎用平均関数を実装する方法は?
- 18. MATLABでスペクトルカーネル関数を実装する方法は?
- 19. 複合インデックス:列の順序はsql server/linqのsqlに関係しますか?
- 20. JavaFXフィルタの実装(複数のブールオプションを処理する方法)
- 21. Haskellのライブラリ関数の実装方法
- 22. 複数のバージョンでapiのバックエンドを実装する方法
- 23. Microsoft SQL Server 2008のテーブル間の関係を調べる方法は?
- 24. C:動的関数のコピーを実装する方法は?
- 25. Haskellでこの関数を実装する方法
- 26. Mongoid:埋め込みドキュメント間の関係を実装する方法は?
- 27. Doctrineと非明示的な1:1の関係を実装する方法は?
- 28. SQL Serverの多言語コンテンツでフルテキスト検索を実装する方法
- 29. Oracle、SQL Server、およびASP.NETの間でハッシングを実装する方法
- 30. 複数のデータベースをSQL Serverにドロップする方法
+1チェック制約を使って「分散」キーをどのようにシミュレートできるかを指摘するため。しかし、私は、後者のアプローチが受け入れられる時代(ここではない)があると主張したい。 –
@pst:はい、あります。私の編集をご覧ください – gbn