Nie robiła bym delete w ogóle. Raczej archiwizacja, anonimizowanie.
To nie leży w obszarze dobrych/złych praktyk albo w ogóle jakichkolwiek praktyk.
To po prostu zależy od danego projektu; to co ja robię, zanonimizowanie danych nie ma sensu, soft-delete (czyli flaga na wierszu usunięte
sensu też nie ma, bo to jest usuwane ma być usunięte i tyle) również nie ma, ponieważ usuwane dane są niepotrzebne.
A jeżeli już są usuwane, to jest to usuwane ze wszystkimi podległymi zależnościami.
Oczywiście jeżeli istnieje jakaś zależność, która blokuje możliwość usuwania - to takich danych usunąć się nie da (z punktu widzenia danego procesu biznesowego, a nie bazy danych sensu stricte).
Natomiast kaskadowe delete może Ci wysypać część danych które są potrzebne gdzieś indziej, obojętnie gdzie.
To jest delikatnie powiem, bzdura.
Jeżeli baza jest poprawnie zaprojektowana to nic takiego się nie wydarzy, bo klucze obce będą trzymały takie pomysły za pysk i pozwolić się nie usuną.
Zadaniem kluczy obcych i ogólnie wszelkich constraints
w bazie danych jest utrzymanie danych w odpowiedniej jakości.
Żadnych lewych wpisów, żadnych osieroconych wierszy. A więc chodzi właśnie o to, żeby nic się absolutnie nie posypało.
Pamiętaj że delete w bazach mimo wszystko nie obniża wskaźnika wysokiej wody stąd może kiedyś się okazać że baza zajmuje mnóstwo miejsca, a danych w niej niewiele. Albo co gorsza brakuje danych które są potrzebne do zestawień chociażby dla KNF/PIU/RIO czy czegokolwiek innego co może dzisiaj jeszcze nie istnieje a za rok może mieć prawo do kontrolowania instytucji.
Proszę Cię, co to za teza jest w ogóle?
Jeżeli ktoś chce usuwać dane i to jeszcze kaskadowo, to zakładam że wie co robi i wie co usuwa i dlaczego można to w ogóle usunąć.
Przecież kaskadowe usuwanie czy aktualizacja **nie jest **globalnym założeniem - to się bardzo precyzyjnie definiuje gdzie ma działać i jak ma działać.
Ale tłumaczenie tego w sposób "to złe jest, nie rób tego, bo usuniesz dane" jest z lekka bez sensu.