![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 7 Pomógł: 0 Dołączył: 18.12.2009 Ostrzeżenie: (0%) ![]() ![]() |
witam
mam problem z zaprojektowaniem bazy. robie bardzo prosty katalog filmow i zatrzymalem sie w pewnym miejscu. mam tabele film, w ktorej przechowuje wszystko o filmie. jednakze, gdy doszedlem do pola gatunek, zaczely sie schody - film moze miec wiecej niz jeden gatunek. majac tabele dodatkowa gatunek w ktorej przechowuje nazwy gatunkow, moge wstawic id_gatunku w tabele film. tylko co jesli film ma np 3 gatunki? zrobilem tabele pomocnicza ktora sklada sie z id_film, id_gatunek. operacja dodania filmu i zaznaczeniu 3 gatunkow (przez formularz na stronie), dodawany jest rekord w tabeli film i 3 rekordy w tabeli pomocniczej gdzie id_film jest taki sam a zmienia sie tylko id_gatunek. w tym miejscu mam pierwsze pytanie : czy taka konstrukcja utworzenia dodatkowej (zbiorczej) tabeli pomocniczej jest jedynym wyjsciem? druga sprawa to klucze obce w mysql. chcialbym zrobic tak, ze w przypadku usuniecia rekordu z tabeli film o id=1, to automatycznie usuwane sa rekordy w tabeli pomocniczej. utworzylem indeks w tabeli film wskazujacy na tabele posrednia_tabela_z_gatunkami i ustawilem on delete=cascade, on update=cascade i wszystko jest ok, ale w przypadku gdy usune rekordy w tabeli gatunki z danym id_film (IMG:style_emoticons/default/smile.gif) wtedy w tabeli film znika dany rekord. a ja chce zrobic na odwrot. usuwam rekord w film i serwer usuwa mi rekordy w tabeli pomocniczej. proba utworzenia indeksu (klikam na ikonke indeks w phpmyadmin) i tam wskazujac na pole film.id wyskakuje mi blad : Kod #1452 - Cannot add or update a child row: a foreign key constraint fails (`filmy2`.`#sql-da0_ae`, CONSTRAINT `#sql-da0_ae_ibfk_1` FOREIGN KEY (`id_film`) REFERENCES `film` (`id`) ON DELETE CASCADE ON UPDATE CASCADE) wiem, ze da sie to zrobic w pph usuwajac po prostu rekordy odpowiednim zapytaniem, a wlasciwie dwoma zapytaniami (IMG:style_emoticons/default/smile.gif) ale wydaje mi sie, ze szybciej zrobi to serwer bazy, niz php. wlasnie tutaj jest nastepne pytanie : co jest lepsze, kaskadowe usuwanie w php zapytaniami czy zaprojektowanie bazy z relacjami? przedstawiona ponizej struktura mojej bazy: film id (PK) tytul gatunek: id (PK) gatunek posrednia_tabela_z_gatunkami id_film id_gatunek czesze ten internet i czesze i nic konkretnego nie znalazlem. same zapytania na forach bez odpowiedzi (IMG:style_emoticons/default/smile.gif) moze tutaj ktos mi pomoze. z gory dziekuje bardzo pozdrawiam ps oczywiscie tabele sa INNODB (IMG:style_emoticons/default/smile.gif) Ten post edytował michael8383 30.03.2010, 23:55:48 |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 7 Pomógł: 0 Dołączył: 18.12.2009 Ostrzeżenie: (0%) ![]() ![]() |
slicznie dziekuje, dziala. zmodyfikowalem wprawdzie kod tak, ze ustawilem tylko jeden klucz obcy wskazujacy na tabele film. operacje na gatunkach nie beda robione ani spod poziomu bazy ani w php. to po prostu na sztywno ustawione nazwy.
poklikalem troche i wyglada na to, ze nie ustawilem klucza glownego w tabeli film_gatunek na oba pola. nie wiem czemu, ale dziala (IMG:style_emoticons/default/smile.gif) jeszcze raz dzieki! |
|
|
![]() ![]() |
![]() |
Aktualny czas: 3.10.2025 - 23:48 |