鳩舎

レースしない

deleted_at みたいな奴

DB から物理削除するとアレなので論理削除したいみたいな話があって、大抵そういうのは deleted_at が DATETIME で削除した日時がはいるみたいになっている。削除してないと NULL 。

これを関連テーブルとかにつけるとひどいことになる。

article_id, int, not null
tag_id, int, not null
deleted_at, datetime, default null

上みたいな状況では article_id, tag_id の UNIQUE 制約がかけられない。削除したものが残るからだし、 deleted_at を UNIQUE INDEX に加えても NULL の比較は必ず偽を返すので制約にならない。アプリケーション側で制御すればいいけど、 DB 的にも制約をかけておいた方が当たり前にベターだと思う。

気をつけないとやらかすので注意。