Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> 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
nospor
post
Post #2





Grupa: Moderatorzy
Postów: 36 557
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
MitS
post
Post #3





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

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


no właśnie się tego domyśliłem no i jednocześnie chcę ominąć patent że mam dwie kolumny idContent i idNews (no ale jeśli nie ma wyjścia to tak też stworze ... ),
tylko zanim to uczynię chciałbym wiedzieć czy nie ma żadnego patentu typu:

  1. IF(modMenu=`news`, (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))


(IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif)
Go to the top of the page
+Quote Post
nospor
post
Post #4





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




no raczej nie ma (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)

Od biedy mozesz olac zakladania klucza obcego i zostawic tylko to jedno pole. Na chwile obecną i tak nie masz zadnych wiekszych korzysci z zakladania klucza obcego, bo na delete i update ustawiles NO ACTION.
Go to the top of the page
+Quote Post
MitS
post
Post #5





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

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


oki dzięki za odpowiedź.

Pozdrawiam
Go to the top of the page
+Quote Post

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: 23.08.2025 - 21:42