![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 2 707 Pomógł: 290 Dołączył: 16.12.2008 Skąd: Śląsk Ostrzeżenie: (0%) ![]() ![]() |
Jak rozwiązuje sytuacje gdy .. na przykładzie:
Mamy tablicę/obiekt klasa, ta ma pod sobą lekcje i jeszcze po nią mamy oceny. I teraz powiedzmy, że dana klasa została usunięta i liczymy jakąś średnią ocen dla szkoły. W systemie korzystam z soft delete czyli (int) kolumna "deleted". I teraz pytanie. Jako, że tylko klasa ma status "deleted" oceny są nieruszone. Jak to rozwiązać? Gdybym korzystał z twardego usuwania to klucze obce by rozwiązały problem bo wraz z klasą wyleciałoby wszystko co po nią. 1) JOINowanie obiektów nadrzędnych i sprawdzanie warunku = 0? 2) Usuwanie masowym update obiektów podrzędnych set deleted = 1? 3) Może na poziomie DB da się to jakoś obsłużyć? 4) Inny sposób? |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 2 592 Pomógł: 445 Dołączył: 12.03.2007 Ostrzeżenie: (0%) ![]() ![]() |
Usuwanie wszystkiego nie ma sensu, bo zamiast jednego update musiałbyś zrobić ich dużo więcej, poza tym tracisz w ten sposób informację o tym co zostało usunięte.
Najważniejszy przypadek, który dyskwalifikuje takie rozwiązanie: nauczyciel wpisał uczniowi ocenę, ale niechcący nie temu co trzeba, więc usuną błędną (deleted=1) i dodał nową, prawidłową. Teraz usuwasz całą klasę i orientujesz się, że sorry, ale to nie ta klasa miała być usunięta - więc przywracasz. Jeśli byś robił masowe update deleted=1 dla wszystkich ocen to w momencie próby przywrócenia klasy nie wiadomo by było które oceny przywrócić, a które zostawić usunięte. Zatem JOIN jest IMHO najlepszym rozwiązaniem. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 14.10.2025 - 15:58 |