部署テーブル:
-- 部署ID , 部署名
社員テーブル:
-- 社員ID , 社員名 , 部署ID(外部キー)
上記のような構成があった場合に、
部署を物理削除した場合は mysql により整合性が保たれると思いますが、
部署を論理削除した場合は特に整合性が保たれることなく、社員テーブルの部署IDは論理削除されたIDを持つことになります。
私はこの状態に違和感を覚えます。
mysql 自体には論理削除という概念がないためこうなるのは当然ですが、
mysql を使うアプリケーションやフレームワーク側で整合性を保つべきではないのか?と疑問に思っています。
具体的にいうと、外部キーの削除時の制約に
RESTRICT が指定されているなら、部署を論理削除した場合に参照する社員レコードがあるなら例外を投げる。
CASCADE が指定されているなら、部署を論理削除した場合に参照する社員レコードも削除する。
これらをアプリケーション側などで実装する。という感じです。
このような動作をすると困ることがあるでしょうか?
他の方の意見を聞いてみたく、投稿させてもらいました。
困ること以外でもどんなことでも構いません。よろしくお願いします。
追記20190705
・この部署テーブルと社員テーブルに限った話ではなく、「どのような場合であれ、論理削除でも外部キーによる参照整合性の適用は必要ではないか?」という質問です。
回答2件
あなたの回答
tips
プレビュー