foreign key kan niet..

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Boris Mattijssen

Boris Mattijssen

26/05/2009 17:37:00
Quote Anchor link
Hallo allemaal!

Ik heb een probleempje.
Ben nog niet super ervaren met foreign keys. Maar het leek me wel handig om er nu een te gebruiken.

Heb deze tabel:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
CREATE TABLE `csv` (
  `csv_id` int(11) NOT NULL auto_increment,
  `gebruiker_id` int(11) NOT NULL default '0',
  `csv_product` varchar(255) NOT NULL default '',
  `csv_merk` varchar(255) NOT NULL default '',
  PRIMARY KEY  (`csv_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=5519 ;


en deze:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
CREATE TABLE `csv_check` (
  `csv_id` int(11) NOT NULL auto_increment,
  `csv_check_hyperlinks` text NOT NULL,
  `csv_check_aanbieders` int(11) NOT NULL default '0',
  PRIMARY KEY  (`csv_id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=5519 ;


En nou wilde ik dus dat als er in de tabel "csv" een rij verwijderd wordt, deze rij die overeenkomt met het "csv_id" in de tabel csv_check ook verwijderd wordt.

Dus dacht ik dit te doen:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
ALTER TABLE csv_check
ADD FOREIGN KEY ( csv_id )
REFERENCES csv (csv_id)

ON DELETE CASCADE
 ON UPDATE CASCADE


Maar dan krijg ik deze error:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
#1216 - Cannot add or update a child row: a foreign key constraint fails


Wat is hier mijn fout?

Bij voorbaat dank,
Groeten,
Boris

PS: sorry voor de backticks, had ff die tabellen uit phpMyAdmin geëxporteerd.
 
PHP hulp

PHP hulp

22/10/2021 17:31:18
 
Bo az

Bo az

26/05/2009 17:54:00
Quote Anchor link
Er klopt iets niet in je data model, je laat namelijk de ene primary key naar een andere primary key wijzen. Opzich kan dat nog wel (ondanks dat een relationele database niet object geörienteerd is, is dat een mogelijkheid om dat te implementeren). Het probleem zit 'm er alleen in dat beide pk's auto_increment zijn. Een auto-increment kolom die naar een andere auto_increment kolom wijst, hoewel mysql hier over blijkbaar niet zeurt, is dat toch tamelijk onmogelijk.

De foutmelding zelf heeft waarschijnlijk met de propulatie te maken, bevind zich al data in de tabellen? Is die gelijk?
 
Boris Mattijssen

Boris Mattijssen

26/05/2009 17:58:00
Quote Anchor link
Boaz schreef op 26.05.2009 17:54:
Er klopt iets niet in je data model, je laat namelijk de ene primary key naar een andere primary key wijzen. Opzich kan dat nog wel (ondanks dat een relationele database niet object geörienteerd is, is dat een mogelijkheid om dat te implementeren). Het probleem zit 'm er alleen in dat beide pk's auto_increment zijn. Een auto-increment kolom die naar een andere auto_increment kolom wijst, hoewel mysql hier over blijkbaar niet zeurt, is dat toch tamelijk onmogelijk.

De foutmelding zelf heeft waarschijnlijk met de propulatie te maken, bevind zich al data in de tabellen? Is die gelijk?


Bedankt voor je antwoord.
Voor een goed data model moet ik dus die auto_increment van de csv_id in csv_check halen?

En die fk is nu gelukt :) heb idd ff de tabel geleegd.
Bedankt!
 
Bo az

Bo az

26/05/2009 18:07:00
Quote Anchor link
brie schreef op 26.05.2009 17:58:
Bedankt voor je antwoord.
Voor een goed data model moet ik dus die auto_increment van de csv_id in csv_check halen?


Dat weet ik niet, ik denk dat er geen sprake van overerving is hier en dan is dat fout. Dan blijven er nog meerdere mogelijkheden over.
Als geldt:

voor ieder record in tabel X is er ook een record in tabel Y
en:
voor ieder record in tabel Y is er ook een record in tabel X

Dan kan je de twee tabellen gewoon samen voegen.

Als alleen één van die twee geldt dan moeten de twee tabellen verschillende primary keys hebben (vergeet dan niet de unique), of kan je ze samen voegen en van de NOT NULL kolomen NULL kolomen maken.

Als allebei niet opgaat zit de fout heel ergens anders.
 
Boris Mattijssen

Boris Mattijssen

26/05/2009 18:43:00
Quote Anchor link
Bedankt voor je uitleg :)
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.