背景情况是这样的:
我使用NodeJS + Express + MySQL搭建一个社区网站。
数据库中有一张user表,一张topic表。用户可以“关注”一个帖子。
我知道要获取某用户发表的帖子,是类似于select * from topic where userid=userid
这样的语句。
可是对于“关注”功能,一时没想到如何设计表的字段。目前,我打算在user表中建一个TEXT类型的字段topic_stared,将用户关注了的帖子的topic_id们以JSON序列存储到topic_stared中。
不知道这样是否可取?
PS:已看过这个帖子:在关系型数据库中频繁使用 JSON 格式来存储不需要索引的数据好么?
还有像这样的:怎么样实现MYSQL数据库分表?,难道要建N多个表吗?
首先,不要对建表有恐惧心理,觉得就为一个映射关系建一张表很不值当。
现在,我们假设建立这样的表,来存储关注的帖子。
只有两个字段,觉得很浪费是不是。
我们来讲讲好处:
1,查询
得到用户所有关注的帖子
select topicId from starTable where userId = userid
获取有多少人关注了这个帖子
select count(*) from starTable where topicId = topicId
还不错吧
2,扩展
现在希望存储用户什么时间关注的某个帖子,显然在这个表里加个time字段就好
3,效率
拿一个删除功能来说,很显然在数据库里直接删除一条记录,肯定比查询出字段,截取掉其中一部分,再插入要快
4,限制
如你所知道的,mysql单行数据是有上限的,如果一个用户关注了一w个topic,肯定会爆掉这个user表的
其他:
如果可以你可考虑下mongodb这种nosql数据库,或者postgre这种课存储json的关系型数据库,当然用mysql也是很好的选择
当然,用一个存储这种映射关系的表,如果未来用户量一大,肯定要做分表,到时可以很方便根据用户id的hash进行水平分表
还有疑问,可以留言