主キーに変更される可能性のある列を入れるべきか
例えば以下の様なDBテーブルがあります。
CREATE TABLE Member
(
ID INT IDENTITY PRIMARY KEY,
Name NVARCHAR(10),
Status TINYINT,
CONSTRAINT UN_MainNameStatus UNIQUE(Name, Status)
)
CREATE TABLE Info
(
Name NVARCHAR(10),
Status TINYINT,
InfoNunber INT,
InfoBody NVARCHAR(50),
PRIMARY KEY(Name, Status, InfoNunber)
)
ここで、Member
テーブルのStatus
は更新される可能性があります。また、Info
のName
とStatus
はプログラムレベルで一致させています。問題は現状だとMember
のStatus
更新時にInfo
の古いデータを削除し、新しいステータスに変更したコピーデータを代入しなければならない点です。この場合、Infoの主キーのName
とStatus
をID
に変更すれば外部キー制約が利用できるようになり、Member
テーブルと同時に更新する必要(データ破壊のリスク)が無くなり、DB更新も速くなると思うのですが、いかがでしょうか。