![]() |
![]() ![]() |
![]() |
![]()
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 ![]() -------------------- |
|
|
![]()
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
|
|
|
![]()
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 -------------------- |
|
|
![]()
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.
|
|
|
![]()
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.
|
|
|
![]()
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. -------------------- |
|
|
![]() ![]() |
![]() |
Aktualny czas: 20.08.2025 - 04:50 |