当前位置: 代码迷 >> Sql Server >> “点赞” 数据库表设计解决办法
  详细解决方案

“点赞” 数据库表设计解决办法

热度:76   发布时间:2016-04-24 08:45:57.0
“点赞” 数据库表设计
需求类似于微博,可以为主题点赞,但不能重复点赞。
目前的设计是有一个字段(varchar(max)),记录所有点过的用户id,类似于:311000|3110001|3110002
这样每次用户点赞就要根据这个字段判断是否已经赞过。
感觉这样设计不是很好,请问这样的表怎么设计比较好?
谢谢。
------解决思路----------------------
如果按照传统数据库设计的理念,微博和用户是多对多关系,应该单立出一个关系表,包含微博表和用户表的主键,另外还可以包含“点赞”这个关系特有的属性,比如状态(避免反复取消和重点造成频繁删除和插入)、时间之类的。但是,如果真的像微博那么大量的话,这种方式恐怕无法满足性能的要求。
其实,我觉得你用的方法是可以的,只不过不能每次点赞和取消都用数据库的方式来操作。应该把“赞”这个字段的数据加载到内存中,点赞和取消都在内存中完成,然后定期把内存中的数据按照你的格式写入数据库。当然,这会造成内存和数据库中的数据不一致,如果真出现宕机,可能会丢失一部分“赞”,但我觉得“赞”这个数据其实并不关键,多一点少一点不是什么致命的问题。可以根据点赞和取消的次数来设定写库的频率,以避免内存和数据库中的数据差异过大。另外,可能还需要一个类似LRU的算法管理内存中缓存的“赞”数据。
  相关解决方案