首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mysql:如何避免将同一数据保存两次?

mysql:如何避免将同一数据保存两次?
EN

Stack Overflow用户
提问于 2012-08-12 19:25:19
回答 1查看 260关注 0票数 1

我制作了一个投票系统,并在投票表中将投票记录为一行,如下所示:

代码语言:javascript
复制
post_id | user_id | votes | date

然后,我将此投票添加到用户元表中,该表的结构如下:

代码语言:javascript
复制
user_id | meta_key | meta_value

在这个表中,给出一个带有“meta_key”的user_id,我可以将post_ids数组保存或获取为meta_value。

我在两张桌子上省下一票的原因是--

1.为什么使用投票表?

我需要计算所有帖子的vote_total和vote_popularity,如果我只将它保存为用户元表中数组的一个元素,这就不容易做到。

2.为什么使用用户元表?

我需要检查用户是否已经为帖子投票。一旦设置,用户元数据就会被缓存。所以,我只需要检查一下in_array($post_id,$my_voted_posts)。如果没有user-meta表,对于用户访问的每个帖子,我将不得不检查投票表。

有没有更好的方法?

虽然我的投票系统运作良好。但不知何故,我觉得这不是一种有效的方式。我想请教你的专业人士,以了解我可以如何改进它,以获得更好的性能。谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-08-12 20:15:32

首先,我认为如果你有一个有效的索引,检查投票表是很好的。您可以使用composite indexes来索引post_iduser_id,这将使像select * from votes where post_id = X and vote_id = Y这样的查询具有相当高的性能。

总有一天,为了提高速度,你需要对你的数据进行反规范化,但我认为它不应该与你的规范化数据在同一层。也许您可以使用redis / memcache作为用户元数据?

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11921798

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档