如何构建我的数据库表以允许用户关注多个表(人员、主题、问题等)

Posted

技术标签:

【中文标题】如何构建我的数据库表以允许用户关注多个表(人员、主题、问题等)【英文标题】:How can I structure my DB table(s) to allow users to follow multiple tables( people, topics, questions,etc) 【发布时间】:2012-07-23 16:27:06 【问题描述】:

我想允许我网站上的用户关注我网站上的其他用户和主题,但我不确定如何将它们结合起来。想想 quora 如何让您关注用户、主题、问题、编辑等。

为了关注用户,我打算让它变得非常简单:

user_id: int
followers_id: int

但这只对用户有好处,所以我考虑了如何:

user_id: int
date: Date
following: int(could be topic_id or user_id)
following_type: text(topic or user)

我有点不确定这是否是最好的方法,因为我必须解析类型来查询主题或用户表(但好处是因为所有数据都在一个表中,我可以一次查询即可快速获取所有后续信息)。

这是最好的方法还是有更好的(更高效、可扩展等)方法来实现这一目标?我应该将每种追随者类型分成不同的表格吗?我真的不确定我应该考虑什么设计。

【问题讨论】:

【参考方案1】:

显而易见的可能性是增加链接表 - 每种可连接的项目组合一个。

但是,通过使用继承1 避免这种扩散可能更易于管理:

(各种followables之间的关系未显示。)

这样,无论有多少种可关注项(用户、主题、问题、编辑等...),FOLLOWER 表都涵盖了它们。

关系数据库中一般有3 strategies代表继承。有关详细信息,请查看 ERwin Methods Guide 中的“子类型关系”。


1 又名类别、子类型、子类、泛化层次结构等。

【讨论】:

【参考方案2】:

有几种不同的方法可以处理这个问题。如果您想继续使用关系数据库,您可以创建一个(或多个)连接表来跟踪您的所有“关注”。

如果您有时间查看一些非关系型数据库,例如 MongoDB 或 Redis,您将能够准确地跟踪您想要的内容。这些服务允许您构建具有不同参数的自定义数据类型。这种风格的 DB 可能值得一读。

【讨论】:

以上是关于如何构建我的数据库表以允许用户关注多个表(人员、主题、问题等)的主要内容,如果未能解决你的问题,请参考以下文章

如何在 SQL 中创建临时表以用于多个 ADF 活动?

连接两个表以匹配整数以获取用户名

如何有效地查询多个表以在 dataGrid 中生成 excel STYLE 报告

使用 Prisma 2 和 PostgreSQL 构建权限表以根据权限级别授权用户?

在 Hive 中,如何组合多个表以生成包含对象数组的单行?

如何高效地从多个表中查询子记录?