Quick start
- Add tables. Click Add table, or double-click the empty canvas. Give each table a name.
- Add fields. Click + Add field on a table. Type a name. Pick the kind of value.
- Link tables. Click Link tables, then click two tables. Choose one-to-many, one-to-one or many-to-many.
- Add records. Open App preview. Add records with the form, or click Add example records.
- Save your work. Click Export. Take the picture for a report. Take the .zip to open the work again later.
To open saved work, use Open > Open a file. You can open a .sql file, a .db file or a draw.io file.
New here? Use Help > Take the tour.
How to design well
- One table for one kind of thing. Name it with a singular noun: Student, not Students.
- Say what one row is. This is the granularity. In an Order table, one row is one order.
- Give every table a primary key. A simple ID number is the safest choice.
- One value in one field. Do not put a list in a field. Do not make phone1, phone2, phone3. Make a new table and link it.
- Store each fact one time. Keep a customer's address in Customer only. Other tables point to the customer with a foreign key.
- Ask the relationship question in both directions. "One A has how many B?" Then "One B has how many A?" The two answers give you 1:N, 1:1 or M:N.
- Resolve many-to-many. Use an associative table. Put facts about the pairing there, for example the grade in Enrolment.
- Decide mandatory or optional. Must every order have a customer? Then the link is mandatory.
- Use clear, regular names. For example student_id in Student and student_id in Enrolment.
- Test with real examples. Add records in App preview. If a record is hard to enter, the design has a problem.
How to read the lines (crow's foot notation)
- The symbol next to the table is the maximum. A bar is one. A crow's foot is many.
- The next symbol is the minimum. A bar is mandatory. A circle is optional.
- The foreign key is always in the table at the "many" end.
Mouse
| Do this | Result |
| Double-click the empty canvas | Add a table there |
| Click + Add field | Add a field to that table |
| Drag a table header | Move the table |
| Drag on empty space (arrow tool) | Select several tables. Then drag one to move them all. |
| Shift + click a table | Add it to the selection, or remove it |
| Drag the dot beside a field onto a table | Choose a relationship |
| Right-click | More actions |
| Click the map | Jump to that part of the canvas |
| Scroll wheel | Zoom |
Keys
| Key | Result |
| V, Z, H | Arrow tool, zoom tool, hand tool |
| Space (hold) | Hand tool for a moment |
| + and - | Zoom in and out |
| 0 | Show every table |
| Arrow keys | Move the canvas (when no table has focus) |
| T, R | New table, link tables |
| Ctrl + A | Select all tables |
| Delete | Delete the selection |
| Ctrl + Z, Ctrl + Y | Undo, redo |
| Esc | Close a dialog or cancel |
| Ctrl + S | Save a version |
| Tab | Move to the next table or control |
| Arrow keys on a table | Move the table (hold Shift to move it further) |
| Enter on a table | Open its details |
| L on a table | Link it to another table |
Good to know
- A real database. Your design runs on SQLite inside this page. Nothing to install.
- Three views that always match. Change the diagram, and the SQL and the app follow. Change the SQL, and the diagram follows. A rename in the Details panel keeps your records. A rename typed in the SQL panel does not.
- Works with no internet. After your first visit the app opens offline. Use Help > Install as an app to put it on your device.
- Foreign keys are on. The app runs
PRAGMA foreign_keys = ON. Other SQLite tools have it off until you run that command. - Where your work is kept. In this browser's local storage, on this device only. Nothing is sent to a server. If you clear browser data, the work is lost. Export to keep it.
- SQL the editor reads. CREATE TABLE, ALTER TABLE (add, rename, drop column, add key) and DROP TABLE. It ignores views, triggers and indexes.
- Dialects. Advanced mode can show the schema as SQLite, MySQL or PostgreSQL. The database in the browser is always SQLite.
- Relationship rules. One-to-many puts the foreign key on the many side. One-to-one adds UNIQUE. Many-to-many makes an associative table with a composite primary key. Mandatory is NOT NULL.
- Line styles. In Advanced mode a solid line is an identifying relationship (the foreign key is part of the primary key). A dashed line is non-identifying.
- draw.io import. Rectangles and table shapes become tables. Ellipses become fields. Diamonds become relationships. Labels 1, N and M set the cardinality. Check the keys and types after an import.
- Exports. PNG and SVG picture, .sql (tables only, or tables and data), SQLite .db, or one .zip with all of them.
- Browsers. Current Chrome, Edge, Firefox and Safari. A draw.io file saved in compressed form needs a current browser.
© 2026 ERD Studio. All rights reserved. SQLite, MySQL, PostgreSQL, draw.io and other product names are trademarks of their owners. ERD Studio is not affiliated with them.