0

我正在设计一个简单的 twitter 网站(用于学习),但有一点不同:用户可以关注其他用户、关键字和列表。我想知道如何创建一个下表来放置有关关注的信息。

这种方法(下)正确吗?

下表:

id ( id of the following table )
type ( type can be 1 ( user ), 2 ( keyword ) or 3 ( list ) )
idtype ( id of the type table )
user ( user's id )

但是没有关键字表。所以我不知道。

最好的方法是什么?

4

1 回答 1

1

这是不正确的,因为您无法从idtype父表创建外键,因为“父表”会根据type. 顺便说一句,如果用户可以关注多个关键字,那么您将无法避免为此设置一个单独的表(除非您想通过将多个值“打包”到同一字段中来打破 1NF ,这是一个非常糟糕的主意)。

有几种方法可以解决这个问题,可能最简单的一种是id为每个可能的父表使用单独的字段,然后限制它们,使它们中只有一个可以是非 NULL。

但是,由于InnoDB 表是聚集的,并且聚集表中的二级索引很昂贵,我宁愿使用这样的东西(未显示推文表):

在此处输入图像描述

这将使您能够非常有效地回答查询:“哪些用户关注给定用户(或关键字或列表)”。如果您需要回答:“给定用户关注了哪些用户(或关键字或列表)”,请颠倒上面显示的 PK 中的字段顺序。如果您两者都需要,那么您需要双向索引(并支付集群价格)。

于 2012-05-15T18:31:56.813 回答