私はかなり貧弱に設計された mysql データベースを継承しました。このデータベースでは、たとえばユーザー テーブルと設定テーブルの間に真の外部キーがありません。
検討
CREATE TABLE `user` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`email` varchar(255) NOT NULL COMMENT 'email address',
...
)
と
CREATE TABLE `preference` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`user_id` int(10) NOT NULL,
...
)
ユーザー テーブルから行を削除すると、設定テーブルが孤立したままになります。ただし、mysql の上記の主キーを使用すると、ユーザー テーブルに新しい行を追加するとすぐに、以前に削除された行の古い ID が実際に使用されるため、古いユーザーの設定にリンクされます (非常に望ましくありません)。
実装が不十分であるにもかかわらず (そうです、コードをリファクタリングし、真の外部キー関係でデータベースを更新することが適切な方法であることはわかっています)、主キーが決して再利用されないことを保証する方法はありますか?