ETL的数据库设计 - 代理与自然密钥

时间:2014-02-05 13:25:56

标签: database-design primary-key etl

我们目前正在重新设计我们的ETL数据库。

到目前为止,我们使用了以下自然键设计: CustomerID,OrderID和SystemType

可以为不同的客户重复订单ID,这就是SystemType键帮助我们创建唯一索引的原因。我们的连接很复杂,因为我们总是需要加入三个键。

我们想使用代理键,但当另一个提取物进入系统时,我们无法识别行,因为我们的代理键未包含在客户的提取中。

我们应该使用三列作为主键还是应该将它们连接成一列并将其用作主键?我知道自动增量键不是一个选项。

您是否可以分享您对此类系统的首选密钥设计的想法?

谢谢,

的Mathias

1 个答案:

答案 0 :(得分:2)

在ETL场景中,通常都有两者。您需要使用自然键来标识更新后的新行,并且在加载数据时必须保持其唯一性。然后,如果需要,可以为任何新行分配代理键。其他表中的外键可以引用代理或自然键,无论您喜欢哪个。在ETL场景中,如果自然键属性已经作为外键引用存在于其他表中,则通过模式级联代理键的成本可能比仅保留自然键值要昂贵得多。