2013-03-19 37 views
0

我正在研究通過SQL Server 2012的c#程序。我想構建患者狀態更改的歷史記錄。每次患者取消/更改任何醫療保健提供者時,都必須更新。如何解決或解決衝突PRIMARY KEY約束

我想通過患者編號的主鍵保留這些更改的歷史記錄。 因此,我的問題是:有沒有什麼辦法可以解決或解決PK的違規問題?

違反PRIMARY KEY約束'PK_patient_member_status'。 不能在對象 'dbo.member_patient_member_status_history'中插入重複鍵。

+0

爲什麼你不能用'update',而不是'insert'? – 2013-03-19 07:08:02

+0

我想保留過去的醫療保健提供者的所有歷史記錄等 – user2164182 2013-03-19 07:09:18

+0

然後使用另一張表來保存@Habib建議的詳細信息 – 2013-03-19 07:10:39

回答

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(DateTime)和UpdatedBy(用戶ID)

0

的記錄這聽起來像你想要做的是有狀態更改審計表。我建議通過設計,因爲一個人可以進行多項更改,但不會將其患者編號作爲此審覈表中的主鍵。

您可能會考慮將具有主鍵的單獨審覈表作爲標識列儘管您可能希望在極端情況下保持並關注記錄的增長/數量)或UNIQUEIDENTIFIER列,以便主鍵是GUID。

由於通過查詢獲取特定患者的狀態更改很重要,因此您可能需要考慮在審覈/狀態更改表中針對患者編號定義index

HTH, 彌敦道