如何构建我的数据库表以允许用户关注多个表(人员、主题、问题等)
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 可能值得一读。
【讨论】:
以上是关于如何构建我的数据库表以允许用户关注多个表(人员、主题、问题等)的主要内容,如果未能解决你的问题,请参考以下文章
如何有效地查询多个表以在 dataGrid 中生成 excel STYLE 报告