我从不同的数据源收到一些唯一的案例编号,这些数据源可以作为我数据库的候选键。在创建全新的桌子时,最佳做法是什么?创建一个复合键(我的候选键和PK的自动生成的ID)或者只是为这个新表定义一个PK并在我的候选键上定义一个CHECK CONSTRAINT?
答案 0 :(得分:2)
这是一个棘手的问题。一般来说,我习惯于推荐代理主键 - 但不是复合键,只是自动递增键。以下是一些原因:
也就是说,在某些情况下,您可能希望使用源系统密钥而不是人工密钥。假设代码确实由源系统拥有并且它没有改变(源系统定义了什么"它"是)。然后,您可能希望将其作为主键 - 如果您可能需要重新加载数据。
为什么呢?重新加载数据可能会重新排序密钥。然后外键引用将失效。通常,数据重新加载将使用更新来处理,但可能存在可能需要批发替换的情况。
你可以想象我最近遇到过这种情况。
答案 1 :(得分:-1)
最佳做法是您的数据库拥有PK。考虑一下情况,您的来源是Sales Force上的产品表,产品代码是' 1234'无论出于何种原因,一段时间后,您的公司更改了SAP,同一产品将代码更改为“KA2541'”。如果您使用销售代码作为PK对数据库建模,则有两个选项:
这两个场景有很多风险关联,另一方面,如果你开始建模,考虑外部键的列与源关系无关紧要,你关心的是在源更改时更新外部代码。