Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Klucz obcy, który typ
markonix
post
Post #1





Grupa: Zarejestrowani
Postów: 2 707
Pomógł: 290
Dołączył: 16.12.2008
Skąd: Śląsk

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


Takie koncepcyjne pytanie.

Refaktoryzuję bazę danych i dorzucam kluczę obce dla lepszego porządku.
ON UPDATE/DELETE CASCADE idealnie nadaje się do relacji gdy jeden zbiór jest podzbiorem innego i podzbiór sam w sobie nie może istnieć.

Zastanawiam się jednak jaki typ nadać dla relacji:

Wiersz w bazie danych, jakiś rekord, który ma "creator_id" czyli id użytkownika, którzy utworzył ten rekord. Nie jest to rekord własności obiektu, a tylko taka dodatkowa informacja jak data utworzenia.
Zastanawiam się jakiej tu relacji użyć (jeśli w ogóle jest sens) bo na pewno usuwając użytkownika nie chce usunąć tego rekordu smile.gif


--------------------
Go to the top of the page
+Quote Post
Pyton_000
post
Post #2





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


ON UPDATE CASCADE/ON DELETE SET NULL
Go to the top of the page
+Quote Post
markonix
post
Post #3





Grupa: Zarejestrowani
Postów: 2 707
Pomógł: 290
Dołączył: 16.12.2008
Skąd: Śląsk

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


NULLowanie wydaje się logiczne. Widzę jednak w tym takie małe wady:
- nie rozróżniam wtedy czy np. obiekt nie miał twórcy od zawsze (np. NULL ma dodany manualnie, przez system)
- ID nawet bez połączenia jest jakąś informacją, a w ostateczności można za pomocą backupów zawsze można dojść do źródła.

Najchętniej bym zrobił samo ON UPDATE CASCADE niestety nie da się ustalić tylko jednej akcji.

Ten post edytował markonix 8.02.2015, 22:00:48


--------------------
Go to the top of the page
+Quote Post
Damonsson
post
Post #4





Grupa: Zarejestrowani
Postów: 2 355
Pomógł: 533
Dołączył: 15.01.2010
Skąd: Bydgoszcz

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


Czemu chcesz wywalać tego usera całkowicie z bazy? Rób po prostu soft delete.
Go to the top of the page
+Quote Post
phpion
post
Post #5





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




W tym przypadku zrezygnowałbym z klucza obcego. Mają one na calu zachowanie integralności danych, a Twoje założenie temu przeczy (usuwasz użytkownika, a chciałbyś jednak pozostawić jakiś ślad w postaci jego ID). Zostaw więc kolumnę bez żadnego klucza obcego.
Go to the top of the page
+Quote Post
markonix
post
Post #6





Grupa: Zarejestrowani
Postów: 2 707
Pomógł: 290
Dołączył: 16.12.2008
Skąd: Śląsk

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


Oboje macie racje.

1) Robię soft delete choć wiadomo, że po czasie warto by jednak usuwać takie konta i problem wróci.
Soft delete też czasami rodzi problemy gdy gdzieś zapomni się odfiltrować usunięte rekordy stąd trzeba z nim uważać. Pomijam już zupełnie kwestie prawne.
2) Słusznie nie da się zrobić tylko samego UPDATE bo to burzy założenia kluczy obcych. Albo jest twarda relacja, albo nullujemy.

W sumie zostawię decyzję na potem. Ostatecznie albo zostawię bez klucza albo UPDATE -> NULL.


--------------------
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 20.08.2025 - 04:50