在我从OLTP数据库构建的全新数据仓库中,我删除了所有IDENTITY列并将它们更改为INT列。主键和约束条件
什么是关于最佳实践以下特别是因为仓库规格化:
- 主键
- >这个现在可能是一个组合键,因为好几桌走到了一起
- >我需要遵循OLTP的关键结构?
- 约束
- >有一些约束(NOT NULL)与比特列的默认值(0)
在我从OLTP数据库构建的全新数据仓库中,我删除了所有IDENTITY列并将它们更改为INT列。主键和约束条件
什么是关于最佳实践以下特别是因为仓库规格化:
对于主键,可以考虑使用替代的或替代的密钥;您需要迎合缓慢变化的尺寸,例如如果您在过去5年中对每位已婚/未婚销售人员的平均销售情况进行了报告,则您需要注册一个事实,即有人未婚2年,然后结婚3年。这意味着您的数据仓库将对同一个人有两个维度表行。以下OLTP结构将是困难的:)
约束不是一个问题;数据仓库针对读取进行了大量优化(假设您将其作为批处理进行填充),并且约束条件在读取操作中并不是真正的因素。您通常可以绕过DW填充作业的任何约束问题,并在必要时处理报告工具中的空值等。确保默认值符合您的概念数据模型并且不会在DW客户端工具中引入问题更重要。
我要说约2: bit列 - >工作的布尔列 - >只有1/0(真/假)允许 - >约束OK
对于尺寸表:
WHERE
子句中有函数,则向维度表中添加一列并预先计算值。对于事实表:
请考虑一个替代的自动增量(标识)PK,以便轻松分区,如果使用复合PK,你可以做一个组合唯一的非聚集代替。
在安全的地方为您的外键准备脚本,在加载事实表之前放下键是为了加快加载速度。有些人使用外键“仅逻辑”运行DW,他们在加载后使用“查找孤儿”查询。
ETL
@ Jeremy-所以,如果我的OLTP有一个Person表和MaritalStatus查找和PersonsMaritalStatus表,然后我去规格化它,然后它会在被称为人与PERSONID和MaritalStatusId的复合键中的仓库一个表。这可以解释你描述的婚姻状况的变化。我的问题是:
我是否使用组合键或创建一个新的列(就像我在OLTP中做的那样? – 2009-06-19 13:02:36
那么难的是你必须做的邮编或******中国或任何其他一个或多个字段的组合,同样的事情会经常发生变化,那你需要报告。 这是把手慢慢改变,为什么大多数解决方案尺寸将实施一个备用键:)写得 – 2009-06-19 15:58:22