0

私は、SQL サーバー 2012 を通過する ac# プログラムに取り組んでいます。患者のステータス変更の履歴を作成したいと考えています。つまり、患者が医療提供者をキャンセル/変更するたびに更新する必要があります。

これらの変更の履歴を、患者番号の主キーで保持したいと考えています。したがって、私の質問は次のとおり です。PKの違反を修正または回避できる方法はありますか?

PRIMARY KEY 制約「PK_patient_member_status」に違反しています。オブジェクト 'dbo.member_patient_member_status_history' に重複するキーを挿入できません。

4

3 に答える 3

2

重複した主キーを入力することはできません。代わりに、患者のキーとして外部キーを使用して、患者履歴の新しいテーブルを作成します。そのテーブルには1:M(1 対多の関係) があります。複数の履歴レコードを入力したり、特定のレコードに対する変更を追跡したりできます。

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

特定の主キーを持つレコードは 1 つだけです。修正するには、制約を緩めるか、主キーに列を追加して制約を広げます。

患者番号を主キーとする履歴ログは、無効なデータベース設計のように聞こえます。一意であることがバインドされている列または組み合わせを見つけることができないため、履歴ログは実際には主キーを持つことはできません。患者番号または挿入日に通常のキーを使用します。

于 2013-03-19T07:08:11.573 に答える
0

あなたがやろうとしているのは、ステータス変更の監査テーブルを持っているようです。設計上、人は複数の変更を行うことができるため、この監査テーブルで患者番号を主キーにしないことをお勧めします..

主キーを Identity 列 (ただし、極端な場合にはレコードの増加/数を監視したい場合があります) または UNIQUEIDENTIFIER 列として主キーを持つ別の監査テーブルを使用することを検討してください。これにより、主キーは GUID になります。

クエリによって特定の患者の状態の変化を取得することが重要であるため、監査/状態変化テーブルの患者番号に対してインデックスを定義することを検討することをお勧めします。

HTH、ネイサン

于 2013-03-19T07:10:45.347 に答える