# Mehrere Foreign Keys in einer Tabelle



## tazxu (10. Januar 2004)

Hallo,

ich habe folgendes Problem: Ich kann leider nicht mehrere Foreign keys in einer Tabelle anlegen.  MYSQL gibt immer eine Fehlermeldung wieder. Ein Foreign key klappt. Und zwar immer der erste der als Primary key festgelegt ist. 

Hier ist meine Syntax:

create table test
(kunden_nr int not null,
project_nr int not null,
constraint test_PK primary key (kunden_nr, project_nr),
constraint test_FK_kunde foreign key (kunden_nr) references kunde (kunden_nr),
constraint test_FK_project foreign key (project_nr) references project (project_nr)
) type=innodb;

in diesem Fall würde es klappen die Tabelle anzulegen, wenn ich den foreign key für project_nr weglasse, weil kunden_nr als erstes bei der Primary key Definierung aufgeführt ist. Aber wieso? BZW: Wie lege ich denn 2 Foreign keys an?

Wenn mir jemand weiterhelfen kann: Vielen Dank ;-)


----------



## Patrick Kamin (10. Januar 2004)

*-*

Den "not null" Constraint für die Entities kannst du weglassen, da ein Primary Key immer einen Wert haben muss. Zu deinem Problem, hast du sichergestellt, dass die Entities in den anderen Tabelle als  Primary Key deklariert sind? Foreign Keys funtionieren nur in dieser Kombination.


----------



## tazxu (11. Januar 2004)

Ja das ist sicher gestellt: project_nr und kunden_nr  sind primary keys in den anderen tabellen.

Woran kann es denn liegen? mysql erkennt zwar das der primary key auf beiden werten liegt, aber lässt nur für den ersten einen foreign key zu und gibt die gleiche fehlermeldung aus, als wenn der zweite wert nicht zum primary key gehört....

hat jemand ne idee? wäre super nett...

hier nochmal der code:

create table kunde
(kunden_nr int primary key,
kunden_name varchar(25) not null
) type=innodb;

create table project
(project_nr int primary key,
project_name varchar(25) not null
) type=innodb;

create table veranstaltet
(kunden_nr int,
project_nr int,
constraint veranstaltet_PK primary key (kunden_nr, project_nr),
constraint veranstaltet_FK_kunde foreign key (kunden_nr) references kunde (kunden_nr),
constraint veranstaltet_FK_project foreign key (project_nr) references project (project_nr)
) type=innodb;


----------



## Patrick Kamin (11. Januar 2004)

*-*

Hab das gerade bei mir getestet und es funktioniert einwandrei. Vielleicht kannst du mal die genaue Fehlermeldung hier posten.


----------



## tazxu (11. Januar 2004)

Also hier ist die Fehlermeldung:

--------
SQL-Befehl :  

CREATE TABLE veranstaltet(

kunden_nr int NOT NULL ,
project_nr int NOT NULL ,
CONSTRAINT veranstaltet_PK PRIMARY KEY ( kunden_nr, project_nr ) ,
CONSTRAINT veranstaltet_FK_kunde FOREIGN KEY ( kunden_nr ) REFERENCES kunde( kunden_nr ) ,
CONSTRAINT veranstaltet_FK_project FOREIGN KEY ( project_nr ) REFERENCES project( project_nr ) 
) TYPE = innodb 

MySQL meldet: 

#1005 - Kann Tabelle '.\sascha\veranstaltet.frm' nicht erzeugen. (Fehler: 150)
--------

Meine MySQL Version: mysql-4.0.17-win
Getestet mit: phpMyAdmin-2.5.3-rc

InnoDB Konfiguration in my.ini:

innodb_data_home_dir = c:/programme/apache group/apache2/mysql/data
innodb_data_file_path = ibdata1:2000M;ibdata2:2000M
set-variable = innodb_buffer_pool_size=70M
set-variable = innodb_additional_mem_pool_size=10M
innodb_log_group_home_dir = c:/programme/apache group/apache2/mysql/data
innodb_log_arch_dir = c:/programme/apache group/apache2/mysql/data
innodb_log_archive=0
set-variable = innodb_log_files_in_group=3
set-variable = innodb_log_file_size=10M
set-variable = innodb_log_buffer_size=8M
innodb_flush_log_at_trx_commit=1
set-variable = innodb_file_io_threads=4
set-variable = innodb_lock_wait_timeout=50

------


Vielen Dank im vorraus für deine Bemühungen


----------



## DanMcFly (27. April 2004)

Hallo, bin zwar ein bisschen spät, aber ich hatte vor kurzem das gleiche Problem.

Die Lösung heisst Index. Jeder ForeignKey braucht einen Index. Mit dem Primary hast du ja automatisch schon einen Index, desshalb gehts beim ersten auch ...

mfg


----------

