0

私は3つのデータ型を持っています-a)共通の列b)階層-そしてデータベースを設計する方法を知りたいです。

トップレベルで、ディスカッションがあるとしましょう。その中には、DiscussionMessages、Files、Commentsがあります。それらはすべて共通のフィールド(UserID、CreateDate、Text)を持っていますが、一意の列(FileName、ContentTypeなど)も持っています。コメントは任意のタイプ(他のコメントも含む)に関連付けることができ、ファイルと同じです。

ここでいくつかの質問を調べた後、クラステーブル継承が必要だと思います。1つのベーステーブル(DiscussionParts)に共通の要素を格納し、次に各データ型に固有のテーブルを格納します。

DiscussionParts:PartID、DiscussionID、ParentID、PartType(M、F、C)、UserID、Text、CreateDate

メッセージ:MessageID、PartID、Title

ファイル:FileID、PartID、FileName、ContentType

コメント:CommentID、PartID、ソース

ParentID列は、階層を追跡するためのものです。DiscussionIDは、ユーザーが1つの簡単なクエリですべてのディスカッションでテキストを検索できるようにするためのものです。

これは、階層を持つクラステーブル継承の推奨設計ですか?

4

1 に答える 1

1

クラスではなく、エンティティと、場合によっては機能の観点からこれを再キャストすることをお勧めします。その理由は、データベースは「クラス」と「継承」を行わず、そのようにキャストすると非効率な設計になる可能性があるためです。

「...最上位にはディスカッションがあります」のように聞こえます。これがトップ テーブルであることを意味し、おそらく ID、タイトル、およびメッセージの内容を説明するテキストが含まれていると考えられます。

そこから、Messages テーブルは Discussions の子となり、外部キーとしての DiscussionId、その messageId、Title、text などを持ちます。あなたはフォーラムを構築しているように聞こえますが、これまでのところとても良いです。

コメントは少しトリッキーです。おそらくコメントはメッセージに追加されますか?これは、Comments テーブルに、メッセージへの外部キーと、独自の CommentId およびいくつかのテキストがあることを意味します。

しかし、質問から、ファイルがどこに入るのかわかりません。それらは全体としてディスカッションに添付されていますか? メッセージ?それともコメント?それに対する答えが何であれ、Files テーブルを適切なテーブルの子にします。

したがって、階層はクラスではなくテーブルであり、次のようになります。

Discussions ----> Messages ---> Commnts
于 2011-01-15T15:29:04.530 に答える