Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Usuwanie rekordów z bazy
marcinp1984
post
Post #1





Grupa: Zarejestrowani
Postów: 112
Pomógł: 0
Dołączył: 17.05.2009

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


I znów pytanie.. mam np takie tabelki....

GATUNKI

id_gatunku serial
nazwa gatunku text

WYKONAWCY
id_wykonawcy serial
nazwa_wykonawcy text

ALBUMY
id_albumu serial
tytul text
rok_wydania integer
id_gatunku integer
id_wykonawcy integer

jeśli mam wszystkie tabele wypełnione i chce usunąć np jeden gatunek pojawia się problem w postaci:

BŁĄD: update or delete on table "gatunki" violates foreign key constraint "fk_albumy_4" on table "albumy"
DETAIL: Key (id_gatunku)=(1) is still referenced from table "albumy".

No i jak się dowiedziałem tą sprawę załatwia ON DELETE CASCADE.... no i fakt.. załatwia aż za dobrze bo usuwając jeden gatunek tracę wszystkie albumy które mają klucz obcy do tego gatunku...

jak to można rozwiązać?(IMG:http://forum.php.pl/style_emoticons/default/questionmark.gif) Da się usunąć taki gatunek nie usuwając przy tym albumu??
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 4)
Zbłąkany
post
Post #2


Administrator serwera


Grupa: Developerzy
Postów: 521
Pomógł: 13
Dołączył: 2.04.2004
Skąd: 52°24' N 16°56' E

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


Jeśli masz założone relacje, to odpowiedź jest jedna: nie da się tego zrobić. Ale rozwiązanie istnieje, po prostu do tabeli gatunki dodaj pole typu boolean o nazwie is_active z domyślną wartością prawda i chcąc usunąć dany gatunek zmień wartość tego pola na fałsz. Oczywiście takie rozwiązanie powoduje, że do każdego zapytania wybierającego musisz dołączać warunek na pole is_active (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
piaseq
post
Post #3





Grupa: Zarejestrowani
Postów: 161
Pomógł: 25
Dołączył: 6.09.2008
Skąd: Warszawa

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


Piszesz o polach typu serial, więc domyślam się, że chodzi o Postgre. Jeżeli tak to według dokumentacji są jeszcze dwie możliwości oprócz CASCADE nie usuwające powiązanych rekordów. Chodzi o SET NULL i SET DEFAULT.
Go to the top of the page
+Quote Post
dr_bonzo
post
Post #4





Grupa: Przyjaciele php.pl
Postów: 5 724
Pomógł: 259
Dołączył: 13.04.2004
Skąd: N/A

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


Cytat
Da się usunąć taki gatunek nie usuwając przy tym albumu??

Najpierw odpowiedz sobie na pytanie co ma sie potem stac: film tez ma byc usuniety, ma nie miec zadnej kategorii, ma byc przydzielony do jakiejs domyslnej kategorii?

A potem skorzystaj z rozwiazan podanych wyzej.
Go to the top of the page
+Quote Post
marcinp1984
post
Post #5





Grupa: Zarejestrowani
Postów: 112
Pomógł: 0
Dołączył: 17.05.2009

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


ok, dzięki za wszystkie podpowiedzi (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
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: 24.12.2025 - 19:42