Ik heb de volgende database structuur, omdat ik wat aan het stoeien ben met het maken van een eigen CMS (puur om te leren).
Topic
FK:User (de auteur)
Comment
FK:User, Topic (auteur van het comment, topic waarbij het comment hoort).
User.
(Geen FK's).
Tijdens het aanmaken van de tabel Comment gaat het fout:
Ik krijg de foutmelding:
Na wat googl-en kwam ik er op uit dat deze fouten vaak duiden op circuliere referenties. (Waarom dit niet mag is me niet 100% duidelijk, maar zal liggen aan de onderliggende indices structuur).
De circuliere referentie is mogelijk: comments->FK_topic->FK_user<-FK_user<-comments, hoewel dit natuurlijk niet echt circulier is (let op de 1 richting pijltjes). Helaas kan ik nu niet de door mij be-oogde datastructuur neerzetten.
Ik dacht dat ik een vrij logische opzet had qua database, hoe kan ik InnoDB laten weten wat ik hier precies wil? Of op een andere manier dezelfde logische database structuur hebben.
Ik wil bij het laden van een topic gewoon alle comments laden (comments waarbij comments.FK_topic = topic) en van de comments de juiste username weergeven (user laden waar user comment.FK_user = user).
Edit: elke tabel heeft een uniek ID die net zo gemaakt is als de tabel hierboven (Primary KEY ('ID'),
Edit2: wat ik ook vergeten was erbij te vertellen is dat het ook fout gaat als ik alleen de FK_user neerzet in comments, het is dus waarschijnlijk niet het probleem met 2FK's wat in veel google-hits op deze error codes naar boven komt.
Topic
FK:User (de auteur)
Comment
FK:User, Topic (auteur van het comment, topic waarbij het comment hoort).
User.
(Geen FK's).
Tijdens het aanmaken van de tabel Comment gaat het fout:
SQL:
1
2
3
4
5
6
7
8
9
10
11
12
13
| CREATE TABLE `php`.`comment` ( `ID` INTEGER UNSIGNED NOT NULL AUTO_INCREMENT, `Date` DATETIME NOT NULL, `Text` TEXT NOT NULL, PRIMARY KEY (`ID`), CONSTRAINT `FK_Topic` FOREIGN KEY `FK_Topic` (`ID`) REFERENCES `topic` (`ID`) ON DELETE RESTRICT ON UPDATE RESTRICT, CONSTRAINT `FK_User` FOREIGN KEY `FK_User` (`ID`) REFERENCES `user` (`ID`) ON DELETE RESTRICT ON UPDATE RESTRICT |
Ik krijg de foutmelding:
code:
1
2
| MySQL error number 1005 Can't create table 'php.comment' (errno:121) |
Na wat googl-en kwam ik er op uit dat deze fouten vaak duiden op circuliere referenties. (Waarom dit niet mag is me niet 100% duidelijk, maar zal liggen aan de onderliggende indices structuur).
De circuliere referentie is mogelijk: comments->FK_topic->FK_user<-FK_user<-comments, hoewel dit natuurlijk niet echt circulier is (let op de 1 richting pijltjes). Helaas kan ik nu niet de door mij be-oogde datastructuur neerzetten.
Ik dacht dat ik een vrij logische opzet had qua database, hoe kan ik InnoDB laten weten wat ik hier precies wil? Of op een andere manier dezelfde logische database structuur hebben.
Ik wil bij het laden van een topic gewoon alle comments laden (comments waarbij comments.FK_topic = topic) en van de comments de juiste username weergeven (user laden waar user comment.FK_user = user).
Edit: elke tabel heeft een uniek ID die net zo gemaakt is als de tabel hierboven (Primary KEY ('ID'),
Edit2: wat ik ook vergeten was erbij te vertellen is dat het ook fout gaat als ik alleen de FK_user neerzet in comments, het is dus waarschijnlijk niet het probleem met 2FK's wat in veel google-hits op deze error codes naar boven komt.
[ Voor 8% gewijzigd door roy-t op 12-02-2009 15:42 ]