9

我想找到一种方法在我的数据库中存储一个主题的多个地址,每个主题只有一个默认地址。

长话短说,假设我们有一张桌子:

CREATE TABLE test
(
  id integer NOT NULL,
  active boolean NOT NULL,
  CONSTRAINT pk_id PRIMARY KEY (id)
)

对于表中的每个 id,最多只能有 1 个真正的活动值。

我怎么能做到这一点?

谢谢。

4

2 回答 2

16

部分索引是你想要的:

create unique index some_index on test (id) where active;

正如@ThiefMaster 所说,应该删除主索引。

于 2012-06-13T12:37:53.240 回答
4

在这个问题的情况下,不需要如前所述。

但仅供参考,您可以将约束设置为 2 个或更多(非主键)具有不同类型的列。例如:

ALTER TABLE table_name ADD CONSTRAINT constraint_name UNIQUE (integer_column, boolean_column);

有关详细信息,请参阅 Postgres 文档的Constraints,“唯一约束”部分。去引用:

如果唯一约束引用一组列,则列以逗号分隔…</p>

这指定指定列中的值组合在整个表中是唯一的,尽管任何一列不必是(并且通常不是)唯一的。

注意: 部分索引设置建立在表子集上的索引,其用途完全不同。

于 2014-09-09T21:41:47.483 回答