Flexibility and constraint are both useful. (Constraint is one of the reasons to use a finite state machine in the first place.) An overly constrained system can't function, an overly flexible system can't be relied upon. You'll answer your question the day you encounter a problem that NoSQL is a bad fit for, and after you learn SQL it won't feel so alien or complicated. Or maybe that day will never come and you'll never feel the need to learn SQL.
For a motivating example, consider a billing or accounting system. This domain is well known, we probably don't need the ability to rapidly evolve our schema. If we violate the constraints of this system, there may be serious consequences, like spending money we don't have or billing for the service twice.
We could build this system with either an NoSQL or a SQL database, but SQL would seem to me to be the natural choice.
I understand what you're saying, but in the example for accounting, we can also solve this problem using NoSQL. Because the most important feature we're talking about there is transaction support. Similarly, schema-on-write can be provided by a library.
To me it seems like NoSQL works better when there is less to normalize, which is the case with microservices. Those services struggle with the support for a distributed transaction when they have to make a distributed transaction. This problem will be very easily solved in SQL (assuming its not shared to completely denormalize everything for performance).
Note that this normalization problem also shows up in schema-on-write. If multiple people are contributing to a schema from different teams, then it will become hard to maintain a schema-on-write.
NoSQL will bring it's own set of issues right? Too flexible of a system with no built in Validations would mean that they need to be handled somewhere else. If we take the example in the post, refund should not precede awaiting payment, If a new status gets added, it becomes easy to know where the migrations have to be run and in NoSQL, either we write something custom or handle it each time the document is called.
maxbond|1 year ago
For a motivating example, consider a billing or accounting system. This domain is well known, we probably don't need the ability to rapidly evolve our schema. If we violate the constraints of this system, there may be serious consequences, like spending money we don't have or billing for the service twice.
We could build this system with either an NoSQL or a SQL database, but SQL would seem to me to be the natural choice.
cricketlover|1 year ago
To me it seems like NoSQL works better when there is less to normalize, which is the case with microservices. Those services struggle with the support for a distributed transaction when they have to make a distributed transaction. This problem will be very easily solved in SQL (assuming its not shared to completely denormalize everything for performance).
Note that this normalization problem also shows up in schema-on-write. If multiple people are contributing to a schema from different teams, then it will become hard to maintain a schema-on-write.
pratio|1 year ago
onion-soup|1 year ago
mtkd|1 year ago
mjhay|1 year ago
klysm|1 year ago
unknown|1 year ago
[deleted]