核心/自定义事实表

Posted

技术标签:

【中文标题】核心/自定义事实表【英文标题】:Core/Custom Fact Table 【发布时间】:2017-01-10 22:00:38 【问题描述】:

我有一个按订单/行粒度定义的事实表。每个订单都属于某个垂直行业,每个垂直行业都有用于描述其数据的自定义属性。我希望能够允许用户查询所有订单,而不考虑垂直,但在查询特定于垂直的数据时,能够按垂直特定属性进行过滤。

这是我计划如何构建它,但如果这看起来像一个好的设计,请提供意见,或者如果这不好,请推荐另一种方法。

事实表将包含 VerticalKey FK。这些是我计划制作的 Dims:

    DimVertical(超类型/核心)

    垂直键(自动增量) OrderId(备用键)

    DimVertical-Car(子类型/自定义)

    VerticalKey(来自 DimVertical.VerticalKey 的密钥 ID) CustomAttributeABC CustomAttributeDEF CustomAttributeGHI

    DimVertical-Motorcyle(子类型/自定义)

    VerticalKey(来自 DimVertical.VerticalKey 的键) CustomAttribute123 CustomAttribute456

为了查询所有订单,只需对超类型 DimVertical 进行连接。但是,当我想通过垂直特定属性查询特定垂直时,我只会包含可选的子类型 Dimension。

这看起来是个好方法吗?其次,如果这是一个很好的方法,假设“OrderType”是一个超类型属性,所以它可以进入 DimVertical 维度,这很糟糕吗?我在质疑这一点,因为我知道您不应该有一个标题维度,但我不知道如何支持“自定义”订单标题搜索功能。

提前致谢!

【问题讨论】:

【参考方案1】:

在theory 中,类层次结构到关系模式的三种可能映射:

每个类层次结构的表

每个子类的表

每个具体类的表

如果我猜对了,你会遵循 每个子类的表 策略。这可能很好,但在不了解您的数据的情况下不能发表评论。

最好的方法是简单地设置一个包含非平凡数据的示例模式;您会很快看到访问查询是否执行并且是否易于创建。

根据我的经验,在数据仓库设计中一个常用的方法是每个类层次结构表(即所有子类都在一个表中实现),因为

访问是有效(无连接)并且 可能不一致的缺点(即您可以将汽车属性存储在摩托车记录中)在数据仓库中不重要,因为一致性通常是通过清理 ETL 作业而不是由数据库完成的.

【讨论】:

以上是关于核心/自定义事实表的主要内容,如果未能解决你的问题,请参考以下文章

Vue - 在引导表自定义组件上更新数据

使用样式表自定义 QDial

核心/自定义事实表

ABAP 实现内表自定义的F4功能

Hibernatehibernate原生sql利用transformers返回多表自定义类型对象

Django数据库如何将一个表自定义的key列还原成id列作为key