我正在尝试使用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是唯一的(并且是该表的主键)。这个问题有解决办法吗?
答案 0 :(得分:0)
您只能在表的一列上使用主键,主键也不是空且唯一。
答案 1 :(得分:0)
SQL state 42830的别名为 invalid_foreign_key 。
foreign key必须引用作为主键或形成唯一约束的列。
但是你的表格似乎就是这种情况。
您的代码甚至适用于PostgreSQL 8.3.20 - 9.3.1