2010-12-17 10 views
0

テーブルの列が一意に定義されている場合は空にすることはできますか?ユニークとしてインデックス付けされているテーブルの列を空にする

テーブルスキーマ

 Column  |   Type   | Modifiers | Description 
-------------------+------------------------+---------------+------------- 
id    | integer    | not null  | 
name    | character varying(64) |    | 

インデックス

Indexes: 
    "clients_pkey" PRIMARY KEY, btree (id) 
    "clients_name_idx" UNIQUE, btree (name) 
Has OIDs: yes 

により時々名欄が空である必要があるアプリケーションに変更し、このことは全く可能ですか?

答えて

2

列にNULLの値が含まれている場合は、NULLがインデックスに含まれていないため、OKです。

一部のデータベースでは標準を正しく実装していないことに注意してください(SQL Serverの一部のバージョンでは、ユニーク制約ごとにNULL値が1つしか使用できませんでしたが、それでも問題がある場合は確信しています)。 NULLを使用して

0

は良いオプションですが、あなたはまた、条件付きの一意のインデックスを使用できます。

CREATE UNIQUE INDEX unique_clients_name ON clients (name) WHERE name <> ''; 

をとOIDのを避けるため、これらは無用と廃止されました。

関連する問題