将索引列为唯一时保持表列为空

时间:2010-12-17 08:22:43

标签: postgresql

如果表列定义为唯一,是否可以将表列保留为空?

表架构

      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 个答案:

答案 0 :(得分:2)

如果列可以包含NULL值,那就没问题,因为索引中不包含NULL

请注意,某些数据库没有正确实现标准(某些版本的SQL Server每个唯一约束只允许一个NULL值,但我确定是否仍然如此)。

答案 1 :(得分:0)

使用NULL是更好的选择,但您也可以使用条件唯一索引:

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

并且避免使用oid,这些都是无用的和过时的。