主键和约束

时间:2009-06-19 12:51:12

标签: database database-design data-warehouse

在我从OLTP数据库构建的全新数据仓库中,我删除了所有IDENTITY列并将其更改为INT列。

关于以下内容的最佳做法是什么,特别是因为仓库是非规范化的:

  1. 主键
    - >现在这可能是一个复合键,因为有几个表组合在一起 - >我需要遵循OLTP的关键结构吗?
  2. 约束
    - >对于位列为
  3. ,存在一些约束(NOT NULL)和默认值(0)

3 个答案:

答案 0 :(得分:1)

对于您的主键,请考虑使用代理键或备用键;你需要迎合缓慢变化的尺寸,例如:如果您在过去5年内对已婚/未婚销售人员的平均销售情况进行报告,您需要注册一个事实,即某人未婚2年,然后结婚3年。这意味着您的数据仓库将为同一个人提供两个维度表行。遵循OLTP结构将很难:)

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

答案 1 :(得分:1)

对于尺寸表:

  • 保留代理自动递增(标识)PK,日期维度除外(见下文)。
  • 确保您有一个替代的“自然键”以允许缓慢变化的尺寸(类型2)。
  • 尺寸表中不允许使用空值,请将其替换为详细的“不适用,未输入,未知......”
  • 如果可能,请将布尔标志(1/0)更改为详细“是,否”,以使其报告/业务用户友好。
  • 删除计算字段并将其替换为值,或者至少保留计算字段 - 取决于数据库。
  • 如果可以的话,实施星型模式,以换取速度。只有你必须雪花。
  • 检查您的查询,如果WHERE子句中有函数,则在维度表中添加一列并预先计算值。
  • 如果PK看起来像20090619,则很容易划分日期维度。
  • 删除检查约束和默认值,将其移至ETL过程的符合阶段。检查和默认设置减慢了加载速度,加载完成后它们不起作用。

对于事实表:

  • 考虑使用代理自动增量(标识)PK以允许轻松分区,如果使用复合PK,则可以使复合唯一非群集代替。

  • 将外键的脚本放在安全的地方,通常的做法是在加载事实表之前删除键以加快加载速度。有些人使用外键运行DW是“仅逻辑”,他们在加载后使用“查找孤立”查询。

<强> ETL

  • 在所有阶段设计您的ECCD(ETL)流程:提取,清理,整合,交付。
  • 如果可能,请在每个阶段后保留中间结果(文件)以进行审计和调试。
  • 记录ETL,如果使用脚本使用版本控制,则可以将脚本版本与存档(中间)文件匹配。
  • 拥有数据沿袭图表,Excel总比没有好。保留版本。

答案 2 :(得分:0)

我会说约2: 位列 - &gt;像bool cols一样工作 - &gt;仅允许1/0(真/假) - &gt;约束好的