Is storing redundant data part of the (CouchDB) self-contained data concept

couchdbdocument-orientednosql

The CouchDB concept speaks about self-contained documents. In other words: ALL related data is stored in a single concept, instead of splitting them in multiple tables and reference each other using FKs.

An invoice contains all the pertinent information about a single transaction the seller, the buyer, the date, and a list of the items or services sold.

But this means that we end with redundant data in our database. Let's consider the invoice example: I buy 10 products over a period of time, which results in 10 invoices. Now several information are redundant, e.g. my billing address, delivery address and so on. That's at least a waste of space.

Considering other use-cases, updating data can be very complex. If we have a blogging-cms like WordPress, every post-document contains metadata like author name/email and so on. If those information changes, we've to update a lot of documents. And we have to know the structure from all of them. E.g. the email could be used in posts, comments, log entrys and so on.

When you think that the CouchDB allow a different form for any document, updating such information looks like a horrible tasks. I used MySQL as relational database for years and it seems much more meaningful to normalize such information, put e.g. users in a user table/collection, so that we can refer to some kind of PK.

What is the purpose behind those concept in CouchDB?

So my question is: Did I understood the concept of CouchDB properly, that they drop normalisation completely? I see the (theoretically?) benefit of having a better performance when no joins are required. Is the concept that we get a database with high throughput, but have to live with a (possible massive) amount of redundant data and we have to deal with a complex update-process when related metadata changes?

Best Answer

You understood correctly. NoSQL databases like Couch trade normalization for fast reads and better availability.

Like you, I have some aversion to inconsistency/denormalization. It's a trade off in which problems you want to be mindful of when you develop.