将表格列保留为空时,将其索引为唯一

问题描述:

如果表格列被定义为唯一,是否可以将表格列保留为空?将表格列保留为空时,将其索引为唯一

表架构

 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 

由于修改应用程序有时名称列必须是空的,这是可能的呢?

如果该列可以包含NULL的值,那么这是好的,因为NULL未包含在索引中。

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

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

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

,避免OID的,这是无用的和过时的。