创建具有多个值的主键(包括外键)

时间:2014-07-11 04:02:09

标签: sql database postgresql composite-primary-key

我正在尝试使用PostgreSQL创建这些表:

create table OrgaoSuperior(
cod_superior int unique,
primary key(cod_superior),
nome_superior varchar(2000)
);

create table OrgaoSubordinado(
cod_superior int,
cod_subordinado int unique,
primary key(cod_superior,cod_subordinado),
foreign key(cod_superior) references OrgaoSuperior(cod_superior),
nome_subordinado varchar(2000)
);

create table Subfuncao(
cod_subfuncao int not null unique,
primary key(cod_subfuncao),
nome_subfuncao varchar(2000)
);

create table Acao(
cod_subordinado int not null,
cod_subfuncao int not null,
cod_acao int not null,
primary key(cod_subordinado,cod_subfuncao,cod_acao),
foreign key(cod_subordinado) references OrgaoSubordinado(cod_subordinado),
foreign key(cod_subfuncao) references Subfuncao(cod_subfuncao),
nome_acao varchar(2000)
);

但是我得到SQL状态42830.我已经尝试在cod_acao上使用UNIQUE约束,但我不希望只有cod_acao是唯一的(它可能重复它的值),我想要cod_subordinado,cod_subfuncao和cod_acao是唯一的(并且是该​​表的主键)。这个问题有解决办法吗?

2 个答案:

答案 0 :(得分:0)

您只能在表的一列上使用主键,主键也不是空且唯一。

答案 1 :(得分:0)

SQL state 42830的别名为 invalid_foreign_key

  

foreign key必须引用作为主键或形成唯一约束的列。

但是你的表格似乎就是这种情况。

您的代码甚至适用于PostgreSQL 8.3.20 - 9.3.1