2009-06-19 109 views
0

在我从OLTP数据库构建的全新数据仓库中,我删除了所有IDENTITY列并将它们更改为INT列。主键和约束条件

什么是关于最佳实践以下特别是因为仓库规格化:

  1. 主键
    - >这个现在可能是一个组合键,因为好几桌走到了一起
    - >我需要遵循OLTP的关键结构?

  2. 约束
    - >有一些约束(NOT NULL)与比特列的默认值(0)

回答

1

对于主键,可以考虑使用替代的或替代的密钥;您需要迎合缓慢变化的尺寸,例如如果您在过去5年中对每位已婚/未婚销售人员的平均销售情况进行了报告,则您需要注册一个事实,即有人未婚2年,然后结婚3年。这意味着您的数据仓库将对同一个人有两个维度表行。以下OLTP结构将是困难的:)

约束不是一个问题;数据仓库针对读取进行了大量优化(假设您将其作为批处理进行填充),并且约束条件在读取操作中并不是真正的因素。您通常可以绕过DW填充作业的任何约束问题,并在必要时处理报告工具中的空值等。确保默认值符合您的概念数据模型并且不会在DW客户端工具中引入问题更重要。

+0

@ Jeremy-所以,如果我的OLTP有一个Person表和MaritalStatus查找和PersonsMaritalStatus表,然后我去规格化它,然后它会在被称为人与PERSONID和MaritalStatusId的复合键中的仓库一个表。这可以解释你描述的婚姻状况的变化。我的问题是:
我是否使用组合键或创建一个新的列(就像我在OLTP中做的那样? – 2009-06-19 13:02:36

+0

那么难的是你必须做的邮编或******中国或任何其他一个或多个字段的组合,同样的事情会经常发生变化,那你需要报告。 这是把手慢慢改变,为什么大多数解决方案尺寸将实施一个备用键:)写得 – 2009-06-19 15:58:22

0

我要说约2: bit列 - >工作的布尔列 - >只有1/0(真/假)允许 - >约束OK

1

对于尺寸表:

  • 保留代理自动增量(身份)PK,日期维度除外(见下文)。
  • 确保您有一个备用的“自然键”以允许缓慢更改尺寸(类型2)。
  • 尺寸表中不允许有空值,用冗长的“n/a,未输入,未知值”替换它们。
  • 如果可能,请更改布尔标志(1/0)以详细说明“是,否”它报告/业务用户友好。
  • 摆脱计算的字段并将其替换为值,或者至少保留计算的字段 - 取决于数据库。
  • 如果可以的话,实施星型模式,交换空间以获得速度。只有在必须的情况下才会有雪花。
  • 检查您的查询,如果WHERE子句中有函数,则向维度表中添加一列并预先计算值。
  • 这是很容易的分区日期维度,如果PK的样子20090619.
  • 摆脱的检查约束和默认值,将其移至符合ETL过程的阶段。检查和默认设置会减慢加载速度,一旦你完成加载,它们就不起作用。

对于事实表:

  • 请考虑一个替代的自动增量(标识)PK,以便轻松分区,如果使用复合PK,你可以做一个组合唯一的非聚集代替。

  • 在安全的地方为您的外键准备脚本,在加载事实表之前放下键是为了加快加载速度。有些人使用外键“仅逻辑”运行DW,他们在加载后使用“查找孤儿”查询。

ETL

  • 通过各个阶段的设计你的ECCD(ETL)过程:提取物,洁净,符合,交付。
  • 如果可能的话,为了审核和调试目的,在每个阶段后保留中间结果(文件)。
  • 记录ETL,如果使用脚本使用版本控制,以便可以将脚本版本与归档(中间)文件相匹配。
  • 有一个数据血统图,Excel总比没有好。保留版本。