Possiedo un ORM basato su record attivo con eliminazioni software (Laravel Eloquent specifico) in un database SQL.
Il comportamento "soft delete" integrato nell'ORM è:
Se il record non viene cancellato, deleted_at
è nullo. Quando un record viene eliminato, il campo deleted_at
viene popolato con un timestamp.
L'ORM utilizza il campo 'deleted_at' internamente nella sua logica e crea il campo. È difficile modificare il tipo di deleted_at
.
Ho la situazione in cui ho tre modelli (tabelle), A, B e C. Il modello C appartiene sia a A che a B. Neppure A o B appartengono l'uno all'altro. Quindi la tabella C contiene colonne per contenere chiavi esterne su A e B.
Affinché C sia valido, entrambi i suoi genitori non devono essere cancellati. Se A o B vengono cancellati, anche C deve essere cancellato.
Tuttavia, se A o B viene cancellato, quindi ripristinato (cioè% colonnadeleted_at
impostato su null), allora anche C dovrebbe essere ripristinato.
Sto cercando di capire un algoritmo per determinare quando ripristinare C, se A e B sono ripristinati.
Mi sto appoggiando ad un algoritmo di conteggio dei riferimenti? Quindi, quando A o B viene eliminato, cancella C e incrementa il deleted_count
di C. Se A o B viene ripristinato, allora decrementa C deleted_count
e se deleted_count
è 0, quindi ripristina C?
Questo suona come l'approccio migliore per questo tipo di situazione? Qualche ovvio inconveniente?