0

我想允许我网站上的用户关注我网站上的其他用户和主题,但我不确定如何将它们结合起来。想想 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)

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

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

4

2 回答 2

2

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

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

在此处输入图像描述

(未显示各种后续对象之间的关系。)

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

通常有3 种策略来表示关系数据库中的继承。有关更多信息,请查看ERwin 方法指南中的“子类型关系” 。


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

于 2012-07-23T18:11:08.943 回答
0

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

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

于 2012-07-23T17:39:49.633 回答