2017-03-19 80 views
0

給定的鍵我有一個問題,創建一個表,其中包含一個外鍵從另一個表中有兩個主鍵。沒有唯一的約束匹配給定的鍵

下面是表:

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不能創建和給我的錯誤:

ERROR: there is no unique constraint matching given keys for referenced table "names_types"

我怎樣才能解決呢?

+3

[Postgres的FK引用複合PK]的可能的複製(https://stackoverflow.com/questions/9984022/postgres-fk-referencing-composite-pk) –

回答

0

我認爲這個消息很清楚:你不能引用部分的一個關鍵字,無論是主鍵還是候選鍵(因此是「唯一約束」)。如果你需要引用names_types表,你可以在後一個表上創建一個代理鍵並引用這個鍵(例如一個整數id),但是如果你只想引用name列,你應該有第三個表, names,與name作爲其主鍵:

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)); 
+0

我不要放棄理解你,我只需要引用名稱列,但名稱列本身不能成爲主鍵,我需要一個id,我該怎麼辦? –

+0

'CREATE TABLE names(name varchar(70),primary key(name)'然後引用這個表:'CREATE TABLE risk_final(...,name varchar(70)references names(name),...' –

+0

i得到你的觀點,名稱(名稱varchar(70)主鍵,類型varchar(70)),但在這種情況下名稱是唯一的一種類型,我需要在某些情況下有多個公司同名,這就是爲什麼我需要一個ID作爲名稱爲「主鍵(id,name)」的主鍵。help plz –

相關問題