3

eラーニングサイト用のスレッド化されたフォーラムを構築したいと考えています(もちろん、これはこの質問には関係ありませんが、オープンソースのasp.net mvcです)。

最適なパフォーマンスでフォーラムの投稿を取得するのに役立つ DB 構造はどうあるべきですか? 私はノーを入れていません。取得される行の量によって異なる場合があるためです。

さらに、特定のスレッドを別のスレッドにリンクできるはずです。たとえば。「関連するフォーラム リンク」を表示します。

SQL Server 2005 を使用しています。

以下は、私が心に留めている構造です (恥知らずに から引用しました) Stephen Walther 優れたブログ投稿

表 : フォーラム

· Id
· ParentId  (null if this is the first message)
· ParentThreadId  (Identify message in the same thread)
· Author
· Subject
· Body
· PostedDate

表: 関連フォーラム

· ForumId
· RelatedForumId

アイデア/提案を歓迎します。

前もって感謝します。

4

3 に答える 3

3

WHERE ParentId = @SomeId最も一般的なユースケースで非再帰的なトップダウン (フォーラム -> スレッド -> 投稿) でデータを取得することを念頭に置いている場合は、主にクエリが発生するため、このテーブル構造から始めるのが適切です。

「このフォーラム/スレッドにはいくつの投稿が存在するか?」などを計算できるようにしたい場合、どの Id が他のどの Id にネストされているか (つまり、子関係がない)。

ThreadId重複して保存しForumId、各投稿に含めることで、これを説明できます。それからあなたは尋ねることができるでしょうSELECT COUNT(*) FROM Postings WHERE ThreadId = @SomeId

これらの ID は、特定の投稿に対して変更される可能性は低いため、冗長性によってすぐに挿入/更新の異常が発生することはありませんが、物事を移動することにした場合に備えて、関連するすべての投稿を正しい ID で更新する手順を用意する必要があります。 .

階層データを RDBMS に格納するより高度な方法については、この質問に対する回答を調べることができます (これは私自身のものであり、「釣り上げ投票は意図していません」): 「フラット テーブルを解析する最も効率的でエレガントな方法は何ですか?木に?」

于 2008-12-12T08:48:57.653 に答える