没有唯一约束匹配给定引用表的键

时间:2017-03-19 20:23:23

标签: postgresql

我在创建一个包含来自另一个具有两个主键的表中的外键的表时遇到了问题。

以下是表格:

create table names_types(
id_name serial,name varchar(70),type varchar(70),primary key(id_name,name)
);

create table risk_final(
id_risk serial,id_date varchar(70)references date_final(vdate_id)
,name varchar(70)references names_types(name)
,var_mc_risk varchar(70)
,mvar_mc_risk varchar(70)
,incvar_mc_risk varchar(70)
,cvar_mc_risk varchar(70)
,delta varchar(70)
,present_value varchar(70)
,net_exposure varchar(70)
,amount varchar(70)
,primary key(id_risk,id_date,name)
);

无法创建表risk_final并给出错误:

  

错误:没有唯一约束匹配引用表“names_types”的给定键

我该如何解决?

1 个答案:

答案 0 :(得分:1)

我认为该消息非常明确:您无法引用密钥的部分,无论是主要密钥还是候选密钥(因此是“唯一约束”)。如果你需要引用names_types表,你可以在后一个表上创建一个代理键并引用这个键(例如一个整数id),但如果你真的只想引用name列,你应该有第三个表,例如namesname为主键:

create table names (name varchar(70), primary key (name));
create table types (id_name serial, primary key (id_name));
create table names_types (id_name serial references types(id_name), 
                          name varchar(70) references names(name), 
                          primary key(id_name, name));
相关问题