Είναι διαφορετικό πράγμα η υποστήριξη του referential integrity σε επίπεδο βάσης και σε επίπεδο εφαρμογής.
Καταρχήν, αν είσαι σίγουρος ότι η πρόσβαση στα data θα γίνεται αποκλειστικά μέσω της εφαρμογής, τότε ενδεχομένως να τη γλυτώσεις. Ωστόσο, σε διαφορετική περίπτωση οδηγείσαι με μαθηματική ακρίβεια σε προβλήματα. Από την άλλη μεριά, πολύ συχνά ακόμα κι εμείς οι owners της εφαρμογής κάνουμε πατάτες όταν χτυπάμε τη βάση απευθείας και μας ζώσει το referential integrity.
Στη συνέχεια, το referential integrity σε επίπεδο βάσης, δουλεύει άψογα όταν ερχόμαστε στο θέμα των transactions. Περιτό το να πούμε ότι αν δεν έχεις referential integrity δεν έχεις το C (consistnecy) από τα ACID properties, πράγμα που σημαίνει ότι δεν έχεις στην πράξη RDBMS. Επιπρόσθετα, στην εφαρμογή σου, θα πρέπει να χειρίζεσαι αυτές τις περιπτώσεις, πράγμα καθόλου εύκολο. Σκέψου ένα απλοϊκό παράδειγμα: Σβήνεις έναν πελάτη και τις παραγγελίες του, μια διαδικασία δύο βημάτων. Αν κάνεις το πρώτο και πριν προλάβεις να κάνεις το δεύτερο συμβεί ένα καταστροφικό γενονός, κοινώς "πέσει ο server", όταν τελικά θα επανέλθει, θα έχεις inconsistent data (λογικώς, μη ορθά δεδομένα). Με ένα καθώς πρέπει transactional σύστημα δεν θα είχες τέτοιο πρόβλημα αλλά και δεν χρειάζεται να γράψεις τρελλό κώδικα για να πιάσεις τέτοιες περιπτώσεις, πέρα από το handle του exception.
Vir prudens non contra ventum mingit