caf*_*ein 3 sql postgresql indexing constraints
我正在尝试设置一个表并为其添加一些约束。我计划使用部分索引添加约束来创建一些复合键,但遇到了处理 NULL 值的问题。我们遇到这样的情况:我们希望确保表中的给定行仅填充两列中的一列,并且填充的值是唯一的。我正在尝试弄清楚如何做到这一点,但我遇到了困难。也许是这样的:
CREATE INDEX foo_idx_a ON foo (colA) WHERE colB is NULL
CREATE INDEX foo_idx_b ON foo (colB) WHERE colA is NULL
Run Code Online (Sandbox Code Playgroud)
这行得通吗?此外,是否有一种好方法可以将其扩展到更多数量的列?
小智 8
编写此约束的另一种方法是使用该num_nonulls()函数:
create table table_name
(
a integer,
b integer,
check ( num_nonnulls(a,b) = 1)
);
Run Code Online (Sandbox Code Playgroud)
如果您有更多列,这尤其有用:
create table table_name
(
a integer,
b integer,
c integer,
d integer,
check ( num_nonnulls(a,b,c,d) = 1)
);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2400 次 |
| 最近记录: |