前提
論理削除でユーザーを無効にする。
再度登録した際はデータの引き継ぎなどは行わず、新規ユーザーとして登録する。
設計
remove_keyというカラムを設け、user_idとremove_key及びemailとremove_keyでUNIQUE制約をかける
CREATE TABLE "users" (
"id" BIGSERIAL NOT NULL,
"user_id" varchar(20),
"email" varchar(100),
"name" varchar(100),
"remove_key" BIGINT DEFAULT 0,
"created_at" TIMESTAMPTZ NOT NULL DEFAULT current_timestamp,
"updated_at" TIMESTAMPTZ NOT NULL DEFAULT current_timestamp,
"deleted_at" TIMESTAMPTZ,
PRIMARY KEY ("id"),
CONSTRAINT "email_remove_key" UNIQUE ("email", "remove_key"),
CONSTRAINT "user_id_remove_key" UNIQUE ("user_id", "remove_key")
);
削除するタイミングで、idをremove_keyへ更新してから削除処理を行う。
これにより、重複するemailでも問題なく再度アカウントを作成することができる。