• After reading through some of the "suggestions" on this thread, and going through years of getting my butt handed to me by my own code, I'm curios; if you don't declare and enforce RI, how would you know you're ETLs are scrubbing the data properly? I can see unit testing, but when edge cases are taken into account and there's no RI all hell generally breaks loose.

    After cleaning up messes made by some of the published authors in this field, I can assert from personal experience that RI is not optional. First, it'll save you time to release as your ETL bugs will be immediately visible (no testing required, the code just fails) AND it will save your administrator hours of sleep as an RI violation in production should trigger a batch rollback/reload so no human intervention is required to clean the errant data.

    Last, and probably most importantly, it'll save your users from making huge business mistakes. If a part is purchased from supplier A and the reporting system is asserting that it is purchased from supplier B, a bad decision is going to be made. Depending on the decision, it could be terribly detrimental to the company as a whole. If the company doesn't make money, neither do you 🙂

    There have been occasions where I've dropped RI due to physical limitations of a machine, but I'm also aware I do so at my peril. I'd suggest this is always the case.

    ROb