维度建模中的桥梁 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 应用程序)。
我熟悉在事实和维度 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 应用程序)。