[MySQL] PHPAdmin error Foreign Key

Pagina: 1
Acties:

  • Executor16
  • Registratie: Februari 2001
  • Niet online
Ik wil dus een aantal tabellen aanmakken en deze met elkaar koppelen. Heb hier echt veel over gezocht en volgens mij klopt de query die ik gemaakt heb wel. Maar krijg toch elke keer een error bij het importeren van de SQL file.

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#####################################
# TABEL PIZZA.BROMFIETS AANMAKEN
#####################################

DROP TABLE IF EXISTS `BROMFIETS`;
CREATE TABLE `BROMFIETS` (
`idBROMFIETS` int(5) unsigned NOT NULL auto_increment,
`Kenteken` varchar(6) NOT NULL default '',
`Kleur` varchar(45),
PRIMARY KEY (`idBROMFIETS`)
) ENGINE=InnoDB;

#####################################
# TABEL PIZZA.BEZORGER AANMAKEN
#####################################

DROP TABLE IF EXISTS `BEZORGER`;
CREATE TABLE `BEZORGER` (
`idBEZORGER` int(5) unsigned NOT NULL auto_increment,
`Naam` varchar(45) NOT NULL default '',
`Adres` varchar(45),
`Woonplaats` varchar(45),
`Telefoonnummer` varchar(10),
PRIMARY KEY (`idBEZORGER`),
CONSTRAINT `idBROMFIETS` FOREIGN KEY (`idBROMFIETS`) REFERENCES `BROMFIETS` (`idBROMFIETS`)
ON DELETE CASCADE
ON UPDATE CASCADE
) ENGINE=InnoDB;


De error die ik krijg is:
#1072 - Key column 'idBROMFIETS' doesn't exist in table

Maar dat snap ik niet helemaal, de kolom idBROMFIETS is wel aangemaakt in de tabel BROMFIETS. Heb nog gezoch op GOT en op Google. Maar kom er niet uit.. Een voorbeeld op WikiPedia is namelijk precies hetzelfde als wat ik gebruikt heb om de foreign key aan te maken, maar die van wikipedia werkt wel goed.

[ Voor 7% gewijzigd door Executor16 op 25-12-2013 15:19 ]


Verwijderd

Maar idBROMFIETS bestaat niet in de tabel BEZORGER. Je moet een kolom idBROMFIETS in de BEZORGER tabel maken. Ik zou de contraint zelf ook even anders noemen.

  • Executor16
  • Registratie: Februari 2001
  • Niet online
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#####################################
# TABEL PIZZA.BROMFIETS AANMAKEN
#####################################

DROP TABLE IF EXISTS `BROMFIETS`;
CREATE TABLE `BROMFIETS` (
`idBROMFIETS` int(5) unsigned NOT NULL auto_increment,
`Kenteken` varchar(6) NOT NULL default '',
`Kleur` varchar(45),
PRIMARY KEY (`idBROMFIETS`)
) ENGINE=InnoDB;

#####################################
# TABEL PIZZA.BEZORGER AANMAKEN
#####################################

DROP TABLE IF EXISTS `BEZORGER`;
CREATE TABLE `BEZORGER` (
`idBEZORGER` int(5) unsigned NOT NULL auto_increment,
`Naam` varchar(45) NOT NULL default '',
`Adres` varchar(45),
`Woonplaats` varchar(45),
`Telefoonnummer` varchar(10),
`idBROMFIETS` int(5) unsigned NOT NULL,
PRIMARY KEY (`idBEZORGER`),
CONSTRAINT `FOREIGNKEY` FOREIGN KEY (`idBROMFIETS`) REFERENCES `BROMFIETS` (`idBROMFIETS`)
ON DELETE CASCADE
ON UPDATE CASCADE
) ENGINE=InnoDB;


zo werkt ie wel nu.. maar is het ook goed? heb de constraint dan gewoon FOREIGNKEY genoemd, dat doe ik dan ook bij de rest van de andere tabellen

[ Voor 35% gewijzigd door Executor16 op 25-12-2013 15:19 ]


  • Lukse
  • Registratie: Januari 2004
  • Laatst online: 12-04-2023
Zo is het idd goed.
Je zegt immers dat het veld idBromfiets uit de tabel Bezorger (FOREIGN KEY (`idBROMFIETS`) ) verwijst naar (REFERENCES) het veld idBromfiets uit de tabel Bromfiets (`BROMFIETS` (`idBROMFIETS`)).

Het enige dat ik nog zou wijzigen is de naam van de constraint. Ik zou hem bv. fk_Bromfiets noemen.
Zo weet ik dat het een foreign key is naar de tabel Bromfiets.

  • Executor16
  • Registratie: Februari 2001
  • Niet online
oke snel opgelost. zal de constraint idd ook ff renamen. bedankt!

edit: heb nu de hele database werkend gekregen.. Ik twijfel alleen nog bij een koppeltabel. Ik heb een koppeltabel aangemaakt die bestaat uit 2 records (primairy key uit 2 tabellen)

dus 1 koppeltabel met 2 verwijzingen naar 2 primairy keys in 2 andere tabellen.

Moet ik nou deze 2 attributen samen als primairy key aanmaken:
code:
1
2
3
4
5
6
7
PRIMARY KEY (`idORDER`,`idPIZZA`),
CONSTRAINT `FK_ORDER` FOREIGN KEY (`idORDER`) REFERENCES `ORDER` (`idORDER`)
ON DELETE CASCADE
ON UPDATE CASCADE,
CONSTRAINT `FK_PIZZA` FOREIGN KEY (`idPIZZA`) REFERENCES `PIZZA` (`idPIZZA`)
ON DELETE CASCADE
ON UPDATE CASCADE


of moet er in de koppeltabel gewoon 2 foreign keys staan? maar dan is er toch geen PK?
code:
1
2
3
4
5
6
CONSTRAINT `FK_ORDER` FOREIGN KEY (`idORDER`) REFERENCES `ORDER` (`idORDER`)
ON DELETE CASCADE
ON UPDATE CASCADE,
CONSTRAINT `FK_PIZZA` FOREIGN KEY (`idPIZZA`) REFERENCES `PIZZA` (`idPIZZA`)
ON DELETE CASCADE
ON UPDATE CASCADE


het is volgens mij niet handig om nog een ID record te maken voor de koppeltabel en dan de 2 andere attr als foreign key mee te geven

[ Voor 94% gewijzigd door Executor16 op 07-10-2006 14:25 ]


  • Executor16
  • Registratie: Februari 2001
  • Niet online
niemand?

  • Lukse
  • Registratie: Januari 2004
  • Laatst online: 12-04-2023
Als de combinatie idOrder en idPizza uniek is, dan kan je die 2 samennemen voor de primary key.

  • bigbeng
  • Registratie: Augustus 2000
  • Laatst online: 26-11-2021
Bovendien zul je ze ook moeten definieren als FK's, want dat zijn het immers ook. Doe je dat niet, dan kun je in 1 van de 2 "brontabellen" het hoofdrecord weggooien, terwijl deze in de koppeltabel nog wordt gebruikt. Dit lijkt me een ongewenste situatie.
Pagina: 1