我正在尝试设置数据库架构,其中对象可以接收喜欢。 我经常需要访问任何给定对象的喜欢总数。
我设置了两个表:
[OBJECT]
id
path
desc
[LIKES]
obj_id
user_id
timestamp
我会在对象表中实现一个字段" nr_of_likes" ,每当新行插入到likes表中时,该字段就会递增。 这应该比{{1}每个对象的喜欢数量快得多,对吗? 问题在于我获得了冗余数据,通常情况下,从我研究的内容来看,这并不好。 关于这类问题有哪些最佳做法?可以" nr_of_likes"领域实施? 感谢您分享您的意见!
答案 0 :(得分:1)
当然可以像你提出的那样实现一个列。正如你所发现的那样,这通常是一种不好的做法。如果您在Likes
表上有正确的索引,那么性能通常会很好。当然,这取决于您的数据库究竟有多大以及它所处的系统类型。
您是否想要违反数据库设计的“一般”规则就像决定任何其他类型的非规范化一样 - 这是什么原因?与该设计选择相关的成本是多少?它们是否超过了优势?
我自己的方法是始终遵循标准的数据库设计规则。在您确定可能存在性能问题之前, TEST 的性能。如果确实发现性能问题,请在不使用劣质数据库设计的情况下查看解决方法(索引等)。非规范化作为最后的手段。它是工具带中的一种工具,不幸的是,这种工具的使用频率超出应有的范围。
始终确保完全了解设计决策的缺点。