【问题标题】:PostgreSQL 10 Constraint across 2 columns?跨 2 列的 PostgreSQL 10 约束?
【发布时间】:2018-05-23 22:28:53
【问题描述】:

是否可以添加一个约束来检查 PostgreSQL 10 中的两列是否唯一?我环顾四周,但找不到与我的特定需求相关的任何东西。

我的问题是我必须跟踪与辅助 ID(集线器)关联的各个 ID(标签)。我无法将我的标签 ID 设置为唯一,因为它们会多次出现与中心 ID 相关联。我也不能将集线器 ID 设置为唯一的,因为它们会有一堆与之关联的标签 ID。

有没有办法说(标签 123 和集线器 456)是唯一的,但如果集线器是 789,标签 123 仍然可以被记录,反之亦然?

其根源是因为 ON CONSTRAINT DO UPDATE 在没有唯一约束的情况下似乎无法正常工作,而我现在陷入困境。

参考,解决方案,其他已解决的相关问题,任何帮助表示赞赏!

【问题讨论】:

  • 只需在两者上添加唯一键

标签: php sql postgresql


【解决方案1】:

您需要定义由这两列组成的primary key。这样,您的表中就可以有两行或多行,主键的第一列具有相同的值,但第二列的值不同,反之亦然。

另外,如果您还没有,您可以使用pgAdmin,这是一个可视化工具,可帮助您创建数据库并使用简单的用户定义表、列、数据类型、约束、主键等界面。

【讨论】:

  • 不需要是主要的,在这里唯一是一个更好的主意
  • 我明白了,也许主键已经用于另一列/列组
  • 主键实际上更好,恕我直言,如果这对列是唯一的自然键。否则,它可能是一个普通的 UNIQUE 约束。
【解决方案2】:

索引可以在多个列上

CREATE UNIQUE INDEX name ON table (tag,hub);

11.6. Unique Indexes

【讨论】:

  • 我爱你。谢谢。
  • table constraints 也可以。 CREATE TABLE (..., UNIQUE (tag,hub))
猜你喜欢
  • 2015-06-22
  • 1970-01-01
  • 2013-08-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-05-06
相关资源
最近更新 更多