I came across an interesting blog post the other day about whether databases should be (declaratively) enforcing the foreign key relationships between tables. The blog post discussed the issue of foreign keys being temporarily disabled to perform data loading, and then encountering the problem of what to do when those foreign keys cannot be re-enabled due to bad data. Perhaps they should just be omitted altogether ? I don’t want to put words in the author’s mouth, because he stressed he was not taking sides in the “should we” or “shouldn’t we” debate on declarative foreign keys, but the concluding part of the blog was:
I find that is a bit like saying:
“Well, seat belts are compulsory but people are still getting injured in car accidents, so you may as well just not bother with seat belts at all”
So here’s some information from the other perspective – why constraints are so important for your database in terms of both data correctness and performance.
Firstly here is an AskTOM magazine article that demonstrates the benefits of declarative constraints to both the optimizer, and to the availability of technologies such as materialized view rewrite.
Also, to respond to the particular topic in the blog post about handling data loads, here is a video from the Real World Performance group about how you can validate massive sets of data for referential integrity, and then still apply the constraints efficiently to give the optimizer all those benefits for subsequent query processing.
But if all of that seems to complicated to read and digest, perhaps an easier way of understanding the importance of constraints is to watch my simple video about Australian wildlife