I just want to add that too much of database design is all about these weird corner cases. Well, what if my database server explodes? Well holyshit man, that's a problem. Better code that condition into our database. These SQL DB developers need to design all these random features to keep our data safe from supernovas and *, they forget to design the database for the most simple use case: storing and retrieving data.
Literally, I can not store data in a SQL database without either using some retarded COBOL inspired language that can not function well with the rest of my code base, or use some bizarre hacky mess framework called an ORM that literally you have be a masochist to enjoy working with. Just to do the most basic of operations. This is why SQL databases are garbage salad.
I was a SQL true believer once. Just a few years ago. When I was first made aware of MongoDB, which I never heard of, I was like lets do a YouTube search. And well f**k, the first result was that "MongoDB is web scale". It was hilarious. MongoDB is like writing to /dev/null! Ha ha! Stupid hipsters! I was like showing that video to everyone, lol how stupid people must be for not using the tried and true MySQL DB with it's built in nuclear apocalypse mitigation. *puts on sunglasses*
Until I started actually using MongoDB. It was like the best thing that ever happened. Holyshit, you can write stuff to a database simply by calling "save" on the object as is? I don't need to design a schema or work with ORMs or SQL or all that nonsense? I just call a single method? Holy crap man, I've been missing out on this all this time? After awhile of using NoSQL, it became obvious that developers who like SQL are (1) ignorant of the options, (2) completely batshit insane. There exists no alternate possibilities.
That's the reason why NoSQL is getting huge. Because, developers are becoming enlightened to it. And that is totally awesome.