Ten complete, production-shaped database schemas — each with its ER diagram, table structure, relationships and the full SQL. Pick the one closest to your project, study it, then open it in the editor and make it yours.
Customers, products, categories, orders, payments and reviews — the classic online store schema.
1:N
1:N
1:N
1:N
1:N
1:N
1:1
1:N
1:N
N:M
customers
PK id
integer
U email
varchar(255)
full_name
varchar(120)
phone
varchar(30)
created_at
timestamp
addresses
PK id
integer
FK customer_id
integer
line1
varchar(200)
line2
varchar(200)
city
varchar(80)
postal_code
varchar(20)
country
varchar(60)
categories
PK id
integer
U name
varchar(80)
FK parent_id
integer
products
PK id
integer
FK category_id
integer
name
varchar(150)
description
text
price
decimal(10,2)
stock
integer
created_at
timestamp
tags
PK id
integer
U label
varchar(40)
product_tags
PK product_id
integer
PK tag_id
integer
orders
PK id
integer
FK customer_id
integer
status
varchar(20)
total
decimal(10,2)
created_at
timestamp
order_items
PK id
integer
FK order_id
integer
FK product_id
integer
quantity
integer
unit_price
decimal(10,2)
payments
PK id
integer
FK order_id
integer
amount
decimal(10,2)
method
varchar(30)
paid_at
timestamp
reviews
PK id
integer
FK product_id
integer
FK customer_id
integer
rating
integer
comment
text
created_at
timestamp
Users, workspaces, projects, tasks and billing — the backbone of a subscription SaaS.
1:N
1:1
1:1
1:1
1:N
1:N
1:N
1:N
1:N
1:N
users
PK id
integer
U email
varchar(255)
full_name
varchar(120)
password_hash
varchar(255)
created_at
timestamp
workspaces
PK id
integer
name
varchar(120)
FK owner_id
integer
created_at
timestamp
workspace_members
PK workspace_id
integer
PK user_id
integer
role
varchar(20)
subscriptions
PK id
integer
FK workspace_id
integer
plan
varchar(30)
status
varchar(20)
current_period_end
timestamp
invoices
PK id
integer
FK subscription_id
integer
amount
decimal(10,2)
status
varchar(20)
issued_at
timestamp
projects
PK id
integer
FK workspace_id
integer
name
varchar(120)
description
text
created_at
timestamp
tasks
PK id
integer
FK project_id
integer
FK assignee_id
integer
title
varchar(200)
status
varchar(20)
due_date
date
created_at
timestamp
comments
PK id
integer
FK task_id
integer
FK author_id
integer
body
text
created_at
timestamp
Users, posts, categories, comments and tags — a content platform schema with many-to-many tagging.
1:N
1:N
1:N
1:N
N:M
users
PK id
integer
U email
varchar(255)
display_name
varchar(80)
role
varchar(20)
created_at
timestamp
categories
PK id
integer
U name
varchar(80)
U slug
varchar(100)
posts
PK id
integer
FK author_id
integer
FK category_id
integer
title
varchar(200)
U slug
varchar(220)
content
text
published
boolean
published_at
timestamp
created_at
timestamp
tags
PK id
integer
U label
varchar(40)
post_tags
PK post_id
integer
PK tag_id
integer
comments
PK id
integer
FK post_id
integer
FK author_id
integer
body
text
created_at
timestamp
Companies, contacts, deals and activities — how a sales pipeline is modeled.
1:N
1:N
1:N
1:N
1:N
1:N
1:N
1:N
1:N
1:N
1:N
1:N
companies
PK id
integer
name
varchar(150)
website
varchar(200)
industry
varchar(80)
created_at
timestamp
contacts
PK id
integer
FK company_id
integer
first_name
varchar(60)
last_name
varchar(60)
U email
varchar(255)
phone
varchar(30)
users
PK id
integer
U email
varchar(255)
full_name
varchar(120)
deals
PK id
integer
FK company_id
integer
FK contact_id
integer
FK owner_id
integer
title
varchar(150)
amount
decimal(12,2)
stage
varchar(30)
expected_close
date
created_at
timestamp
activities
PK id
integer
FK contact_id
integer
FK deal_id
integer
FK user_id
integer
type
varchar(20)
summary
varchar(255)
occurred_at
timestamp
notes
PK id
integer
FK company_id
integer
FK contact_id
integer
FK user_id
integer
body
text
created_at
timestamp
tasks
PK id
integer
FK deal_id
integer
FK assignee_id
integer
title
varchar(200)
due_date
date
done
boolean
school management database Students, teachers, courses, classes, enrollments and attendance — a school in seven tables.
1:N
1:N
1:N
1:N
1:1
1:1
1:N
1:N
departments
PK id
integer
U name
varchar(100)
teachers
PK id
integer
FK department_id
integer
full_name
varchar(120)
U email
varchar(255)
courses
PK id
integer
FK department_id
integer
U code
varchar(15)
title
varchar(150)
credits
integer
students
PK id
integer
full_name
varchar(120)
U email
varchar(255)
enrolled_at
date
classes
PK id
integer
FK course_id
integer
FK teacher_id
integer
semester
varchar(20)
room
varchar(30)
schedule
varchar(80)
enrollments
PK student_id
integer
PK class_id
integer
grade
decimal(4,2)
attendance
PK id
integer
FK student_id
integer
FK class_id
integer
session_date
date
status
varchar(15)
Hotels, room types, rooms, guests, bookings and payments — a booking engine schema.
1:N
1:N
1:N
1:N
1:1
N:M
hotels
PK id
integer
name
varchar(150)
city
varchar(80)
country
varchar(60)
star_rating
integer
amenities
PK id
integer
U label
varchar(60)
room_types
PK id
integer
FK hotel_id
integer
name
varchar(80)
capacity
integer
base_price
decimal(10,2)
room_type_amenities
PK room_type_id
integer
PK amenity_id
integer
rooms
PK id
integer
FK room_type_id
integer
room_number
varchar(10)
floor
integer
guests
PK id
integer
U email
varchar(255)
full_name
varchar(120)
phone
varchar(30)
bookings
PK id
integer
FK room_id
integer
FK guest_id
integer
check_in
date
check_out
date
total_price
decimal(10,2)
status
varchar(20)
created_at
timestamp
payments
PK id
integer
FK booking_id
integer
amount
decimal(10,2)
method
varchar(30)
paid_at
timestamp
Warehouses, suppliers, products, stock levels and purchase orders — tracking goods end to end.
1:N
1:1
1:1
1:N
1:N
1:N
1:N
warehouses
PK id
integer
name
varchar(100)
location
varchar(150)
suppliers
PK id
integer
name
varchar(150)
U email
varchar(255)
phone
varchar(30)
products
PK id
integer
FK supplier_id
integer
U sku
varchar(40)
name
varchar(150)
unit_price
decimal(10,2)
stock_levels
PK warehouse_id
integer
PK product_id
integer
quantity
integer
purchase_orders
PK id
integer
FK supplier_id
integer
FK warehouse_id
integer
status
varchar(20)
ordered_at
timestamp
purchase_order_items
PK id
integer
FK purchase_order_id
integer
FK product_id
integer
quantity
integer
unit_cost
decimal(10,2)
project management database Organizations, projects, members, tasks, labels and sprints — a team tool schema.
1:N
1:1
1:1
1:N
1:N
1:N
1:N
1:N
1:N
1:N
N:M
organizations
PK id
integer
name
varchar(120)
created_at
timestamp
users
PK id
integer
U email
varchar(255)
full_name
varchar(120)
projects
PK id
integer
FK organization_id
integer
name
varchar(120)
description
text
created_at
timestamp
project_members
PK project_id
integer
PK user_id
integer
role
varchar(20)
sprints
PK id
integer
FK project_id
integer
name
varchar(80)
starts_on
date
ends_on
date
tasks
PK id
integer
FK project_id
integer
FK sprint_id
integer
FK assignee_id
integer
title
varchar(200)
status
varchar(20)
story_points
integer
due_date
date
labels
PK id
integer
FK project_id
integer
label
varchar(40)
color
varchar(9)
task_labels
PK task_id
integer
PK label_id
integer
comments
PK id
integer
FK task_id
integer
FK author_id
integer
body
text
created_at
timestamp
Users, posts, comments, likes, follows and private messages — the social graph schema.
1:N
1:N
1:N
1:1
1:1
1:1
1:1
1:N
1:N
1:N
N:M
users
PK id
integer
U username
varchar(30)
U email
varchar(255)
bio
text
created_at
timestamp
posts
PK id
integer
FK author_id
integer
content
text
created_at
timestamp
comments
PK id
integer
FK post_id
integer
FK author_id
integer
body
text
created_at
timestamp
likes
PK user_id
integer
PK post_id
integer
created_at
timestamp
follows
PK follower_id
integer
PK followee_id
integer
created_at
timestamp
conversations
PK id
integer
created_at
timestamp
conversation_participants
PK conversation_id
integer
PK user_id
integer
messages
PK id
integer
FK conversation_id
integer
FK sender_id
integer
body
text
sent_at
timestamp
notifications
PK id
integer
FK user_id
integer
type
varchar(30)
payload
json
read_at
timestamp
created_at
timestamp
restaurant ordering database Restaurants, menu items, customers, orders and reservations — from menu to kitchen ticket.
1:N
1:N
1:N
1:N
1:N
1:N
1:N
1:N
1:N
restaurants
PK id
integer
name
varchar(120)
address
varchar(200)
phone
varchar(30)
menu_categories
PK id
integer
FK restaurant_id
integer
name
varchar(80)
menu_items
PK id
integer
FK menu_category_id
integer
name
varchar(120)
description
text
price
decimal(8,2)
available
boolean
customers
PK id
integer
U email
varchar(255)
full_name
varchar(120)
phone
varchar(30)
orders
PK id
integer
FK restaurant_id
integer
FK customer_id
integer
order_type
varchar(15)
status
varchar(20)
placed_at
timestamp
order_items
PK id
integer
FK order_id
integer
FK menu_item_id
integer
quantity
integer
unit_price
decimal(8,2)
reservations
PK id
integer
FK restaurant_id
integer
FK customer_id
integer
reserved_at
timestamp
party_size
integer
status
varchar(20)
staff
PK id
integer
FK restaurant_id
integer
full_name
varchar(120)
role
varchar(30)
library management database Authors, books, members, loans and fines — catalog and circulation for a lending library.
1:N
1:N
1:N
1:1
N:M
categories
PK id
integer
U name
varchar(80)
authors
PK id
integer
full_name
varchar(120)
country
varchar(60)
books
PK id
integer
FK category_id
integer
U isbn
varchar(20)
title
varchar(200)
published_year
integer
total_copies
integer
book_authors
PK book_id
integer
PK author_id
integer
members
PK id
integer
U email
varchar(255)
full_name
varchar(120)
joined_at
date
status
varchar(20)
loans
PK id
integer
FK book_id
integer
FK member_id
integer
borrowed_at
timestamp
due_date
date
returned_at
timestamp
fines
PK id
integer
FK loan_id
integer
amount
decimal(8,2)
reason
varchar(120)
issued_at
timestamp
paid_at
timestamp
hospital management database Departments, doctors, patients, appointments, prescriptions, admissions and invoices.
1:N
1:N
1:N
1:1
1:N
1:N
1:N
1:N
1:1
departments
PK id
integer
U name
varchar(100)
floor
integer
doctors
PK id
integer
FK department_id
integer
full_name
varchar(120)
speciality
varchar(80)
U email
varchar(255)
patients
PK id
integer
full_name
varchar(120)
date_of_birth
date
U email
varchar(255)
phone
varchar(30)
appointments
PK id
integer
FK patient_id
integer
FK doctor_id
integer
scheduled_for
timestamp
status
varchar(20)
notes
text
medications
PK id
integer
U name
varchar(120)
strength
varchar(40)
prescriptions
PK id
integer
FK appointment_id
integer
issued_at
timestamp
notes
text
prescription_items
PK id
integer
FK prescription_id
integer
FK medication_id
integer
dosage
varchar(80)
quantity
integer
admissions
PK id
integer
FK patient_id
integer
FK doctor_id
integer
room_number
varchar(10)
bed_number
varchar(10)
admitted_at
timestamp
discharged_at
timestamp
daily_rate
decimal(10,2)
invoices
PK id
integer
FK admission_id
integer
amount
decimal(12,2)
status
varchar(20)
issued_at
timestamp
Branches, customers, accounts, holders, transactions, cards and transfers — a retail bank core.
1:N
1:N
1:1
1:1
1:N
1:1
1:N
1:N
branches
PK id
integer
name
varchar(120)
city
varchar(80)
opened_on
date
customers
PK id
integer
full_name
varchar(120)
U email
varchar(255)
phone
varchar(30)
created_at
timestamp
account_types
PK id
integer
U name
varchar(60)
interest_rate
decimal(5,2)
accounts
PK id
integer
FK branch_id
integer
FK account_type_id
integer
U account_number
varchar(20)
opened_at
date
balance
decimal(14,2)
status
varchar(20)
account_holders
PK account_id
integer
PK customer_id
integer
holder_role
varchar(20)
transactions
PK id
integer
FK account_id
integer
direction
varchar(6)
amount
decimal(14,2)
balance_after
decimal(14,2)
description
varchar(200)
occurred_at
timestamp
cards
PK id
integer
FK account_id
integer
U card_number
varchar(20)
expiry_date
date
status
varchar(20)
transfers
PK id
integer
FK from_account_id
integer
FK to_account_id
integer
amount
decimal(14,2)
created_at
timestamp
Members, plans, subscriptions, trainers, classes, sessions, bookings and check-ins.
1:N
1:N
1:N
1:N
1:N
1:N
1:N
1:N
membership_plans
PK id
integer
U name
varchar(80)
price
decimal(8,2)
duration_days
integer
members
PK id
integer
full_name
varchar(120)
U email
varchar(255)
phone
varchar(30)
joined_at
date
subscriptions
PK id
integer
FK member_id
integer
FK plan_id
integer
starts_on
date
ends_on
date
status
varchar(20)
trainers
PK id
integer
full_name
varchar(120)
U email
varchar(255)
specialty
varchar(80)
classes
PK id
integer
FK trainer_id
integer
name
varchar(120)
description
text
capacity
integer
class_sessions
PK id
integer
FK class_id
integer
starts_at
timestamp
room
varchar(40)
duration_minutes
integer
bookings
PK id
integer
FK session_id
integer
FK member_id
integer
booked_at
timestamp
status
varchar(20)
check_ins
PK id
integer
FK member_id
integer
FK session_id
integer
checked_in_at
timestamp
Restaurants, menus, customers, addresses, couriers, orders and deliveries — from basket to doorstep.
1:N
1:N
1:N
1:N
1:N
1:N
1:N
1:N
1:1
1:N
restaurants
PK id
integer
name
varchar(120)
city
varchar(80)
phone
varchar(30)
menu_categories
PK id
integer
FK restaurant_id
integer
name
varchar(80)
display_order
integer
menu_items
PK id
integer
FK menu_category_id
integer
name
varchar(120)
description
text
price
decimal(8,2)
available
boolean
customers
PK id
integer
full_name
varchar(120)
U email
varchar(255)
phone
varchar(30)
addresses
PK id
integer
FK customer_id
integer
line1
varchar(200)
city
varchar(80)
postal_code
varchar(20)
is_default
boolean
couriers
PK id
integer
full_name
varchar(120)
phone
varchar(30)
vehicle_type
varchar(20)
active
boolean
orders
PK id
integer
FK customer_id
integer
FK restaurant_id
integer
FK address_id
integer
status
varchar(20)
total
decimal(10,2)
placed_at
timestamp
order_items
PK id
integer
FK order_id
integer
FK menu_item_id
integer
item_name
varchar(120)
quantity
integer
unit_price
decimal(8,2)
deliveries
PK id
integer
FK order_id
integer
FK courier_id
integer
status
varchar(20)
picked_up_at
timestamp
delivered_at
timestamp
Departments, employees, job titles, payroll runs, payslips, leave and attendance.
1:N
1:N
1:N
1:N
1:N
1:N
1:N
departments
PK id
integer
U name
varchar(100)
job_titles
PK id
integer
U title
varchar(100)
min_salary
decimal(12,2)
employees
PK id
integer
FK department_id
integer
FK job_title_id
integer
FK manager_id
integer
full_name
varchar(120)
U email
varchar(255)
hired_on
date
status
varchar(20)
payroll_runs
PK id
integer
period_start
date
period_end
date
status
varchar(20)
payslips
PK id
integer
FK payroll_run_id
integer
FK employee_id
integer
gross_pay
decimal(12,2)
deductions
decimal(12,2)
net_pay
decimal(12,2)
leave_requests
PK id
integer
FK employee_id
integer
leave_type
varchar(40)
starts_on
date
ends_on
date
status
varchar(20)
attendance
PK id
integer
FK employee_id
integer
work_date
date
hours_worked
decimal(5,2)