如果表列定义为唯一,是否可以将表列保留为空?
表架构
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
由于对应用程序的修改,有时名称列必须为空,这有可能吗?
答案 0 :(得分:2)
如果列可以包含NULL
值,那就没问题,因为索引中不包含NULL
。
请注意,某些数据库没有正确实现标准(某些版本的SQL Server每个唯一约束只允许一个NULL
值,但我确定是否仍然如此)。
答案 1 :(得分:0)
使用NULL是更好的选择,但您也可以使用条件唯一索引:
CREATE UNIQUE INDEX unique_clients_name ON clients (name) WHERE name <> '';
并且避免使用oid,这些都是无用的和过时的。