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用于用户元数据?

感谢您确认我没有做错事情。是的,所以,我不会担心这个。