【问题标题】:Insert value to Star schema fact table将值插入星型模式事实表
【发布时间】:2020-07-20 10:11:00
【问题描述】:

我在设计星型模式时遇到了困难。这是我的问题

我已经设计了几个维度表。 带有客户表(customer_id、name、address)(200 行) 库存表(电影、类别、inv_id)(400 行) 存储表(store_id,存储)(4 行) 和销售表 (sale_date,sale_id) (16500 行)

我正在尝试将值插入事实表(新创建的,空的)付款(FK customer_id,FK inv_id,FK store_id,FK sale_id,payment_amount) 我有 15650 条付款记录。如何将这些值插入事实表?

当我使用时

insert into payment_amount
select amount
from original

它运行一个错误。外键不违反空值

我应该怎么做才能将这些值包含到事实表中? 我知道我在这里有概念上的错误,希望你能给我一个很好的澄清

【问题讨论】:

    标签: mysql sql database postgresql database-design


    【解决方案1】:

    抛出的错误可能是因为父维度表中不存在这些值 - 客户表、库存表、商店表、销售表,或者一旦您尝试将这些值加载到事实表中,其余的未插入具有非空约束的字段。 您的设计遗漏了表标准之间的基本关系。例如,客户如何与销售相关或销售如何与商店相关

    例如,您可以有一些关系,例如 - 商店表 -> 客户表、销售和库存表。这些关系可以是一对多、一对一或多对一。这样您就可以针对特定库存从特定商店向客户识别独特的销售

    您需要以如下方式设计数据流: 1. 首先是一个暂存表,它可能是非持久的,将成为来自不同来源的所有摄取的着陆区 2. 有一些中间表,其中包含来自临时表的数据转换 3. 从临时表和中间表创建维度表 4. 从维度表和中间表创建 Fact 表

    作为最佳实践 - 在以下流程中加载记录,以免键冲突 - 分期 -> 中级 -> 维度 -> 事实

    在理想情况下 - 您无需明确提及密钥,而是在其之上进行清理工作。

    【讨论】:

    • 我想再问一个与行有关的问题。我应该如何在事实表中排列这些行?因为每个主键都有不同的行。我不能直接选择它们并放置在事实表中,对吗?我应该使用哪种方法?在这里使用 GROUP BY ROLLUP 合适吗??
    • 我刚刚更新了答案。让我知道这是否有帮助。
    • 关于事实表的粒度,这将取决于您想要在报告中包含的信息。当您想要每月或每周的销售情况时,您可以有一个汇总的事实。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多