Oggi al lavoro ho trovato la seguente situazione:
Abbiamo avuto due tabelle, A
e B
, con B che ha una chiave esterna collegata alla chiave primaria di A.
Sulla nostra applicazione, abbiamo ottenuto due situazioni principali che hanno creato il problema :
Uno dove dovevamo aggiungere aggiungere alcuni record in A, seguito dalla creazione di alcuni record in B che si riferivano a quelli di A. Questo andava bene, poiché abbiamo creato il nostro BLL per gestire prima i cambiamenti in A e li B. Il "problema" è, a volte dovremo cancellare i record di B e loro cancellare il record riferito in A, che genera un errore, poiché stiamo cercando di eliminare A prima di eliminare B, cosa potrebbe rompere l'integrità referenziale di queste tabelle. Ovviamente tutto è all'interno di una transazione, e potremmo gestirlo nel nostro codice BLL, semplicemente cambiando l'ordine in cui i cambiamenti avvengono prima (in A o in B) in base alle azioni che devono essere fatte, ma la mia domanda è più concettuale di un "per favore aiutami a risolvere il mio problema" , poiché il "problema" è già risolto (ma ovviamente accetto i suggerimenti se si presentano! = D).
Chiacchierando in ufficio, abbiamo concordato che, all'interno di una transazione, tutto è come una donna e se si verifica qualche problema, viene eseguito il rollback di ciò che è stato fatto.
La mia idea : perché la transazione non può valutare tutto e ordinare le istruzioni ed eseguirle in un modo che non infrange l'integrità referenziale, poiché dopo la transazione tutto sarà fatto e l'ordine potrebbe non avere alcuna importanza? Dopo averci pensato un po ', anche io non sono sicuro se questa cosa sarebbe carina o creare qualche re dell'inferno vivente, dal momento che posso pensare ad alcune situazioni in cui l'ordine delle affermazioni sarebbe importante, quindi lo sto postando qui così possiamo discuterne.
Spero che il mio testo non sia confuso. E per menzionare, sto usando Microsoft SQL Server
. Non so se questo è possibile in altri database.