![]() ![]() |
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. -------------------- |
|
|
|
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 2 707 Pomógł: 290 Dołączył: 16.12.2008 Skąd: Śląsk Ostrzeżenie: (0%)
|
Teraz stosuje JOINy tylko słabe to jest troszkę ze względu na wiele poziomów relacji.
Wymaga też dużej konsekwencji przy budowaniu zapytań. Choć to co napisałeś - oczywiście dyskwalifikuje te rozwiązanie chociaż można by się pokusić o opieranie się o timestpamy (zamiast deleted 0/1 używa się unix time co czasem faktycznie się przydaje). Ten post edytował markonix 29.02.2016, 14:27:23 -------------------- |
|
|
|
![]() ![]() |
|
Aktualny czas: 20.08.2025 - 03:46 |