2010-04-05 190 views
2

我真的在尋找一些非常類似於SO的方式,在這裏可以對幾種不同的東西進行投票(問題和答案)。通常,我可以使用什麼樣的數據庫模式來支持對許多不同類型的對象進行投票?如何建立投票系統來支持多種投票類型的投票?

我有一個單獨的投票表,可以引用數據庫中的其他對象嗎?或者我必須擁有或應該爲我想投票的每個對象提供單獨的投票表。

回答

2

凱爾,

這是一個有點很難理解你所需要的東西......但這裏是我的2美分:

我想,你希望每票到店,當它被評爲,是誰(也許IP地址或用戶名),我會去一個單一的投票表解決方案。我還假設,當你從數據庫查詢實體(問題,答案等)時,你也想加入這張表,並且它不可能僅僅在投票表上進行查詢。

在這種情況下,您可以在投票表上使用2列 - 一個用於投票的對象類型,另一個用於保存該對象的ID。通過這種方式,您可以通過指定對象的類型將投票表加入任何其他查詢。

我認爲在單個表格中管理所有投票將使您的域更簡單,然後傳播它併爲每個實體創建投票表。在這個單一的投票表解決方案中,您只需要維護實體類型的列表(可能使用小型字典表)。

還有一個性能的考慮。如果您希望獲得數百萬票數,那麼這張單獨的表格將比一組單獨的表格增長得更快。這可能是對它的一個考慮。如果有很多併發的讀/寫操作,也要注意不要讓它成爲瓶頸。

+0

你似乎正確理解。我一開始也在考慮單桌,但是你的後一個評論妨礙了我立即以這種方式實現它 - 我擔心當表格的行數較大時這將是一個性能問題。 – 2010-04-06 13:52:46

+0

你能否添加更多關於表的預期大小和增長率的細節?有適當的索引和仔細的查詢,你應該能夠避免性能問題。 – Ami 2010-04-06 18:21:02

+0

我其實不確定這個時候桌子的預期尺寸和增長率。 – 2010-04-07 13:57:42