0

我正在开发通过 SQL Server 2012 的 ac# 程序。我想建立患者状态变化的历史记录。也就是说,每次患者取消/更改任何医疗保健提供者时,都必须更新它。

我想用患者编号的主键保留这些更改的历史记录。因此,我的问题是: 有什么办法可以解决或绕过违反 PK 的问题?

违反主键约束“PK_patient_member_status”。无法在对象“dbo.member_patient_member_status_history”中插入重复键。

4

3 回答 3

2

您不能输入重复的主键,而是为 Patient History 创建一个新表,外键作为患者的键。该表将具有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(DateTime) 和UpdatedBy, (UserID)

于 2013-03-19T07:08:38.567 回答
0

一个主键只能有一条记录。要修复,要么放松约束,要么扩大约束,通过向主键添加更多列。

带有患者编号主键的历史日志听起来像是无效的数据库设计。历史日志不能真正有主键,因为你找不到一个列或组合必须是唯一的。在患者编号或插入日期上使用普通键。

于 2013-03-19T07:08:11.573 回答
0

听起来你想做的是有一个状态变化的审计表。我建议按照设计,因为一个人可以进行多项更改,您不要将他们的患者编号作为此审核表中的主键。

您可能会考虑将具有主键的单独审计表作为标识列(尽管在极端情况下您可能希望密切关注记录的增长/数量)或 UNIQUEIDENTIFIER 列,因此主键是 GUID。

由于通过查询获取特定患者的状态更改非常重要,因此您可能需要考虑在审计/状态更改表中针对患者编号定义索引。

HTH,弥敦道

于 2013-03-19T07:10:45.347 回答