2017-03-19 3 views
0

Ich habe ein Problem beim Erstellen einer Tabelle, die einen Fremdschlüssel aus einer anderen Tabelle enthält, die zwei Primärschlüssel hat.gibt es keine eindeutige Integritätsbedingung, die Schlüssel für referenzierte Tabelle

Im Folgenden sind die Tabellen:

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

Die Tabelle risk_final nicht erstellt werden kann und gibt mir den Fehler:

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

Wie kann ich es lösen?

+3

Mögliche Duplikat [Postgres FK Referenzierung Verbund PK] (https://stackoverflow.com/questions/9984022/postgres-fk-referencing-composite-pk) –

Antwort

0

Ich denke, dass die Nachricht ist ziemlich klar: Sie nicht Teil einen Schlüssels verweisen können, entweder primäre oder Kandidaten (daher „eindeutige Einschränkung“). Wenn Sie auf die Tabelle names_types verweisen müssen, können Sie einen Ersatzschlüssel für die letztere Tabelle erstellen und auf diesen Schlüssel verweisen (z. B. eine Ganzzahl-ID). Wenn Sie jedoch nur auf die Namensspalte verweisen möchten, sollten Sie eine dritte Tabelle z. names, mit name als Primärschlüssel:

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

i Hören Sie nicht auf, Sie zu verstehen, ich muss nur auf die Namensspalte verweisen, aber die Name-Spalte kann kein Primärschlüssel sein, ich brauche eine ID. Was soll ich tun? –

+0

'CREATE TABLE-Namen (Name varchar (70), Primärschlüssel (name)' und dann auf diese Tabelle verweisen: 'CREATE TABLE risk_final (..., Name varchar (70) Referenzen Namen (Name), ...' –

+0

i habe deinen Punkt, Namen (Name varchar (70) Primärschlüssel, Typ varchar (70)), aber in diesem Fall ist der Name für einen Typ eindeutig und ich brauche in einigen Fällen mehrere Firmen mit dem gleichen Namen, deshalb brauche ich eine ID als Primärschlüssel mit dem Namen "Primärschlüssel (ID, Name)" help plz –

Verwandte Themen