尺寸建模中的桥表

Posted

技术标签:

【中文标题】尺寸建模中的桥表【英文标题】:Bridge table in dimensional modeling 【发布时间】:2018-08-14 15:30:02 【问题描述】:

我熟悉在事实和维度表之间创建桥接表。

在维度及其多维属性之间创建桥表是个好主意吗?

例如,客户有多个电话号码。我可以只创建一个与客户维度具有一对多关系的客户电话维度,还是建议创建一个桥接表?

【问题讨论】:

一篇关于此问题可能解决方案的相当全面的文章:dwbi1.wordpress.com/2011/03/13/… 谢谢,很有帮助。 【参考方案1】:

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

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

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

主要电话 其他手机

第一个属性将包含主要客户电话并且是强制性的。

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

上述设计简单明了,适用于大多数情况,除非您需要对电话号码执行特定分析,或者电话号码太多而必须全部使用。在这种情况下,我会将它们放入一个事实表(“客户电话”)中,其中可能包含:

客户 ID Phone_Profile_ID 日期 电话号码

Phone_Profile 是一个维度,应该包含电话属性,即“Phone Type”“Land Line”、“Mobile”、“Phone Use”“Primary”、“Secondary” 等。

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

【讨论】:

以上是关于尺寸建模中的桥表的主要内容,如果未能解决你的问题,请参考以下文章

加入一个包含桥表的表并从主表中获取数据,如果数据存在于桥表中,那么也可以获取它

Swift 中的桥接头转换

Swift 中的桥接头转换

框架方法可访问性中的桥接头

目标 C 中的桥接头 - 程序中出现意外的“@”

《数据库设计入门经典》读书笔记——第三章:工作场所中的数据库建模