database design – The meaning of Data Modeling in case of noSql

In most use cases, there will always be a data model involved at some point regardless if you choose to store your data in a relational database management system (RDBMS) or a NoSQL database system. The differences between these two types of systems regarding the concept of data modeling is when the data model comes into play.

With a RDBMS, usually the data model is defined upstream such that the database entity tightly resembles the data model itself. This is great in cases where the data doesn’t necessarily need to be distributed across multiple systems and the consumers can all access it from the same centralized server, the data model is well defined, and it doesn’t have a need to change at a high frequency.

With a NoSQL system, usually the data model is defined at the consumer of the data, e.g. in the application layer, as concrete objects. This is great in cases where the data needs to be distributed across multiple systems (such as a mobile application that needs to support data manipulation offline), and multiple versions of that schema can exist between each of those distributed systems. A mobile application is a good example where the same data can be distributed across multiple systems, as different versions, but still be well defined.

That should answer your second two questions, but to your first question about normalization, this really depends on your use case. Normalization is really a concept for how to structure data in a RDBMS, so I don’t believe it concretely exists for NoSQL which is meant to support semi-structured / unstructured / variable structured data. That being said, in my opinion, I think it makes sense to aim to follow the loose design concepts of normalization when applicable to your use case, even if you store your data in a NoSQL system. Going back to my original point that with most use cases, the data model will exist, even if it’s not concretely defined until the application layer, it makes the job of the consumers to define that data model easier if the entities from the database follow a normalized like structure, when possible, even in NoSQL.