SQL:当列为特定值时的唯一约束

前端之家收集整理的这篇文章主要介绍了SQL:当列为特定值时的唯一约束前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
CREATE TABLE foo (
   dt     AS DATE NOT NULL,type   AS TEXT NOT NULL,CONSTRAINT unique_dt_type UNIQUE(dt,type) -- check constraint(?)
)

当只有一个特定的条件存在时,尝试思考正确的语法来创建一个唯一的约束时,有一个脑袋.

给定,类型可以具有值A-F,每个日期只能有一个A,但可以有多个B-F.好表示例:

2010-01-02 | 'A'  -- only one
2010-01-02 | 'B'  -- can have multiple
2010-01-02 | 'B'
2010-01-02 | 'B'
2010-01-02 | 'C'  -- can have multiple
2013-01-02 | 'A'  -- only one
2010-01-02 | 'B'  -- can have multiple
2010-01-02 | 'B'
2013-01-02 | 'F'  -- can have multiple
2013-01-02 | 'F'

尝试阅读检查/唯一的语法,但没有任何例子. CHECK接近,但仅限于一个范围,并未与UNIQUE情景一起使用.也尝试搜索,但是我的搜索技能要么不符合标准,要么没有任何类似的问题.

解决方法

Postgresql可以通过它的“部分索引”功能来满足您的需求.实际上,这是通过在创建索引语句中添加一个where子句来实现的.

样品:

CREATE INDEX my_partial_ix ON my_sample_table (my_sample_field)
WHERE NOT (my_sample_field = 'duplicates ok');

看看这里:
http://www.postgresql.org/docs/current/interactive/indexes-partial.html

请特别注意示例11-3.建立部分独特指数.它给出了一个与您明确目标一致的例子.

猜你在找的MsSQL相关文章