DbSchema Features

One model your team designs, documents, queries & deploys — across PostgreSQL, MySQL, MongoDB, SQL Server, Oracle & 100+ databases.

Everything you can do from one model

DbSchema reads your database once and keeps a model of it. Design, documentation, data and deployment all work from that same model - no second copy to keep in sync.

Trusted by teams at

See Inside Any of 100+ SQL and NoSQL Databases

All the databases your company uses, in one tool. Connect, and DbSchema reads the schema and draws it as a diagram - cloud, on-premise, or behind an SSH tunnel. It downloads the JDBC driver for you.

Visual Database Design and ER Diagrams

A schema drawn on a whiteboard stays on the whiteboard. Design it in DbSchema and the same model gives you the SQL, the documentation and the deployment - with everyone following the same naming and type rules.

Diagrams

Give every subsystem its own diagram

  • A new developer sees the ten tables their feature touches, not all four hundred.
  • One diagram per subsystem, showing tables, columns, keys and relationships.
Learn more about Diagrams
Logical design

Design once, deploy to any database

  • Add a second database engine without designing twice.
  • One model generates the schema for PostgreSQL, MySQL, MongoDB or any supported engine, with your naming and type rules.
Learn more about Logical Design
DDL import

Bring a legacy schema under design

  • An old DDL file becomes a model your team can read and change.
  • Import the SQL, edit it visually, export clean DDL.
Learn more about DDL Import

Built for the Databases That Actually Matter

Thousands of tables. Behind a firewall. Changed by several people who never meet. That is the database that needs careful design, and it is the one DbSchema is built for.

Large schemas

Thousands of tables, still reviewable

  • Find your way around a schema with thousands of tables.
  • Group related tables, auto-arrange the layout, keep one diagram per subsystem.
Learn more about Diagrams
Secure connections

Your database never leaves its network

  • No cloud account, nothing uploaded, no data-processing agreement.
  • Connect over SSL/TLS or an SSH tunnel. The model is a file on your own machine or Git server.
Read about Secure Connections
Git workflow

Review a schema change like a pull request

  • Schema changes get reviewed like code, before they ship.
  • Commit the model to Git, diff and merge branches, and share HTML or PDF documentation with everyone else.
See Git Workflow

Database Documentation, So the Schema Outlives the People Who Built It

Right now, one person can explain your schema. If they leave, that knowledge goes with them. Publish the schema once as interactive HTML and anyone can read it - new developers, analysts, auditors - without asking.

U { } [ ] Read column and table comments by hovering the columns and tables. Zoom with CTRL+whell mouse button, pan by dragging the diagram with the right-mouse button DbSchema Database Designer MySQL Diagram Read schema comments as mouse-over tooltips DbSchema.com © 2026 Wise CodersDbSchema is an universal database designer. DbSchema has a free Community Edition. Group_ Group_ 🔗 Foreign Key fk_orders_customers orders ref customers ( customer_id ) 🔗 Foreign Key fk_orders_customers orders ref customers ( customer_id ) fk_orders_customers 🔗 Foreign Key fk_reviews_customers reviews ref customers ( customer_id ) 🔗 Foreign Key fk_reviews_customers reviews ref customers ( customer_id ) fk_reviews_customers 🔗 Foreign Key fk_reviews_sales reviews ref sales ( customer_id ) 🔗 Foreign Key fk_reviews_sales reviews ref sales ( customer_id ) fk_reviews_sales 🔗 Foreign Key fk_employees_employee_benefits employees ref employee_benefits ( employee_id ) 🔗 Foreign Key fk_employees_employee_benefits employees ref employee_benefits ( employee_id ) fk_employees_employee_benefits 🔗 Foreign Key fk_employees_salaries employees ref salaries ( salary ) 🔗 Foreign Key fk_employees_salaries employees ref salaries ( salary ) fk_employees_salaries ordersTable company.orders 🔑 Pk pk_orders ( order_id ) order_id⧉ order_id * int ↙ order_items( order_id ) ↙ transactions( order_id ) INT🔗 Referred by order_items ( order_id ) Referred by transactions ( order_id ) customer_id⧉ customer_id int ↗ customers( customer_id ) INT🔗 References customers ( customer_id ) order_date⧉ order_date date DATE total_amount⧉ total_amount decimal(15,2) DECIMAL(15,2) status⧉ status varchar(50) VARCHAR(50) shipping_address⧉ shipping_address varchar(255) VARCHAR(255) salesTable company.sales 🔑 Pk pk_sales ( sales_id ) sales_id⧉ sales_id * int INT price⧉ price decimal(10,0) DECIMAL(10,0) discount⧉ discount decimal(10,0) DECIMAL(10,0) 🔍 fk_sales_customers ( customer_id ) customer_id⧉ customer_id int ↗ customers( customer_id ) ↙ reviews( customer_id ) INT🔗 References customers ( customer_id ) Referred by reviews ( customer_id ) reviewsTable company.reviews 🔑 Pk pk_reviews ( review_id ) review_id⧉ review_id * int INT 🔍 Unq unq_reviews_product_id ( product_id ) product_id⧉ product_id int INT 🔍 fk_reviews_customers ( customer_id ) customer_id⧉ customer_id int ↗ customers( customer_id ) ↗ sales( customer_id ) INT🔗 References customers ( customer_id ) References sales ( customer_id ) rating⧉ rating int INT review_date⧉ review_date date DATE comments⧉ comments text TEXT employee_benefitsTable company.employee_benefits 🔑 Pk pk_employee_benefits ( benefit_id ) benefit_id⧉ benefit_id * int INT 🔍 Unq unq_employee_benefits_employee_id ( employee_id ) employee_id⧉ employee_id int ↙ employees( employee_id ) INT🔗 Referred by employees ( employee_id ) benefit_type⧉ benefit_type varchar(50) VARCHAR(50) start_date⧉ start_date date DATE end_date⧉ end_date date DATE employee_projectsTable company.employee_projects 🔑 Pk pk_employee_projects ( employee_id, project_id ) employee_id⧉ employee_id * int INT 🔑 Pk pk_employee_projects ( employee_id, project_id ) 🔍 Unq unq_employee_projects_project_id ( project_id ) project_id⧉ project_id * int ↙ employees( employee_id ) ↙ projects( project_id ) INT🔗 Referred by employees ( employee_id -> project_id ) Referred by projects ( project_id ) role⧉ role varchar(100) VARCHAR(100) start_date⧉ start_date date DATE end_date⧉ end_date date DATE customersTable company.customers 🔑 Pk pk_customers ( customer_id ) customer_id⧉ customer_id * int ↙ orders( customer_id ) ↙ payment_methods( customer_id ) ↙ reviews( customer_id ) ↙ salaries( salary_id ) ↙ sales( customer_id ) INT🔗 Referred by orders ( customer_id ) Referred by payment_methods ( customer_id ) Referred by reviews ( customer_id ) Referred by salaries ( salary_id -> customer_id ) Referred by sales ( customer_id ) first_name⧉ first_name varchar(50) VARCHAR(50) last_name⧉ last_name varchar(50) VARCHAR(50) email⧉ email varchar(100) VARCHAR(100) phone_number⧉ phone_number varchar(20) VARCHAR(20) address⧉ address varchar(255) VARCHAR(255) registration_date⧉ registration_date date DATE employeesTable company.employees ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ This field contains personal informations 🔑 Pk pk_employees ( employee_id ) employee_id⧉ employee_id * int ↗ employee_benefits( employee_id ) ↗ employee_projects( project_id ) ↙ attendance( employee_id ) INT🔗 References employee_benefits ( employee_id ) References employee_projects ( employee_id -> project_id ) Referred by attendance ( employee_id ) 🔍 Unq unq_employees_first_name ( first_name ) first_name⧉ first_name varchar(50) VARCHAR(50) last_name⧉ last_name varchar(50) VARCHAR(50) email⧉ email varchar(100) VARCHAR(100) hire_date⧉ hire_date date DATE 🔍 Unq unq_employees_salary ( salary ) salary⧉ salary decimal(10,2) ↗ salaries( salary ) ⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯⎯ This column contains personal informations. DECIMAL(10,2)🔗 References salaries ( salary ) department_id⧉ department_id int INT manager_id⧉ manager_id int INT salariesTable company.salaries 🔑 Pk pk_salaries ( salary_id ) salary_id⧉ salary_id * int ↗ customers( customer_id ) ↗ payment_methods( payment_method_id ) INT🔗 References customers ( salary_id -> customer_id ) References payment_methods ( salary_id -> payment_method_id ) 🔍 Unq unq_salaries_employee_id ( employee_id ) employee_id⧉ employee_id int INT 🔍 Unq unq_salaries_salary ( salary ) salary⧉ salary decimal(10,2) ↙ employees( salary ) DECIMAL(10,2)🔗 Referred by employees ( salary ) 🔍 Unq unq_salaries_effective_date ( effective_date ) effective_date⧉ effective_date date ↙ contracts( start_date ) DATE🔗 Referred by contracts ( start_date -> effective_date ) bonus⧉ bonus decimal(10,2) DECIMAL(10,2) 🔍 Unq unq_salaries_customer_id ( customer_id ) customer_id⧉ customer_id int INT
HTML5 documentation

Onboarding without a senior developer

  • New developers, analysts and auditors read the schema themselves.
  • One HTML5 package with diagrams, columns, types and comments. Opens in any browser.
Learn more about Documentation
Git integration

Commit the schema with the code

  • The schema gets a history and an author, like the rest of the project.
  • Commit, push, diff and merge the model from inside DbSchema, in your existing repository.
Learn more about Git Integration
Floating licenses

Licenses that follow the person, not the machine

  • Install DbSchema on every machine, pay only for the people using it.
  • Runs on your own network, for machines with no internet access.
Learn more about Floating Licensing

Write SQL and Explore Data Without Memorizing the Schema

Analysts and new developers stop asking the one person who knows how the tables join. DbSchema already knows the relationships - follow them, build the query by dragging, or write SQL with autocomplete that knows your schema.

Explore data and build SQL queries across SQL and NoSQL databases
Data explorer

Let analysts answer their own questions

  • Follow a customer to their orders and invoices without writing a join.
  • Uses the real foreign keys, or virtual ones you define.
Learn more about Data Explorer
SQL editor

Write SQL with the schema in front of you

  • Write correct SQL against a schema you did not design.
  • Autocomplete that knows your tables and columns. Edit results inline, export to CSV, Excel or JSON.
Learn more about SQL Editor
Query builder

Get the query right the first time

  • The joins come from the model, not from memory.
  • Drag tables, joins and filters into place, then read the SQL before it runs.
Learn more about Query Builder

Never Deploy a Schema Change Nobody Reviewed

Production drifts. Somebody added a column by hand in March and told nobody. DbSchema shows exactly how each environment differs from the model, statement by statement, and applies only what someone approved.

Compare and Synchronize the Design Model with the Database
Schema compare

See every difference before anything changes

  • Spot the drift between development, test and production early.
  • Apply only the approved changes, or pull the database back into the model.
Learn more about Schema Sync
Deployment

Move one reviewed change through every environment

  • The change that passed test is the one that reaches production.
  • The same diff at every stage, with the SQL visible before it runs.
Learn more about Deployment Workflows
Migration scripts

Ship schema changes as reviewable SQL

  • The DBA gets a script to review instead of a request to interpret.
  • Diff two model versions or two environments, and get the migration in the target dialect.
Learn more about Migration Scripts

The Jobs Your Team Keeps Doing By Hand

Filling a test database. Regenerating documentation after every change. Finding what is locking production. Each takes someone twenty minutes every week - or runs on a schedule and takes nobody any time at all.

Execute Automation Scripts using DbSchema
Test data

Test against data that behaves like production

  • Realistic test data, instead of test1, test2, asdf.
  • Reusable patterns and regex rules fill related tables in foreign-key order.
Learn more about Test Data
Automation scripts

Chores that run on their own

  • Regenerate documentation, sync schemas and reload test data on a schedule.
  • Groovy scripts with full access to the model and the connection.
Learn more about Automation Scripts
Monitoring

See what your database is doing right now

  • Find the session holding the lock, while it still matters.
  • Sessions, locks, users and disk usage, in DbSchema or in DbSchemaCLI on a server.
Explore DbSchemaCLI
  • Queries in plain English
  • Explain any SQL in seconds

Now with AI Assistant

Ask what a table is for. Describe the query you want in plain English. Let it write the column comments nobody has had time for. The AI reads your own schema, so its answers use your table names.

  • Smart index suggestions
  • Bring your own API key

On any paid edition you can use your own API key, so your schema goes only to the model you chose.