2011-11-10 70 views
2

論壇數據庫的常見規範化結構是將所有帖子存儲在列中定義線程號的列表中。要顯示一個線程,我們需要執行SELECT和線程號WHERE子句(按日期排序)。在這種情況下,我們處理每個查詢的很長的表格。論壇的規範化數據庫結構

它真的是存儲論壇帖子和主題的最佳方式嗎?

Q &像股票交易所項目一樣,除了答案(即與論壇上的帖子相同)之外,每個答案都可以有評論。

什麼是像stackoverflow這樣的大型網站的最有效的數據庫結構?

+3

您可以在以下位置看到stackoverflow數據庫結構:http://data.stackexchange.com/stackoverflow/query/new表格和字段列在右側。 – Johan

+1

一些簡單的問題:你有一個樹結構(評論的評論)?線程以用戶帖子開始?他們是類別? ... – danihp

回答

2

這遠遠不是作爲這樣大,但在我的應用程序,模型我CHOS是讓每個崗位都有

  • 一個FK其父職位(根帖子在此欄爲空)
  • 一個FK到根後(根帖子在此列,這是一個有點尷尬插入新根的帖子自己的ID,而且有利於進行查詢)
  • 一個FK到他們的論壇

這允許輕鬆獲得

  • 論壇的根帖(搜索與一個null父帖)在一個線程一次
  • 所有消息(搜索具有給定根的所有文章)
  • 呈現所述螺紋在平坦(每日期),或在樹模式模式(因爲每個崗位都知道它的父)
  • 在給定的論壇的最新帖子(搜索通過論壇進行分組最新帖子)
1

如果接受論壇是另一種形式樹結構 - 我會建議gest嵌套設置或封閉表來創建帖子之間的關係。 nested setclosure table - 無法找到關閉的好鏈接 - 抱歉!

簡單存儲線程和家長的ID可以使事情有點棘手...

2

查詢一個更快的方法是特里和一組嵌套即celko樹之間的混合。例如,您可以使用線程ID爲嵌套集合查詢構建帶有附加左側和右側ID的三元樹狀結構。複雜的事情是插入或刪除這棵樹。或者你可以用一個哈希鍵搜索kart-trie來搜索左右。但是我認爲一個嵌套集可能已經足夠了,因爲那時ID是無序的。