Database design ETL的数据库设计——代理与自然密钥

Database design ETL的数据库设计——代理与自然密钥,database-design,primary-key,etl,Database Design,Primary Key,Etl,我们目前正在重新设计ETL数据库 到目前为止,我们使用了以下带有自然键的设计: CustomerID、OrderID和SystemType OrderID可以为不同的客户重复,这就是为什么SystemType键帮助我们创建唯一索引的原因。我们的连接很复杂,因为我们总是需要在三个键上连接 我们希望使用代理键,但当另一个提取进入系统时,我们无法识别行,因为我们的代理键不包括在客户的提取中 我们应该使用这三列作为主键,还是应该将它们连接成一列并将其用作主键?我理解自动递增键不是一个选项 对于这样的系统

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

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

OrderID可以为不同的客户重复,这就是为什么SystemType键帮助我们创建唯一索引的原因。我们的连接很复杂,因为我们总是需要在三个键上连接

我们希望使用代理键,但当另一个提取进入系统时,我们无法识别行,因为我们的代理键不包括在客户的提取中

我们应该使用这三列作为主键,还是应该将它们连接成一列并将其用作主键?我理解自动递增键不是一个选项

对于这样的系统,您是否可以分享您对首选密钥设计的想法

谢谢


Mathias

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