2016-04-06 50 views
0

我試圖設置一個數據庫模式,其中對象可以接收喜歡的東西。 我經常需要訪問任何給定對象的喜歡總數。如何在關係數據庫中實現「喜歡的數量」

我設置兩個表:

[OBJECT] 
id 
path 
desc 

[LIKES] 
obj_id 
user_id 
timestamp 

它將使SENCE給我實現一個場「nr_of_likes」的對象表,那將是每一個新行插入喜歡的時間增加表。 這應該比每個對象的喜歡數要快得多,對吧? 問題是我得到了多餘的數據,通常從我研究的內容來看,這並不好。 有關這類事情的一些最佳實踐是什麼?可以實施「nr_of_likes」字段嗎? 謝謝您分享您的意見!

+0

其被稱爲去歸一化或記憶,經常因爲性能原因而被使用 –

+0

將一個包含喜歡的總數的列添加到表中而不是獲得COUNT()並不理想。雖然閱讀速度可能會更快,但您必須考慮到每次數字更改時都必須不斷維護該列。另外,你會失去誰喜歡它的所有概念,以及何時。冗餘數據並不總是很糟糕,但您認爲在這種情況下冗餘數據是什麼? – Siyual

回答

1

當然可以按照您的建議實施一個列。正如你也發現,但通常是一種不好的做法。如果你在Likes表上有適當的索引,那麼性能通常會很好。當然,這取決於數據庫的大小以及它的系統類型。

不管你是否想要違反數據庫設計的「一般」規則,就像其他任何類型的非規範化的決定一樣 - 推理是什麼?該設計選擇與哪些成本有關?他們是否超過了這些優勢?

我自己的方法是始終遵循標準的數據庫設計規則。 測試性能,然後再決定可能存在性能問題。如果您發現性能問題,請查看解決方法(索引等),而不使用低級數據庫設計。非規範化作爲最後的手段。它是工具帶中的一種工具,不幸的是,它比應該使用的更頻繁。

總是確保你完全明白,雖然設計決定的缺點。

相關問題