Skip to main content

Command Palette

Search for a command to run...

Databases & ORMs for MERN Developers

Updated
13 min readView as Markdown

Understanding SQL, NoSQL, Prisma, Drizzle, Migrations, and Data Modeling

Target Audience: MERN Developers Prerequisites: Basic Backend Development Goal: Understand why applications need databases, how data is modeled, and how ORMs like Prisma and Drizzle simplify database development.


Where Does Application Data Live After a User Closes the App?

Imagine building a login application.

A user registers.

Username: Bharat

Email: bharat@gmail.com

Password: ********

The data exists while the application is running.

Now the user closes the browser.

Where did that information go?

If it only existed in JavaScript variables,

const user = {
    name: "Bharat"
};

it disappears as soon as the application stops.

Variables live in memory (RAM), and RAM is temporary.

Modern applications need permanent storage.

That's where databases come in.


Why Applications Need Databases

A database stores information permanently so it can be retrieved later.

Without databases,

every restart would erase all application data.

Examples:

  • Users

  • Products

  • Orders

  • Payments

  • Blog Posts

  • Comments

  • Messages

  • Notifications

  • Reviews

Databases are the long-term memory of an application.


Structured vs Unstructured Data

Structured Data

Organized into well-defined fields.

Example

User

Name

Email

Phone

Role

Easy to search, sort, and validate.


Unstructured Data

No fixed format.

Examples

  • Images

  • Videos

  • PDFs

  • Audio

  • Documents

Usually stored separately, while the database stores references to them.


Databases in Everyday Applications

E-Commerce

Users

Products

Orders

Payments

Reviews

Social Media

Users

Posts

Comments

Likes

Followers

Messages

Blogging Platform

Users

Articles

Categories

Tags

Comments

Every modern application depends on a database.


SQL vs NoSQL Databases

There are two major database families.

SQL

↓

Relational Databases
NoSQL

↓

Non-Relational Databases

Neither is universally better.

Each solves different problems.


What is SQL?

SQL stands for Structured Query Language.

SQL databases store data in tables.

Example

Users Table

ID Name Email
1 Bharat bharat@gmail.com
2 Alex alex@gmail.com

Products Table

ID Name Price
1 Laptop 1200
2 Phone 700

Tables are connected through relationships.


Characteristics of SQL Databases

  • Tables

  • Rows

  • Columns

  • Fixed schema

  • Relationships

  • ACID transactions

  • Strong consistency

Examples:

  • PostgreSQL

  • MySQL

  • SQLite

  • Microsoft SQL Server

  • Oracle Database


What is NoSQL?

NoSQL databases don't require a fixed table structure.

Many store data as documents.

Example

{
    "name": "Bharat",
    "email": "bharat@gmail.com",
    "skills": [
        "React",
        "Node",
        "MongoDB"
    ]
}

Each document can have different fields.


Characteristics of NoSQL

  • Flexible schema

  • JSON-like documents

  • Easy horizontal scaling

  • Fast development

  • Great for evolving data

Examples:

  • MongoDB

  • CouchDB

  • Firebase Firestore

  • DynamoDB


SQL vs NoSQL

SQL NoSQL
Tables Documents
Fixed Schema Flexible Schema
Strong Relationships Embedded Data
Structured Data Semi-Structured Data
ACID Transactions High Scalability
Excellent for complex queries Excellent for rapidly changing data

When Should You Choose SQL?

Choose SQL when:

  • Financial systems

  • Banking

  • Inventory

  • Booking systems

  • ERP software

  • Analytics

  • Complex relationships

SQL excels when data integrity is critical.


When Should You Choose NoSQL?

Choose NoSQL when:

  • Social media

  • Chat systems

  • CMS platforms

  • Rapid prototyping

  • Flexible data

  • Event logging

  • IoT applications


The Problem with Raw Database Queries

Imagine writing SQL manually.

SELECT *
FROM users
WHERE email='abc@gmail.com';

Now imagine doing this hundreds of times.

Every project needs:

  • CRUD operations

  • Filtering

  • Searching

  • Pagination

  • Relationships

Writing everything manually becomes repetitive.


Problems with Raw Queries

1. Repetitive Code

The same SQL patterns appear repeatedly.


2. Security Risks

Improper string concatenation can lead to SQL Injection.

Bad

SELECT * FROM users
WHERE email=' " + email + " ';

Parameterized queries help prevent this, but developers must remember to use them correctly.


3. Hard Maintenance

Changing a table name or column may require updating many queries.


4. Difficult Refactoring

Renaming a field often means manually finding every query.


5. Scaling

Large applications may contain thousands of SQL statements.

Managing them becomes difficult.


What is an ORM?

ORM stands for Object Relational Mapping.

An ORM lets developers interact with the database using programming language objects instead of writing SQL for every operation.

Think of it as a translator.

Application

↓

ORM

↓

SQL Database

Why Do ORMs Exist?

Developers think in objects.

Databases think in tables.

ORMs connect these two worlds.

Example

User Object

↓

Users Table

Benefits of ORMs

  • Less boilerplate

  • Cleaner code

  • Better maintainability

  • Type safety (in modern ORMs)

  • Easier relationships

  • Migration tools

  • Productivity improvements


Tradeoffs of ORMs

ORMS are not magic.

Tradeoffs include:

  • Additional abstraction

  • Learning curve

  • Less control over generated SQL

  • Some complex queries may still require raw SQL

Understanding SQL remains important.


Understanding Prisma

Prisma is a next-generation ORM focused on developer experience and type safety.

Its philosophy is Schema-First Development.


Schema-First Development

Instead of creating tables manually,

you define your data model in a schema.

Example

User

↓

Fields

↓

Relationships

↓

Generate Client

The schema becomes the source of truth.


Type-Safe Database Access

Prisma generates a client with full TypeScript support.

Benefits:

  • Autocomplete

  • Compile-time error detection

  • Safer queries

  • Better refactoring

Even JavaScript developers benefit from clearer APIs and tooling.


Prisma Migrations

Prisma includes migration tooling.

Workflow

Schema Changes

↓

Generate Migration

↓

Apply Migration

↓

Database Updated

Prisma Ecosystem

Includes:

  • Prisma Client

  • Prisma Migrate

  • Prisma Studio

  • Schema Validator

Developer experience is one of Prisma's biggest strengths.


Understanding Drizzle

Drizzle is a modern TypeScript ORM with a SQL-first philosophy.

Instead of hiding SQL,

Drizzle embraces it.


SQL-First Philosophy

Drizzle encourages developers to think in SQL while still benefiting from type safety.

This makes it attractive for developers who want more control over queries.


Lightweight Architecture

Drizzle is:

  • Lightweight

  • Minimal

  • Fast

  • Close to SQL

  • Highly composable

It adds very little abstraction.


Type Safety

Like Prisma,

Drizzle provides excellent type inference,

but without relying on a schema generation step.


Drizzle vs Traditional ORMs

Traditional ORM

Application

↓

Heavy Abstraction

↓

Database

Drizzle

Application

↓

Thin SQL Layer

↓

Database

More transparency, less hidden behaviour.


Prisma vs Drizzle

Prisma Drizzle
Schema-first SQL-first
Excellent DX Excellent SQL control
Rich tooling Lightweight
Generated Client Direct TypeScript API
Opinionated Flexible
Beginner-friendly Better for SQL-oriented developers

Learning Curve

Prisma

  • Easier for beginners

  • Less SQL knowledge required

  • Excellent documentation

Drizzle

  • Easier if you already know SQL

  • More explicit

  • Greater control


Performance Considerations

In most applications,

the database itself is a larger performance factor than the ORM.

Choose the ORM that best fits your team and workflow rather than expecting dramatic speed differences.


Migration Workflow

Prisma

Schema

↓

Migration

↓

Database

Drizzle

Schema Definition

↓

Migration

↓

Database

Both support version-controlled schema changes.


Ecosystem Maturity

Prisma has:

  • Larger community

  • More tutorials

  • Rich tooling

Drizzle has:

  • Growing ecosystem

  • Modern architecture

  • Increasing industry adoption


Production Use Cases

Prisma

Good for:

  • Startups

  • SaaS

  • Dashboards

  • Internal tools

  • Teams focused on rapid development


Drizzle

Good for:

  • SQL-heavy applications

  • Performance-conscious teams

  • Developers comfortable with relational databases


Database Migrations

Applications evolve.

Today

Users

Name

Email

Tomorrow

Users

Name

Email

Phone

Avatar

The database structure changes over time.

These changes are called schema evolution.


Why Migrations Are Needed

Instead of editing production databases manually,

developers write migrations.

Benefits:

  • Safe updates

  • Version history

  • Repeatable deployments

  • Team collaboration


Migration Workflow

Modify Schema

↓

Create Migration

↓

Review

↓

Apply

↓

Database Updated

Each migration becomes part of the project's history.


Common Migration Challenges

  • Data loss

  • Renaming columns

  • Backward compatibility

  • Production downtime

  • Rollbacks

Planning migrations carefully is essential.


Designing Data Models

Before writing code,

think about the real-world entities.

Examples

User

Product

Order

Review

Category

These become database models.


Relationships

Real-world data is connected.

Databases model these connections using relationships.


One-to-One

Example

User

↓

Profile

One user has one profile.

One profile belongs to one user.

User

1

↓

1

Profile

One-to-Many

Example

User

↓

Posts

One user can create many posts.

Each post belongs to one user.

User

1

↓

∞

Posts

Many-to-Many

Example

Students

↓

Courses

A student can enrol in many courses.

A course can contain many students.

Students

∞

↔

∞

Courses

Usually implemented with a junction (join) table.


E-Commerce Relationship Example

User

↓

Orders

↓

Order Items

↓

Products

Products can appear in many orders,

and each order can contain many products.


Choosing the Right Tool

The "best" database or ORM depends on your project.


Startup Projects

Priorities:

  • Fast development

  • Maintainability

  • Small team

A productive ORM can accelerate development.


Enterprise Applications

Priorities:

  • Reliability

  • Scalability

  • Team standards

  • Long-term maintenance

Architecture and consistency become more important than individual preferences.


Team Experience

If the team is comfortable with SQL,

a SQL-first approach may feel natural.

If the team values rapid onboarding and rich tooling,

a schema-first ORM may be a better fit.


Long-Term Maintenance

Consider:

  • Documentation

  • Community support

  • Migration tooling

  • Type safety

  • Ease of refactoring

These factors often matter more than small performance differences.


Performance Requirements

Performance depends on many factors:

  • Database design

  • Indexing

  • Query quality

  • Network latency

  • Caching

  • Hardware

The ORM is only one part of the overall system.


Architectural Mindset

Think in this order:

Real-World Problem

↓

Entities

↓

Relationships

↓

Database Design

↓

Queries

↓

ORM

An ORM is a productivity tool, not a substitute for good database design.


Mental Model

Application

↓

Objects / Models

↓

ORM

↓

SQL Queries

↓

Database

↓

Stored Data

The ORM translates your application logic into database operations while helping keep your code organised.


Interview Questions

Why do applications need databases?

To store data permanently so it remains available after the application stops running.


What is the difference between SQL and NoSQL?

SQL databases store structured, relational data in tables with fixed schemas. NoSQL databases typically store flexible document-based or other non-relational data structures.


What is an ORM?

An Object Relational Mapping tool that maps programming language objects to database records, allowing developers to work with data using code instead of writing raw queries for every operation.


Why do ORMs exist?

To improve developer productivity, reduce boilerplate, simplify relationships, provide safer abstractions, and often add features such as migrations and type safety.


What are the tradeoffs of ORMs?

They add abstraction, may generate less optimal queries in some cases, and do not eliminate the need to understand SQL and database fundamentals.


What is Prisma?

A schema-first ORM focused on developer experience, type safety, migrations, and a generated database client.


What is Drizzle?

A lightweight, SQL-first TypeScript ORM that stays close to SQL while providing strong type safety and minimal abstraction.


What are database migrations?

Version-controlled changes to a database schema that allow teams to evolve the database structure safely over time.


Explain One-to-One, One-to-Many, and Many-to-Many relationships.

  • One-to-One: One record relates to exactly one other record (User ↔ Profile).

  • One-to-Many: One record relates to many others (User → Posts).

  • Many-to-Many: Many records relate to many others (Students ↔ Courses).


Prisma or Drizzle—which is better?

Neither is universally better. Prisma emphasises developer experience and tooling, while Drizzle emphasises SQL control and lightweight architecture. The right choice depends on the project's requirements and the team's experience.


Key Takeaways

  • Databases provide permanent storage for application data, enabling users, products, orders, and other information to persist beyond a single session.

  • SQL databases organise structured data into related tables, while NoSQL databases offer flexible schemas and document-oriented storage.

  • Writing raw database queries is powerful but can become repetitive, harder to maintain, and more error-prone in large applications.

  • ORMs bridge the gap between application objects and database records, improving productivity without replacing the need for database knowledge.

  • Prisma follows a schema-first approach with excellent tooling, migrations, and developer experience.

  • Drizzle follows a SQL-first philosophy, offering lightweight abstractions and greater control over queries.

  • Database migrations enable safe, version-controlled evolution of database schemas as applications grow.

  • Good database design begins with identifying real-world entities and modelling their relationships effectively.

  • Choosing a database or ORM should be based on project requirements, team expertise, and long-term maintainability—not on trends.

  • Strong architectural thinking and a solid understanding of database fundamentals are more valuable than mastering any specific ORM.