タグ

ブックマーク / cs.hatenablog.jp (2)

  • SQL Serverでも論理削除と一意性制約を両立 - C Sharpens you up

    一意性(UNIQUE)制約はNULLでない値に対してだけ効く、そう思っていた頃が私にもありました… SQL ServerはNULLも一意性制約の対象になります。NULLになっている行が複数あると重複だと判定されます。SQL-92の規格書をあたってみると、これは完全な規格違反なんですけどね。 A unique constraint is satisfied if and only if no two rows in a table have the same non-null values in the unique columns. http://www.contrib.andrew.cmu.edu/~shadow/sql/sql1992.txt つまりSQL Serverじゃ以前解説した 有効なレコードだけに一意性制約をかける が使えないってことです。 でも大丈夫。 SQL Server

    SQL Serverでも論理削除と一意性制約を両立 - C Sharpens you up
    suginoy
    suginoy 2015/03/01
  • 有効なレコードだけに一意性制約をかける - C Sharpens you up

    SQL標準にある強力なCHECK制約をPostgreSQLでも使いたいでござる。 有り体にいうと、一意性制約を付けて論理削除をしたい、というような表現になるのでしょうか。 http://sugar-tomato.hateblo.jp/entries/2013/07/02 無効化したレコードは無視して有効なレコードだけに一意性制約をつけたいとき、僕はこうしてます。 CREATE TABLE usres ( id bigserial NOT NULL PRIMARY KEY, name character varying(40) NOT NULL, enabled boolean DEFAULT true CHECK (enabled), CONSTRAINT users_name_enabled_key UNIQUE (name, enabled) ); enabledカラムには、有効なレコ

    有効なレコードだけに一意性制約をかける - C Sharpens you up
    suginoy
    suginoy 2015/03/01
  • 1