2012-09-25 165 views
-1

如果标题的术语不正确,请原谅我,我所描述的是一个中间表,它启用了2个或多个表之间的多对多关系。SQL表格矩阵

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

具体的位点:

  • 页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 

尽管呈现开放g成为许多问题的原因,系统将通过数据库被完全标准化来支持 ,例如删除用户将删除 与矩阵相关联的任何记录,更新也将级联。

我知道这里的数据量可能会相当高,这就是为什么它只能用来链接包含5-200条记录的参考表。大量记录表格,例如包含数千个记录的越来越多的连接到网站的帖子或媒体将被平铺并直接存储网站ID。

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

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

+2

我必须告诉你,这张表会让你的系统**不被正常化。它正在引发你的问题。您可以正确地规范化您的数据库并满足您列出的要求。 –

+0

那么你会怎么做呢?
编辑:http:// sqlrelationship。com/many-to-many-relationship/
好吧,它叫做联结表。在网站上的例子与我尝试过的方式一样,除了我已经使它适用于用户和页面,所以我应该把它分成两个表格? – Flosculus

+0

我同意正常化会更好地为您服务。例如在你的**网页**表格中有一个包含网站的* siteID *列;在**用户**表中也有一个* siteID *来指定用户属于哪个站点。 –

回答

1

是的,您需要能够将页面/用户分配到多个站点。然而,这两者并不相关(鉴于目前已知的要求)。即使他们是,也许有更好的方式来显示任何关系。

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

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

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

您要分开PageSite记录页面和网站之间的关系。除非有什么其他你正在处理关系page - user,你不需要把它们放在同一张表中。

+0

谢谢。使用同一个表执行多个连接点确实很麻烦。我很满意这会启用我尝试创建的功能。 – Flosculus