タグ

2016年3月31日のブックマーク (2件)

  • 論理削除と一意性制約を両立させる方法・DB製品別 - Qiita

    アプリケーション上でなにかエントリ(例えば記事だとかユーザだとか)を削除したとき、DB上の行は削除せず単に【削除済み】フラグを立てるだけという扱い方を 論理削除 と呼びます。 論理削除にはいろいろなメリットがあります。行削除のように関連する他テーブルへ削除が波及しないこと、エントリ復活ができること、障害時にデータ変更の経緯を追いやすくなることなどなど(デメリットもわんさかあるんですが、この記事の主旨からははずれるので別途お調べください)。 ところが論理削除の方針でDBを組んでいて困ったことはありませんか? 「 メールアドレスは一意性(UNIQUE)制約をかけたいのに、それだと削除済みのユーザと同じメールアドレスが使えないことになる 」 論理削除と一意性制約、両立はできないのか? できないと思っている方、多いと思います。実はちゃんとできます。DB製品によって実現方法がちょっと違ってくるだけで

    論理削除と一意性制約を両立させる方法・DB製品別 - Qiita
    teppey
    teppey 2016/03/31
  • 論理削除とユニークキー制約の両立 - Qiita

    概要 データベーステーブルの物理設計を行うとき、論理削除とユニークキー制約を両立させるための TIPS です。 基create table user ( id int not null, email varchar(40) not null, password_sha256 varchar(64) not null, removed int not null default 0, -- 論理削除カラム constraint pk primary key (id) ); -- 入会 insert into user (id, email, password_sha256) values (1, 'foo@example.com', '**dummy**'); -- ログイン removed = 0 select * from user where removed = 0 and ema

    論理削除とユニークキー制約の両立 - Qiita
    teppey
    teppey 2016/03/31