我正在为是否在我的SQL Server数据库中使用复合主键而进行哲学讨论。过去,我总是使用代理键,现在我正在挑战自己离开我的舒适区尝试不同的东西。我已经阅读了许多讨论,但仍然无法得出任何解决方案。我遇到的问题是当我必须更新具有复合主键的记录时。
例如,要更新的记录如下:
ContactID, RoleID, EffectiveDate, TerminationDT
在这种情况下,PK是(ContactID, RoleID, EffectiveDate)。TerminationDT可以为null。
如果在我的UI中,用户更改了RoleID,那么我需要更新记录。使用代理键,我可以执行Update Table Set RoleID = 1 WHERE surrogateID = Z。然而,使用组合键的方式,一旦组合键中的任何一个字段发生变化,我就无法引用旧记录进行更新,除非现在在UI中维护对旧值的引用。
我不在UI中绑定数据源。我打开一个连接,获取数据并将其存储在桶中,然后关闭连接。大家有什么意见?谢谢。