AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题 / 23365
Accepted
8kb
8kb
Asked: 2012-08-30 08:45:18 +0800 CST2012-08-30 08:45:18 +0800 CST 2012-08-30 08:45:18 +0800 CST

事实表的代理键分配是否要求源数据具有自然键?

  • 772

假设我有一个简单的 OLTP 数据库,其中包含订单、产品和客户:

在此处输入图像描述

从它开始,我正在构建一个包含订单事实表、产品维度、客户维度和日期维度的数据集市:

在此处输入图像描述

将订单表加载到 fact_orders 时(假设我使用 SSIS 查找转换来分配代理键),这是否意味着订单的数据源也需要具有关联的自然“外键”值OLTP系统中的订单?

换句话说,正在加载的数据会来自这样的查询吗?

SELECT 
  order_date,                   -- needed to get date surrogate key
  customer_name,                -- needed to get customer surrogate key
  product_name,                 -- needed to get product surrogate key
  order_number,                 -- denegenerate dimension,
  qty_ordered AS order_qty,     -- measure
  total_amount AS order_amount  -- measure
FROM orders o 
  INNER JOIN customers c 
    ON o.customer_id = c.customer_id
  INNER JOIN products p 
    ON o.product_id = p.product_id 
ssis data-warehouse
  • 1 1 个回答
  • 2206 Views

1 个回答

  • Voted
  1. Best Answer
    Chris Aldrich
    2012-08-30T09:43:30+08:002012-08-30T09:43:30+08:00

    我不确定您是否需要“自然”键,但您可能确实需要维护各种键映射。因此,您需要了解源系统和目标系统之间的关系映射,确定这些关系的键并从那里构建键映射。

    我之前有一个关于此的问题,称为“从自然键映射到基于整数的键的最佳实践是什么?(ETL)”。

    编辑:到目前为止,我看到至少三个,如果不是四个映射。

    CustomersToDim_Customers (customer_id, dim_customer_id)
    ProductsToDim_Products (product_id, dim_product_id)
    OrderDatesToDim_Date (order_date, date_id) or (map_id,order_date,date_id) if you want to use a key to map.
    

    最后,我将 order_id 视为事实表的关键。所以我会去

    OrdersToFactOrders (order_id,dim_date_id,dim_customer_id,dim_product_id)
    

    在我的例子中,我用 dim_field_id 重命名了市场的字段,因为我不想在我的表中发生名称冲突或混淆他们指向的 Id。您的 ETL 必须知道 CustomersToDim_Customers.dim_customer_id 真正映射到 Dim_Customers.customer_id 并且 CustomersToDim_Customers.customer_id 真正映射到 Customers.customer_id。

    我也倾向于将 order_number 包含在 OrdersToFactOrders 映射表中,但那是因为我喜欢跟踪数据以用于审计目的。让我的生活更轻松。但是,根据您告诉我的内容,order_number 和 order_id 是一对一的,因此包含 order_number 将是多余的,并且只有在您有完美主义偏执狂以确保您的数据在双方都正确的情况下才有必要(我真的很喜欢以确保 ETL 完成后 A 侧的 A 和 B 侧的 B 确实正确。)。

    • 3

相关问题

  • 创建 MV 日志时是否需要枚举物化视图中使用的列?

  • 结合零售销售和支付 OLAP 多维数据集

  • 开源商业智能/DWH 解决方案 [关闭]

  • 数据仓库创建

  • 在数据仓库中实现多对多关系有哪些方法?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    如何查看 Oracle 中的数据库列表?

    • 8 个回答
  • Marko Smith

    mysql innodb_buffer_pool_size 应该有多大?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    从 .frm 和 .ibd 文件恢复表?

    • 10 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    如何选择每组的第一行?

    • 6 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    pedrosanta 使用 psql 列出数据库权限 2011-08-04 11:01:21 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST
  • Martin Hope
    bernd_k 什么时候应该使用唯一约束而不是唯一索引? 2011-01-05 02:32:27 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve