核心/自定义事实表
Posted
技术标签:
【中文标题】核心/自定义事实表【英文标题】:Core/Custom Fact Table 【发布时间】:2017-01-10 22:00:38 【问题描述】:我有一个按订单/行粒度定义的事实表。每个订单都属于某个垂直行业,每个垂直行业都有用于描述其数据的自定义属性。我希望能够允许用户查询所有订单,而不考虑垂直,但在查询特定于垂直的数据时,能够按垂直特定属性进行过滤。
这是我计划如何构建它,但如果这看起来像一个好的设计,请提供意见,或者如果这不好,请推荐另一种方法。
事实表将包含 VerticalKey FK。这些是我计划制作的 Dims:
DimVertical(超类型/核心)
垂直键(自动增量) OrderId(备用键)DimVertical-Car(子类型/自定义)
VerticalKey(来自 DimVertical.VerticalKey 的密钥 ID) CustomAttributeABC CustomAttributeDEF CustomAttributeGHIDimVertical-Motorcyle(子类型/自定义)
VerticalKey(来自 DimVertical.VerticalKey 的键) CustomAttribute123 CustomAttribute456为了查询所有订单,只需对超类型 DimVertical 进行连接。但是,当我想通过垂直特定属性查询特定垂直时,我只会包含可选的子类型 Dimension。
这看起来是个好方法吗?其次,如果这是一个很好的方法,假设“OrderType”是一个超类型属性,所以它可以进入 DimVertical 维度,这很糟糕吗?我在质疑这一点,因为我知道您不应该有一个标题维度,但我不知道如何支持“自定义”订单标题搜索功能。
提前致谢!
【问题讨论】:
【参考方案1】:在theory 中,类层次结构到关系模式的三种可能映射:
每个类层次结构的表
每个子类的表
每个具体类的表
如果我猜对了,你会遵循 每个子类的表 策略。这可能很好,但在不了解您的数据的情况下不能发表评论。
最好的方法是简单地设置一个包含非平凡数据的示例模式;您会很快看到访问查询是否执行并且是否易于创建。
根据我的经验,在数据仓库设计中一个常用的方法是每个类层次结构表(即所有子类都在一个表中实现),因为
访问是有效(无连接)并且 可能不一致的缺点(即您可以将汽车属性存储在摩托车记录中)在数据仓库中不重要,因为一致性通常是通过清理 ETL 作业而不是由数据库完成的.【讨论】:
以上是关于核心/自定义事实表的主要内容,如果未能解决你的问题,请参考以下文章