node.js - 在MySQL数据库中如何存储用户关注的帖子id
大家讲道理
大家讲道理 2017-04-17 12:04:58
[MySQL讨论组]

背景情况是这样的:
我使用NodeJS + Express + MySQL搭建一个社区网站。

数据库中有一张user表,一张topic表。用户可以“关注”一个帖子。

我知道要获取某用户发表的帖子,是类似于
select * from topic where userid=userid
这样的语句。

可是对于“关注”功能,一时没想到如何设计表的字段。目前,我打算在user表中建一个TEXT类型的字段topic_stared,将用户关注了的帖子的topic_id们以JSON序列存储到topic_stared中。

不知道这样是否可取?

PS:已看过这个帖子:在关系型数据库中频繁使用 JSON 格式来存储不需要索引的数据好么?

还有像这样的:怎么样实现MYSQL数据库分表?,难道要建N多个表吗?

大家讲道理
大家讲道理

光阴似箭催人老,日月如移越少年。

全部回复(8)
迷茫

首先,不要对建表有恐惧心理,觉得就为一个映射关系建一张表很不值当。
现在,我们假设建立这样的表,来存储关注的帖子。

userId int(10)
topicId int(10)

只有两个字段,觉得很浪费是不是。
我们来讲讲好处:
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进行水平分表

还有疑问,可以留言

天蓬老师

你看的帖子说的很清楚,慎用text字段,建议换db,nosql
如果你真的很想用mysql,先说说关注你想做成什么样子,需求是什么说清楚再谈合适不合适

伊谢尔伦

那样存总有一天会超过最大的限制吧,我看cnode社区的收藏是单独拿个表存的,一条记录包括user_idtopic_id时间

黄舟

新建一张topic_stared表userid topicid addtime,或者用mysql5.7 支持json。不过新建一张表的扩展性好。

大家讲道理

支持建立关系表

PHPz

根据三大范式,明显是要有一个多对多的关注表

大家讲道理

建一张关联映射表是不错的选择,mongodb查询起来不是很方便

大家讲道理

楼主的需求应该只要建张多对多的表就行,如果考虑性能的话,可以用redis等,微博关注什么的都是这么搞的

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号