-1

如果标题的术语不正确,请原谅我,我描述的是一个中间表,它可以在 2 个或多个表之间建立一种多对多的关系。

在这种情况下,单个表包含适用于其他不一定相互关联的表的数据。

具体是一个网站:

  • 表 Pages 中的页面 A 和 B 属于站点 1。
  • 表用户中的用户 A 也属于站点 1,但用户 B 属于站点 2

所以此刻的中间表是这样的:

id | site | page | user
-----------------------
 1 | 1    | A    | null
 2 | 1    | B    | null
 3 | 1    | null | A
 4 | 2    | null | B

尽管这似乎成为许多问题的原因,但系统将得到完全规范化的数据库的支持,例如删除用户将删除矩阵中与其关联的任何记录,更新也会级联。

我知道这里的数据量可能会很高,这就是为什么它只用于链接包含 5-200 条记录的引用表。海量记录表(例如包含数千条记录和增长的帖子或媒体)连接到站点将被展平并直接存储站点 ID。

最后,我需要这样的解决方案的原因是因为我需要将元素分配给可自定义数量的站点,否则唯一的选择是:1 个站点、所有站点或没有站点。

所以我的问题是,这是一种有效的方法吗?

4

1 回答 1

1

是的,您需要能够将页面/用户分配给多个站点。但是,这两者在其他方面并不相关(鉴于当前已知的要求)。即使他们是,也可能有更好的方式来展示任何关系。

无论出于何种原因,您似乎认为拥有规范化表不会启用关系;这是如何工作的。

UserSite
==========
userId  -- fk reference user.id
siteId  -- fk reference site.id

元组 [ userId, siteId] 应该是唯一的。预计一个站点上会有很多用户,并且一个用户可能出现在多个站点上。这种关系将在用户和站点之间进行跟踪。想要为用户启用网站?将它们添加到此表中。想要为用户禁用网站?从这个表中删除它们(或有一个“禁用”列或类似的)。

您将需要一个单独的表来PageSite记录页面和站点之间的关系。除非您正在对关系进行其他操作- ,否则您不需要将它们放在同一张表中。pageuser

于 2012-09-26T18:01:26.990 回答