首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >两列上的PSQL唯一约束

两列上的PSQL唯一约束
EN

Stack Overflow用户
提问于 2013-02-06 19:53:44
回答 2查看 6.1K关注 0票数 4

我有一个表,我使用它以一对多的关系将另外两个表链接在一起。

代码语言:javascript
复制
TableA
id
name

TableB
id
name

LinkTable
TableA_id
TableB_id

基本上,一个TableA可以有多个TableB。非常简单。我现在的问题是创建一个遵循这种关系规则的约束:

代码语言:javascript
复制
LinkTable
TableA_id    TableB_id
1            1
1            2
1            3
2            1
2            2
2            3

我想创建一个唯一的约束,它将两个列组合在一起作为唯一的值。因此,在上面的链接表中,使用这个新的约束,我可以

代码语言:javascript
复制
INSERT INTO LinkTable (TableA_id, TableB_id) VALUES (1, 4);
INSERT INTO LinkTable (TableA_id, TableB_id) VALUES (1, 5);
INSERT INTO LinkTable (TableA_id, TableB_id) VALUES (2, 6);
INSERT INTO LinkTable (TableA_id, TableB_id) VALUES (3, 1);

With out any problems

And if I try to insert:

INSERT INTO LinkTable (TableA_id, TableB_id) VALUES (1, 1);
INSERT INTO LinkTable (TableA_id, TableB_id) VALUES (1, 3);

约束将被触发,因为已经有一行包含1,1和1,3。我该如何创建postgres约束来执行此操作?如果我为两行都设置了唯一约束,那么我不能有多个相同的TableA_id和多个相同的TableB_id。

解决方案是什么?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-02-06 19:57:09

您是否尝试将这两个列都设置为唯一?

代码语言:javascript
复制
ALTER TABLE LinkTable 
ADD CONSTRAINT LinkTable_Unique UNIQUE (TableA_id, TableB_id);
票数 13
EN

Stack Overflow用户

发布于 2013-02-06 19:57:53

代码语言:javascript
复制
create table LinkTable (
    TableA_id integer REFERENCES TableA(id),
    TableB_Id integer REFERENCES TableB(id),
    UNIQUE(tableA_id, tableB_id)
);
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14728451

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档