Sam Ruby - Dare Takes a Look at CouchDB:
"What happens when your application grows so large that you have no choice but to massively employ techniques like sharding? What do you have to give up? What do you need to add back in in order to mitigate the loss of the things you give up?
At a certain point, referential integrity has to be given up. Scale a bit further, and even the notion of a relation in the relational database sense of the word starts to break down. To cope, you denormalize a bit, not so much for performance reasons (though that’s important too), but as a self defense mechanism so that the pieces of data that you do have have enough context to be meaningful."