Innanzitutto, mantieni i dati normalizzati (non ridondanti) il più possibile. Se i dati sono completamente normalizzati, nessun singolo aggiornamento può renderli incoerenti.
Non è sempre possibile mantenere i dati normalizzati, in altre parole potrebbe non essere possibile eliminare la ridondanza, nel qual caso possono avere stati incoerenti. La cosa da fare quindi è tollerare l'incoerenza e ripararla periodicamente con un qualche tipo di programma che lo attraversa e lo corregge.
Vi è una forte tendenza a cercare di gestire strettamente la ridondanza mediante notifiche. Questi non sono solo difficili da accertare che siano corretti, ma possono portare a enormi inefficienze. (Parte della tentazione di scrivere notifiche nasce perché in OOP sono praticamente incoraggiati.)
In generale, tutto ciò che dipende dalla sequenza temporale di eventi, messaggi, ecc., Sarà vulnerabile e richiederà tonnellate di codice difensivo. Eventi e messaggi sono caratteristici dei dati con ridondanza, perché comunicano le modifiche da una parte all'altra, cercando di prevenire incoerenze.
Come ho detto, se devi avere la ridondanza (e le probabilità sono abbastanza buone che devi), è meglio essere in grado di a) tollerare e b) ripararlo. Se si tenta di prevenire l'incoerenza esclusivamente tramite messaggi, notifiche, trigger, ecc., Sarà molto difficile renderlo robusto.