维度建模中的桥梁 table

Bridge table in dimensional modeling

我熟悉在事实和维度 table 之间建立桥梁 table。

在维度和它的多维属性之间建立桥梁 table 是个好主意吗?

例如,客户有多个 phone 号码。我可以只创建一个与客户维度具有一对多关系的客户 telephone 维度,还是建议创建一个桥梁 table?

专门针对多个 phone 示例进行回答。

我通常尽量避免桥接 tables。它们是设计的复杂化,保持简单是一种更好的方法(当然,并非总是可行)。

如果每个客户有多个 phone,我会创建 2 个属性:

  • 小学Phone
  • 其他Phones

第一个属性将包含主要客户 phone,并且是必填项。

第二个属性可能包含一个或多个其他 phone 数字,这些数字连接成一个分隔字符串(即“415-111-1111、415-222-2222”)。这样的设计是可以接受的,因为您(很可能)只会将这些额外的 phone 用作报告中的描述性信息。此外,您很可能会有数量不等但相当有限的此类 phones - 比方说,0-3 左右,这意味着该属性要么为空,要么包含一个相当短的字符串。

以上设计简洁明了,适用于大多数情况,除非您需要对 phone 个数字进行特定分析,或者如果数字太多而必须全部使用。在这种情况下,我会将它们放入事实 table ("Customer Phones"),其中可能包含:

  • Customer_ID
  • Phone_Profile_ID
  • 日期
  • Phone 人数

Phone_Profile 是一个应该包含 phone 属性的维度,即 "Phone Type" {"Land Line", "Mobile"}, "Phone Use" { "Primary"、"Secondary"}等

这样的事实 table 也可以是所有客户 phone 的定期快照(每年、每月等)并用作 phone 目录。但是,很少需要这种精心设计(除非您设计的是呼叫中心或类似的 phone-heavy 应用程序)。