Mysql 如何创建一个;以下是;桌子

Mysql 如何创建一个;以下是;桌子,mysql,database,database-design,Mysql,Database,Database Design,我正在设计一个简单的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 ) 但是,没有关键字表。所以我不知道

我正在设计一个简单的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 )
但是,没有关键字表。所以我不知道


最好的方法是什么?

这是不正确的,因为您无法创建从
idtype
到父表的外键,因为“父表”根据
类型而变化。顺便说一句,如果用户可以跟踪多个关键字,那么您将无法避免使用一个单独的表(除非您希望将多个值“打包”到同一字段中,这是一个非常糟糕的主意)

有两种方法可以解决这个问题,最简单的方法可能是为每个可能的父表使用单独的
id
字段,然后对它们进行约束,以便其中只有一个可以是非空的

然而,由于集群表中的索引和二级索引非常昂贵,我宁愿使用类似的内容(tweets表未显示):


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

为什么没有关键字表?因为关键字在tweet中。