2011-10-16 2 views
1

Je veux créer ces deux tables, mais j'obtiens une erreur qui indique que les clés SECTION qui sont référencées par des clés étrangères de HOLD ne sont pas des clés primaires. comme on le voit dans la requête, ce sont des clés primaires. Comment puis-je résoudre ce problème?erreur de clé étrangère sql

create table SECTION( 
ID integer foreign key references TERM(ID), 
CID integer foreign key references COURSE(CID), 
SECT integer, 
constraint PK_SECTION primary key (ID,CID,SECT), 
); 

create table HOLD( 
NAME varchar(30) foreign key references INSTRUCTOR(NAME), 
ID integer foreign key references SECTION(ID), 
CID integer foreign key references SECTION(CID), 
SECT integer foreign key references SECTION(SECT), 
constraint PK_HOLD primary key (NAME,ID,CID,SECT), 
); 
+0

quel serveur SQL utilisez-vous ? – imm

+0

SQL Server 2008 – mkeremkeskin

Répondre

5

ID, CID, SECT ne sont pas des clés primaires, elles sont toutes ensemble une clé primaire (de plusieurs attributs). Vous devez les référencer comme un comme celui-ci:

CONSTRAINT "HOLD_FK01" FOREIGN KEY ("ID", "CID", "SECT") 
     REFERENCES "SECTION" ("ID", "CID", "SECT") 
+0

merci, cela a résolu mon problème. – mkeremkeskin

0

En utilisant cette déclaration contrainte PK_SECTION clé primaire (ID, CID, ECET) vous faites uniquement sur la clé primaire et par la déclaration suivante entier ID étranger références clés TERM (ID), CID entier clé étrangère références COURSE (CID) vous essayez de faire deux clés étrangères, mais l'objet est ID et CID ne sont pas la clé primaire là combinaison est une clé primaire (ID, CID, SECT)

Pour rectifier cela, vous devez créer l'ID de clé primaire individuelle et le numéro CID

create table SECTION( 
ID integer foreign key references TERM(ID), 
CID integer foreign key references COURSE(CID), 
SECT integer, 
constraint PK_SECTION_ID primary key (ID), 
constraint PK_SECTION_SECT primary key (SECT), 
constraint PK_SECTION_CID primary key (CID) 
); 

Ou

CONTRAINTE "FK" FOREIGN KEY ("ID", "CID") RÉFÉRENCES "SECTION" ("ID", "CID")