我正在研究通过SQL Server 2012的c#程序。我想建立患者状态变化的历史记录。也就是说,每当患者取消/更换任何医疗保健提供者时,都必须更新。
我希望使用患者编号的主键保留这些更改的历史记录。 因此,我的问题是:我有什么方法可以修复或解决违反PK的问题吗?
违反PRIMARY KEY约束'PK_patient_member_status'。不能 在对象中插入重复键 'dbo.member_patient_member_status_history'。
答案 0 :(得分:2)
您不能输入重复的主键,而是为患者历史记录创建新表,并使用外键作为Paients的键。该表将具有1:M
(一对多关系)。您将能够输入多个历史记录或跟踪特定记录的更改。
That table will keep the changed fields for example:
Patient Table:
ID NAME Address
1 ABC XYZ
2 DEF PQR
Patient History
ID NAME ADDRESS FKPatientID
1 ABC XYZ1 1
2 ABC2 YXZ2 1
在上面的历史记录表中,它跟踪主表的更改。您还可以记录UpdatedAt
(日期时间)和UpdatedBy
,(用户ID)
答案 1 :(得分:0)
只有一条带有某个主键的记录。要修复,可以通过向主键添加更多列来松开约束或扩大约束。
患者编号上带有主键的历史记录听起来像无效的数据库设计。历史记录日志实际上不具有主键,因为您找不到一个唯一的列或组合。在患者编号或插入日期上使用普通键。
答案 2 :(得分:0)
听起来你要做的就是拥有状态变化的审计表。我建议通过设计,因为一个人可以进行多项更改,而不是让他们的患者编号成为本审核表中的主要密钥..
您可以考虑将主键作为标识列使用单独的审计表(尽管您可能希望保留并关注极端情况下的记录增长/数量)或UNIQUEIDENTIFIER列,因此主键是GUID
由于通过查询获取特定患者的状态更改非常重要,您可能需要考虑在审核/状态更改表中针对患者编号定义index。
HTH, 森