Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: problem ze strukturą tabelek
Forum PHP.pl > Forum > Bazy danych > MySQL
MitS
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
nospor
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.
MitS
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))


questionmark.gif
nospor
no raczej nie ma 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.
MitS
oki dzięki za odpowiedź.

Pozdrawiam
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.