2009-11-25 50 views

回答

2

幾個原因:

  • 概念上的問題和答案是不是真的,從建模的觀點不同;
  • 它使搜索更容易(一個表而不是兩個);
  • 如果你曾經試圖在兩個表中實現這樣的系統(這包括你有帖子啓動線程和回覆的論壇),你很快就會發現SQL非常快速地變得非常尷尬。

查看此問題的最佳方法是通過某些用例運行特定模型。

例如:以某種順序列出用戶的所有帖子(投票,日期等)。在兩張牌桌上,你最終做了某種聯盟,這並不是不可取的。如果它們存儲在同一個表中,則更容易。如果你只是想限制它的問題或答案,那麼相同的表格仍然很容易,因爲它只是一個額外的標準(例如WHERE parentID IS NULL的問題)。

1

Cletus是正確的,但請記住,通過這樣做你是否反規範化你的數據庫,因爲雖然答案和問題是相似的,但它們是不一樣的。特別是一個問題有很多答案,但每個答案只屬於一個問題 - 在那裏你將開始在表格中存儲冗餘重複數據。雖然根據您的基礎架構的不同,這樣做可能會有一些速度/開發優勢,但是如果您告訴任何數據庫管理員,他們會有心臟病發作:-)所以,您可以做到這一點,並且它可以讓開發變得更容易一些然而,編寫一些連接和聯合來提取相同的數據並不難。

+0

嗯......沒有。問題 - >答案是一種自我指涉的一對多關係。這是經典的E-R建模以及任何數據庫人員都很容易理解的內容。 – cletus 2009-11-26 03:27:48

+0

@Nick:cletus是對的,我最後的地方叫它「豬尾巴」。 – 2009-11-26 04:07:45

+0

我明白你在說什麼,但在這種情況下是最好的解決方案。這是爲什麼。如果你有類似的東西需要參考 - 那麼是的,這種方法是最好的。例如,假設一家營銷公司有一個網站和一張賬目表,需要說明誰來參與該網站的註冊支付推薦費,那麼您可以使用豬尾巴。然而,取決於你的數據是如何設置的答案和問題最有可能是不同類型的對象。但是,如果在OS上對IF答案和問題進行建模,這是一種有效的方法。 – konung 2009-11-29 02:24:09

相關問題