在我的情景中,我正在跟踪一群成员和他们的医生变化
相关栏目是
MemberID | Prov_Nbr | Prov_Start_Date | Prov_End_Date | Prov_Update_Date
我的问题是关于主键
在这种情况下,在自动增量字段上使用主键会更好,并将列添加到前面,如下所示:
IDENTITY |MemberID | Prov_Nbr | Prov_Start_Date | Prov_End_Date | Prov_Update_Date
或者根据业务规则/数据的唯一性创建主键?
MemberID - PK1 | Prov_Nbr - PK2 | Prov_Start_Date - PK3 | Prov_End_Date | Prov_Update_Date
这是每周处理后数据在表格中的显示方式:
MemberID | Prov_Nbr | Prov_Start_Date | Prov_End_Date | Prov_Update_Date
------------------------------------------------------------------------
ABC123| IR456|2014-01-01|null|null - original record
ABC123| IR102|2014-04-01|null|null - new record turns original record `Prov_End_Date` to New `Prov_Start_Date - 1 day`
所以表格如下:
ABC123 | IR456 | 2014-01-01 | 2014-03-31 | null
ABC123 | IR102 | 2014-04-01 | null | 2014-04-30
还在我身边吗?
在某些情况下,根据业务性质,会员可以拥有"复古"这基本上意味着:
ABC123 | IR456 | 2014-01-01| 2014-03-31 | null
ABC123 | IR102 | 2014-04-01| null | 2014-04-30
获得新记录
ABC123 | IR402 | 2014-01-01 | null | null
基本上将原始记录改装为新的提供者。
这种情况会破坏数据的唯一性吗?或者SQL是否知道如何将其作为主键更新处理?
非常感谢任何帮助。
答案 0 :(得分:2)
我实际上会将两个解决方案放到位,就像创建一个标识字段作为主键(可能是clustered)和添加一个唯一的关键MemberID, Prov_Nbr, Prov_Start_Date
。
顶尖的SQL Server博客作者几乎总是颂扬作为PK的身份的优点,包括与代理人类似的情况,然后您可以另外强制执行与英国的业务规则。当然,我希望我正确地阅读你的要求,特别是“复古”部分。