【发布时间】:2014-01-08 11:33:27
【问题描述】:
我有以下表格:Users、Regions 和 Teams。每张桌子都相互之间存在多对多的连接,我需要来自各个方向的每一个连接。换句话说:
-
Users可以是多个Regions和Teams。 -
Regions可以有多个Users和Teams。 -
Teams可以在多个Regions中,并有多个Users。
我应该如何实现它们之间的数据透视表?
在每个表之间创建多个小型数据透视表
在所有表之间创建一个大数据透视表
我应该使用哪一个?实际上是否有完美的解决方案,或者是否有优缺点? 如果我必须以相同的方式连接 4 个或更多表,答案是否会有所不同,其中任何 n - 数据透视表都有 6 - 或 (n(n-1))/2?
【问题讨论】:
-
用户是否属于独立于团队的区域?或者用户是否属于特定区域,因为该人的团队位于该特定区域?
-
@AgRizzo 不,地区和团队是两个不同的东西。用户可以是某个区域的一部分,也可以是位于完全不同区域的团队的一部分。例如,用户住在匈牙利,但在美国团队远程工作。
-
采用第一个解决方案——第二个是用户、匈牙利和美国队之间的关系。然后,您需要为该用户的团队和地区的每个变体创建另一个条目。
-
@AgRizzo 是的,但是如果我需要添加第四个表,就会有很多数据透视表。
-
很多表不一定是坏事,当您存储规范化数据时会出现这种情况。顺便说一句,您描述的表格是junction tables,而不是pivot tables。您应该根据需要拥有尽可能多的联结表,听起来您有三个独立的关系,团队 >> 用户、用户 >> 区域、区域 >> 团队。这三个都是独立的,所以每个关系都应该有自己的联结表,所以使用你的第一种方法。
标签: mysql sql database-design database-relations