Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Usuwanie rekordów z bazy
Forum PHP.pl > Forum > Bazy danych > PostgreSQL
marcinp1984
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ć?questionmark.gif Da się usunąć taki gatunek nie usuwając przy tym albumu??
Zbłąkany
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 smile.gif
piaseq
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.
dr_bonzo
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.
marcinp1984
ok, dzięki za wszystkie podpowiedzi winksmiley.jpg
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.