mysql:如何避免将同一数据保存两次?
我制作了一个投票系统,并将投票记录在投票表中,如下图所示:mysql:如何避免将同一数据保存两次?,mysql,database-design,data-modeling,Mysql,Database Design,Data Modeling,我制作了一个投票系统,并将投票记录在投票表中,如下图所示: post_id | user_id | votes | date user_id | meta_key | meta_value 然后,我将此投票添加到用户元表中,其结构如下: post_id | user_id | votes | date user_id | meta_key | meta_value 在这个表中,使用meta_键“vots”为用户_id,我可以保存或获取一个post_id数组作为meta_值 我在两张表格中
post_id | user_id | votes | date
user_id | meta_key | meta_value
然后,我将此投票添加到用户元表中,其结构如下:
post_id | user_id | votes | date
user_id | meta_key | meta_value
在这个表中,使用meta_键“vots”为用户_id,我可以保存或获取一个post_id数组作为meta_值
我在两张表格中保留一票的原因是--
1.为什么要使用投票表?
我需要计算所有帖子中的投票总数和投票流行度,如果我只将其保存为用户元表中数组的一个元素,这并不容易
2.为什么要使用用户元表?
我需要检查一个用户是否已经投了一个帖子的票。一旦设置,用户元就会被缓存。所以,我只需要检查in_数组($post_id,$my_voated_posts)。如果没有用户元表,对于每个帖子的用户访问,我将不得不检查投票表
有更好的办法吗?
虽然我的投票系统运作良好。但不知何故,我觉得这不是一种有效的方法。我想咨询您的专业人士,了解如何改进它以获得更好的性能。谢谢 首先,我认为如果你有一个有效的索引,检查投票表就可以了。您可以使用来索引
post\u id
和user\u id
,这将生成一个类似select*的查询,其中post\u id=X,vote\u id=Y
在某一点上,您需要对数据进行非规范化以提高速度,但我认为它不应该与规范化数据位于同一层。也许您可以将redis/memcache用于用户元数据?感谢您确认我没有做错事情。是的,所以,我不会担心这个。