2016-04-06 54 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表上有适当的索引,那么性能通常会很好。当然,这取决于数据库的大小以及它的系统类型。

不管你是否想要违反数据库设计的“一般”规则,就像其他任何类型的非规范化的决定一样 - 推理是什么?该设计选择与哪些成本有关?他们是否超过了这些优势?

我自己的方法是始终遵循标准的数据库设计规则。 测试性能,然后再决定可能存在性能问题。如果您发现性能问题,请查看解决方法(索引等),而不使用低级数据库设计。非规范化作为最后的手段。它是工具带中的一种工具,不幸的是,它比应该使用的更频繁。

总是确保你完全明白,虽然设计决定的缺点。

相关问题