自己参照テーブルでNOT NULL制約のidをどのように入れたらいいでしょうか

実現したいこと

下記サンプル構造で、新規データをエラーなくインサートするにはどのようにしたらいいでしょうか?

前提

編集した履歴用のテーブルを作ると膨大な数になるため一つのテーブルで編集履歴も兼ねたテーブル構成になっていて、特に下記がネックになっています。
copy_idには、
・新規インサートは新規インサート時のPKを入れる ←これがネック
・データ編集時は元のデータのPKを入れる
(データ編集・更新時も新規インサートするが、copy_idは編集元のidを入れる)

削除は物理削除対応です。

サンプルテーブル構造

users テーブル

column NULL
id PK autoincrement ×
copy_id int ×
name varchar ×
email varchar ×
penname varchar
created_at datetime ×
updated_at datetime ×

外部キー制約

column 対象 制約
copy_id users.id NO ACTION

試したこと

copy_idのNOT NULL制約を外せば簡単に解決するのは分かっているのですが、
外部キー制約もしてかっちり固めたい意図もあるようです。
また、新規インサート時に最新データのPKを取得してそこから次のPKを予想して入れる方法も考えたのですが、危険かな・・と思い止めました。
どのように実現したらいいか、またその他方法などお知恵をお借りいただければと思います。

コメントを投稿

0 コメント