Drizzle ERD Generator
Generate Mermaid ERD diagrams from Drizzle ORM schema files.
When to Use
- Database schema visualization needed
- Understanding table relationships
- Documentation for DB structure
- PR review of schema changes
Process
- Find schema files - Locate Drizzle table definitions (usually
schema.tsortables.ts) - Parse tables - Extract table names, columns, types, and constraints
- Identify relations - Find
.references()calls and relations definitions - Generate Mermaid - Output ERD in Mermaid syntax
Mermaid ERD Syntax
erDiagram
TABLE_NAME {
type column_name PK "Primary Key"
type column_name FK "Foreign Key"
type column_name UK "Unique"
type column_name "nullable"
}
TABLE_A ||--o{ TABLE_B : "has many"
TABLE_A ||--|| TABLE_C : "has one"
TABLE_A }o--|| TABLE_D : "belongs to"
Relationship Notation
| Symbol | Meaning |
|---|---|
|| |
Exactly one |
o| |
Zero or one |
}o |
Zero or many |
}| |
One or many |
Type Mapping
| Drizzle | Mermaid |
|---|---|
text() |
string |
integer() |
int |
real() |
float |
blob() |
blob |
boolean mode |
boolean |
Output Template
erDiagram
%% Master Tables
%% Transaction Tables
%% Snapshot Tables
%% Relations
Example
From Drizzle:
export const users = sqliteTable("users", {
id: integer("id").primaryKey(),
name: text("name").notNull(),
email: text("email").unique(),
});
export const posts = sqliteTable("posts", {
id: integer("id").primaryKey(),
userId: integer("user_id").references(() => users.id),
title: text("title").notNull(),
});
To Mermaid:
erDiagram
users {
int id PK
string name
string email UK
}
posts {
int id PK
int user_id FK
string title
}
users ||--o{ posts : "has many"
Quick Reference
Column Markers
PK- primaryKey()FK- .references()UK- .unique()- Add "nullable" comment if no .notNull()
Grouping
Group related tables with Mermaid comments:
%% === Master Tables ===
%% === Transaction Tables ===