Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Soft deleting a obiekty w relacji
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%)
-----


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?


--------------------
Go to the top of the page
+Quote Post
vokiel
post
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.


--------------------
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%)
-----


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


--------------------
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 - 03:46