A misconception that I held for a extremely prolonged time modified into that systems that employ SQL (Structured Query Language) are by definition relational databases, and systems that don’t (e.g., MongoDB, Cassandra) are non-relational.
It’s easy to heed whether or no longer a database uses SQL or no longer, but what does it mean after we are pronouncing a database is relational? At a minimal, relational databases present info within the secure of “household contributors,” one other be conscious for tables with rows and columns.1 SQL is accurate the ever-prove procedure of querying for info relationally.
AWS explains this distinction subtly. The definition of relational databases begins with:
A relational database is a series of information items with pre-defined relationships between them. This stuff are organized as a discipline of tables with columns and rows. Tables are extinct to retain info about the objects to be represented within the database.
And SQL handiest makes an appearance rather extra down, when it’s defined that “SQL or Structured Query Language is the principle interface extinct to be in contact with Relational Databases.”
The creators of MongoDB seem to be responsive to this deceptive conflation of terms when justifying why they didn’t hasten along with SQL:
The period of time NoSQL is a bit unsuitable – we are if truth be told talking about horizontally scalable postrelational stores, no longer about the seek data from language. I would retain in thoughts the Google App Engine Files Retailer NoSQL, and it uses a SQL-like seek data from language GQL.
Some of their reasons (emphasis mine):
The principle cause we went the formulation we did with the seek data from language – representing queries as JSON – modified into to normalize the data we are storing with the seek data from mechanism. If we are storing JSON within the database, can we no longer signify the queries that procedure too? We knowing that made sense.
I’ve by no procedure been a fan of embedding one programming language in a single other. Build up strings of SQL dynamically has steadily seemed a bit irregular to me. I powerful purchase representing the queries in a info-driven procedure as an alternate.
Therefore, it’s no longer logically inconsistent that MongoDB’s novel info lake offering would possibly perchance perhaps also merely furthermore be queried thru SQL.
Why is this distinction necessary? It’s pedantic, but SQL is a flexible language that can extinguish powerful extra than seek data from relational databases. To illustrate, SQL would possibly perchance perhaps also merely furthermore be extinct to hunt data from S3, discipline off analytics jobs in Hive, retrieve OS info on the flit thru osquery, provide repeatedly updating relational views on streaming info from Materialize, and even seek data from NoSQL databases. And conversely, relational info would possibly perchance perhaps also merely furthermore be queried from languages other than SQL, like EdgeQL.
As an alternate of dividing databases by SQL vs. NoSQL, we would also strive to divide them up by relational vs. non-relational (perhaps that’s how most of us judge the admire anyway). Nonetheless these two camps of databases are slowly converging too, with JSON datatype strengthen in MySQL and PostgreSQL, and pseudo-JOINs and transactions in MongoDB. Quite loads of factors just like the supposed horizontal scalability of NoSQL databases aren’t accurate both. Practitioners figured out that we would possibly perchance also secure semi-relational databases by tacking on seek data from engines to key-label stores, fully relational distributed databases floor up (F1, CockroachDB), or as layers on predominant-reproduction RDBMS node groups (Vitess).
NoSQL databases admit that their supreme draw is the lack of strict schemas and the following benefits like much less painful migrations. For my section, right here is the predominant incompatibility between the 2 camps now. Let’s strive to distinguish these databases by strict vs. loose schema validation, as an alternate of SQL vs. NoSQL, and issues would possibly perchance perhaps well turn out to be much less advanced for the following technology of builders.