Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> problem ze strukturą tabelek
MitS
post
Post #1





Grupa: Zarejestrowani
Postów: 262
Pomógł: 5
Dołączył: 8.02.2005
Skąd: Olsztyn / Zatorze

Ostrzeżenie: (0%)
-----


Witam serdecznie ...

przejdę od razu do rzeczy ...
mam sobie przykładowo taką strukturę:

  1. CREATE TABLE content(
  2. id INT(3) NOT NULL AUTO_INCREMENT,
  3. idContent INT(3) NOT NULL,
  4. dateContent VARCHAR(20) NOT NULL DEFAULT '0000-00-00 00:00:00',
  5. descriptionContent TEXT NOT NULL,
  6. PRIMARY KEY (id),
  7. UNIQUE INDEX (idContent),
  8. INDEX dateContent (dateContent)
  9. ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
  10.  
  11.  
  12. CREATE TABLE news(
  13. id INT(3) NOT NULL AUTO_INCREMENT,
  14. idNews INT(3) NOT NULL,
  15. nameNews VARCHAR(255) NOT NULL,
  16. demoNews TEXT NULL,
  17. contentNews TEXT NULL,
  18. dateNews VARCHAR(20) NOT NULL DEFAULT '0000-00-00 00:00:00',
  19. authorNews VARCHAR(255) NULL,
  20. isImage INT(1) NOT NULL DEFAULT '0',
  21. PRIMARY KEY(id),
  22. UNIQUE INDEX (idNews)
  23. ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
  24.  
  25.  
  26. CREATE TABLE management(
  27. id INT(3) NOT NULL AUTO_INCREMENT,
  28. idManagement INT(3) NOT NULL,
  29. modManagement VARCHAR(32) NOT NULL,
  30. sectionManagement VARCHAR(255) NOT NULL,
  31. PRIMARY KEY(id),
  32. UNIQUE INDEX (idManagement),
  33. INDEX (modManagement),
  34. INDEX (sectionManagement),
  35. CONSTRAINT identificate_news FOREIGN KEY(idManagement)
  36. REFERENCES news(idNews) ON DELETE NO ACTION ON UPDATE NO ACTION,
  37.  
  38. CONSTRAINT identificate_content FOREIGN KEY(idManagement)
  39. REFERENCES content(idContent) ON DELETE NO ACTION ON UPDATE NO ACTION
  40. ) ENGINE=InnoDB DEFAULT CHARSET=utf8;


tabelki dodały się bez błędów, jednak podejrzewam, iż w ostatniej tabelce jest błąd gdzieś w tym miejscu:

Kod
                CONSTRAINT identificate_news FOREIGN KEY(idManagement)
        REFERENCES news(idNews)
        ON DELETE NO ACTION
                  ON UPDATE NO ACTION,

                CONSTRAINT identificate_content FOREIGN KEY(idManagement)
        REFERENCES content(idContent)
        ON DELETE NO ACTION
                  ON UPDATE NO ACTION


Mój zamiar jest taki, że osoba dodająca dane w panelu admina może sobie wybrać czy chce dodać zwykłego newsa czy innego ...
jeżeli wybierze newsa to dane zapisują sie do tabeli: management i news jeśli coś innego to dane są zapisywane do tabeli: management i content


i teraz moje pytanie brzmi ... jak poprawić tabelkę "management" tak by można było dodawać jakiekolwiek dane, bo na razie przy próbie dodania czegoś wywala mi:

Cytat
1216 - Cannot add or update a child row: a foreign key constraint fails
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
nospor
post
Post #2





Grupa: Moderatorzy
Postów: 36 559
Pomógł: 6315
Dołączył: 27.12.2004




Stworzyles pole idManagement, ktore jest kluczem obcym jednoczesnie do dwoch tabel. No to zeby ci dzialalo no to sorki, ale musisz miec wtych dwoch tabelach rekordy na ktore klucz wskazuje. Nie moze byc tak ze w jednej wskazuje a w drugiej nie. A u ciebie teraz tak jest.

Rozbij to na dwa pola: idNews, idContent i kazdy z nich nie bedzie osobno kluczem obcym do swoich tabel.
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 15.10.2025 - 03:22