DBMS = Database Management System (e.g. MySQL, MariaDB, PostgreSQL, Oracle, Access, MongoDB) SQL: This should be your default option for most applications Relational database with predefined schema Data organized in tables, rows, and columns Uses SQL as a common language, but some features may be DBMS-specific (MySQL vs PostgreSQL, etc.) Well-suited for multi-table transactions NoSQL: Useful when you need high-performance at a huge scale, with little or no relation between tables Allows storing data with no schema Well-suited for documents, JSON, time series data, data dumps, and logs Records can have internal structure (such as an array or tree-like structure) Lack of good support for joins can be circumvented by storing joined data multiple times in different records This sacrifices memory for time Maintaining data consistency is more challenging Some NoSQL DMBSs have limited support for joins and transactions Note: If you just need to dump a bunch of JSON data (or something similar) from your application and fetch it back at a later time, you may not need a detailed database model. You may just want to store the JSON data directly (which both SQL and NoSQL databases can do). SQLite: From their website: "SQLite does not compete with client/server databases. SQLite competes with fopen()" Benefits: Simple to setup Low latency, even for large sequences of SQL statements Transactional Serverless Single data file Lightweight processing Drawbacks: Any write operation requires a lock on the whole database; many simultaneous writes will slow it down Lacks stored procedures Lacks user management (e.g. who has permission to write to which table) Transaction: A unit of work on the database (possibly with multiple actions), treated independently of other such units. If you are using a database, you must learn how to use transactions Properties (ACID): Atomic - either all of the transaction takes affect, or none of it (including under power failures and crashes) Consistent - database invariants are maintained (constraints, triggers, referential integrity, etc.) Isolated - transactions are executed as if they were sequential Durable - committed transactions are never forgotten (i.e. they stored to non-volatile memory) Basic operations (CRUD) and their associated SQL statements: Create (INSERT) Retrieve (SELECT) Update (UPDATE) Delete (DELETE)