Databases Explained: SQL, NoSQL, and How Apps Store Data
Technology

Databases Explained: SQL, NoSQL, and How Apps Store Data

M
Marcus Thorne · ·8 min read

Every application that does anything useful stores data. A social media app stores posts and followers. An e-commerce site stores products, orders, and customers. A note-taking app stores your notes. The system doing that storage — organizing, retrieving, and protecting all of it — is a database.

Understanding databases is one of the most fundamental concepts in software development, and the distinction between SQL and NoSQL databases comes up constantly in technical decisions.

What a Database Is

A database is software designed to store and retrieve data efficiently and reliably. The “efficiently” part means queries that might scan millions of records return in milliseconds. The “reliably” part means data doesn’t get lost or corrupted when the server crashes.

Databases are separate software from your application. Your application code connects to the database, sends queries, and receives results. The database handles storage, indexing, and concurrency — multiple users or processes reading and writing data simultaneously without corrupting it.

Relational Databases and SQL

The dominant type of database for most of computing history is the relational database. Data is organized into tables: rows and columns, like a spreadsheet. Each table represents one type of thing.

A simple e-commerce database might have:

users table
idnameemail
1Alicealice@email.com
2Bobbob@email.com
orders table
iduser_idtotal
101159.99
102224.50

The user_id column in orders references the id in users. This relationship is where “relational” comes from. Instead of duplicating Alice’s name and email in every order, you just store her ID. The data is normalized — stored once, referenced from multiple places.

SQL: The Language of Relational Databases

SQL (Structured Query Language) is how you talk to relational databases. It’s been the standard since the 1970s and is used by PostgreSQL, MySQL, SQLite, SQL Server, and others.

Basic queries:

-- Get all orders for Alice
SELECT orders.*
FROM orders
JOIN users ON orders.user_id = users.id
WHERE users.name = 'Alice';

-- Insert a new user
INSERT INTO users (name, email) VALUES ('Charlie', 'charlie@email.com');

-- Update an order
UPDATE orders SET total = 49.99 WHERE id = 101;

-- Delete a record
DELETE FROM users WHERE id = 2;

The power of SQL is in queries that span multiple related tables (JOINs), aggregate data (COUNT, SUM, AVG), and filter with complex conditions. A query that would require dozens of lines of application code can often be expressed in a few lines of SQL.

ACID: Why Relational Databases Are Trustworthy

Relational databases guarantee ACID properties:

Atomicity: A transaction either completes fully or not at all. If you’re transferring money between bank accounts — deducting from one, adding to the other — and the server crashes midway, neither operation persists. You don’t lose money into the void.

Consistency: Data always follows the rules you’ve defined. If you’ve declared that user_id in orders must reference a valid user, the database enforces that — you can’t have an order with a nonexistent user.

Isolation: Concurrent transactions don’t interfere with each other. Two people buying the last item in stock at the same time won’t both succeed if there’s only one left.

Durability: Once a transaction is committed, it stays committed even through crashes or power failures.

These guarantees matter enormously for any data that involves money, inventory, or anything where partial writes would cause serious problems.

Common Relational Databases

PostgreSQL — The gold standard open-source relational database. Full-featured, reliable, handles complex queries well. The default choice for most new projects.

MySQL / MariaDB — Widely used, especially in older web stacks (LAMP). MySQL is what WordPress and most traditional CMS systems use.

SQLite — A file-based database with no separate server process. The entire database is one file. Used in mobile apps, browsers, and small applications where a separate database server is overkill.

SQL Server / Oracle — Enterprise products from Microsoft and Oracle respectively. Expensive, powerful, common in large corporations with existing Windows or Oracle infrastructure.

NoSQL Databases

In the 2000s, applications like Google, Amazon, and Facebook encountered data problems that didn’t fit the relational model well:

  • Data with unpredictable or varying structure
  • Scales to hundreds of millions of records where JOINs across tables become expensive
  • Data that’s inherently hierarchical (nested JSON) rather than tabular

“NoSQL” is an umbrella term for databases that don’t use the relational model. There are several distinct types:

Document Databases

Store data as JSON-like documents. Each document can have different fields — there’s no fixed schema.

{
  "id": "user_123",
  "name": "Alice",
  "email": "alice@email.com",
  "preferences": {
    "theme": "dark",
    "notifications": true
  },
  "recent_searches": ["running shoes", "backpacks"]
}

A user document can have preferences and search history embedded directly. No JOIN needed — the related data lives in one document.

MongoDB is the dominant document database. Popular for applications where data structure varies by record, or where you’re working with naturally nested data.

Key-Value Stores

The simplest NoSQL type: store a value under a key, retrieve it by key. No schema, no queries, just get and set.

Redis is the most widely used key-value store. It’s extremely fast (stores data in memory) and is commonly used for:

  • Session storage
  • Caching frequently-accessed data
  • Rate limiting
  • Real-time leaderboards

You won’t use Redis as your primary database — it’s a complement to relational or document databases for specific high-speed use cases.

Column-Family Databases

Optimized for reading and writing specific columns across huge numbers of rows. Used for time-series data, analytics, and logs.

Apache Cassandra and Google Bigtable are examples. You’ll encounter these at scale, but rarely need them for typical web applications.

Graph Databases

Store data as nodes and edges — natural for data where relationships are the primary concern. Social networks (who follows whom, who knows whom) and recommendation engines are classic use cases.

Neo4j is the most widely known graph database.

SQL vs NoSQL: When to Use Each

This is one of the most asked questions in software architecture, and the honest answer is that relational databases are the right default for most applications.

Use a relational database (PostgreSQL) when:

  • Your data has clear structure and relationships
  • Data integrity is important (financial data, inventory, user accounts)
  • You need complex queries across multiple types of data
  • You’re not sure yet — SQL gives you the most flexibility

Consider a document database (MongoDB) when:

  • Your data structure varies significantly between records
  • You’re storing naturally nested data (content with arbitrary fields)
  • You need to iterate quickly on a schema that’s still changing

Use Redis alongside your primary database when:

  • You need a cache to reduce database load
  • You need fast session storage
  • You need real-time features (pub/sub messaging, leaderboards)

The “NoSQL is more scalable” argument is mostly a myth for typical web applications. PostgreSQL scales remarkably far. The engineering teams that genuinely need the scale that pushes relational databases to their limits are running systems with hundreds of millions of users.

How Applications Use Databases

Application code rarely writes raw SQL. Instead, most use an ORM (Object-Relational Mapper) — a library that lets you interact with the database using your programming language’s syntax rather than SQL strings.

In Python with SQLAlchemy:

user = User(name="Alice", email="alice@email.com")
session.add(user)
session.commit()

In JavaScript with Prisma:

const user = await prisma.user.create({
  data: { name: 'Alice', email: 'alice@email.com' }
})

The ORM translates these operations into SQL behind the scenes. ORMs are convenient for common operations, though complex queries sometimes require dropping down to raw SQL.


Databases are the foundation everything else in application development is built on. Understanding the difference between relational and NoSQL databases, what SQL actually does, and what ACID guarantees mean puts you in a much better position to make architectural decisions — or to understand the decisions already made in any codebase you work with.

M

Written by Marcus Thorne

Software analysis and cybersecurity tips

A former software engineer, Marcus transitioned into tech journalism to explain complex digital concepts in simple terms.

You Might Also Like