מחולל קוד
יש לעבור לכרטיסייה Code Generator בסרגל הכלים. הכרטיסייה מציגה משמאל את הקוד של המסמך כולו, ומימינו חלונית אפשרויות שכותרתה Code Generator, שבה בוחרים את שפת הקוד, את מסד הנתונים, את סגנונות השמות, ולחלק מהיעדים גם את המירכאות.
החלונית נפתחת מעצמה, אלא אם העורך צר מ-640 px כשהכרטיסייה נפתחת לראשונה. הלחצן Hide options בראש החלונית מכווץ אותה, והלחצן Show options בפינה הימנית העליונה של הקוד מחזיר אותה. היא נשארת פתוחה או מכווצת גם במעבר בין כרטיסיות, כל עוד העורך פתוח, ללא תלות בחלונית של כרטיסיית סכמת SQL, ולעולם אינה נשמרת בקובץ.
לחיצה ימנית על הקוד פותחת את תפריט ההקשר שלו: Language, Database, Table Name Case, Column Name Case, Bracket (רק עבור Doctrine, JPA ו-SeaORM), כל אחד מהם עם תפריט משנה שמסמן את הערך הנוכחי, ואחריהם Options panel, שמכווץ או פותח את החלונית ומסומן כל עוד היא מוצגת, ו-Save file.
כל עוד הכרטיסייה הזו פתוחה, החיפוש המהיר מציע את Database, Bracket (רק עבור Doctrine, JPA ו-SeaORM), Language, Table Name Case, Column Name Case ו-Code Generator: Options panel, שמכווץ או פותח את החלונית.

אותה תצוגת קוד היא גם הכרטיסייה Code Generator של חלון מאפייני הטבלה, שבה היא יוצרת קוד לטבלה הזו בלבד, במקום למסמך כולו. שם אין לה חלונית אפשרויות, ותפריט ההקשר שלה משנה את אותן הגדרות, אבל אין בו Options panel או Save file.
כשהקוד של המסמך כולו נפתח בהצהרות ייבוא או בכותרת, הקוד של הטבלה האחת נפתח באלה שהטבלה הזו צריכה, כגון <?php עבור PHP, import Foundation עבור Swift או $schema עבור JSON Schema.
הקוד נכתב כשהכרטיסייה נפתחת, ושוב בכל פעם ששפת הקוד, מסד הנתונים, אחד מסגנונות השמות או המירכאות משתנים. עריכה שנעשית בתרשים בזמן שהכרטיסייה פתוחה, כגון עריכה של שותף לעריכה או של סוכן קוד, מוצגת לאחר שיוצאים מהכרטיסייה וחוזרים אליה, או לאחר שאחת מההגדרות האלה משתנה.
חלונית אפשרויות
תחת הכיתוב Saved in the document, החלונית מציגה את Language, Database, Table Name Case ו-Column Name Case, ואחריהם את Bracket כל עוד שפת הקוד היא Doctrine, JPA או SeaORM. כל אחד מהם הוא רשימה נפתחת, ושינוי בו כותב מחדש את הקוד מיד.
כששפת הקוד שנבחרה מתעלמת מ-Database או מסגנונות השמות, הם נשארים בחלונית, מעומעמים, עם הערה כגון Not used by DBML מתחתיהם, ועדיין ניתן לשנות אותם.
הלחצנים Save file ו-Copy נמצאים בתחתית החלונית – ראו שמירה או העתקה של התוצאה.
אלה ההגדרות של התרשים עצמו, אותן הגדרות שגם תפריט ההקשר והחיפוש המהיר משנים. Database נשמר בקובץ כמו כל עריכה.
Language, Table Name Case, Column Name Case ו-Bracket נשמרים רק כל עוד הנעילה שלהם בכרטיסיית הגדרות כבויה (Bracket Type עבור Bracket), ובתרשים חדש כל הנעילות מופעלות. כל עוד נעילה מופעלת, שינוי כותב מחדש את הקוד שעל המסך, אבל הקובץ שומר את הערך הנעול, והתרשים נפתח מחדש איתו. החלונית אינה מציגה שום סימן לנעילה; כדי לשמור בחירה בקובץ, יש לכבות את הנעילה שלה – ראו נעילה.
שפת קוד
יש תמיכה בעשרים ושניים יעדים, שמפורטים בשלוש קבוצות – שפות, ORM ואחר כך סכמות – כל קבוצה לפי סדר אלפביתי. הרשימה שבחלונית ותפריט ההקשר מפרידים בין הקבוצות בקו, אבל אינם נותנים שם לאף אחת מהן:
| יעד | קבוצה | קשרים | אינדקסים | ON DELETE / ON UPDATE | נשמר בתור |
|---|---|---|---|---|---|
C# | שפה | — | — | — | .cs |
Go | שפה | — | — | — | .go |
Java | שפה | — | — | — | .java |
Kotlin | שפה | — | — | — | .kt |
PHP | שפה | — | — | — | .php |
Rust | שפה | — | — | — | .rs |
Scala | שפה | — | — | — | .scala |
Swift | שפה | — | — | — | .swift |
TypeScript | שפה | — | — | — | .ts |
Doctrine | ORM | ✓ | ✓ | ON DELETE בלבד | .php |
Drizzle | ORM | ✓ | ✓ | ✓ | .ts |
JPA | ORM | ✓ | — | — | .java |
SeaORM | ORM | ✓ | ייחודיים בלבד | ✓ | .rs |
Sequelize | ORM | ✓ | ✓ | ✓ | .ts |
SQLAlchemy | ORM | ✓ | ✓ | ✓ | .py |
TypeORM | ORM | ✓ | ✓ | ✓ | .ts |
AML | סכמה | ✓ | ✓ | ✓ | .aml |
DBML | סכמה | ✓ | ✓ | ✓ | .dbml |
GraphQL | סכמה | ✓ | — | — | .graphql |
JSON Schema | סכמה | — | — | — | .json |
Mermaid | סכמה | ✓ | — | — | .mmd |
Zod | סכמה | — | — | — | .ts |
ברירת המחדל היא GraphQL. כל יעד מפיק עמודות; סימני ה-✓ מראים מה עוד הוא מפיק.
הטבלאות מופקות לפי סדר שמותיהן ולא לפי סדר מיקומן בבד הציור, והאינדקסים הם אלה שמפורטים תחת Indexes בחלון מאפייני הטבלה, ולא השורות Keys שמעליהם. SeaORM כותב רק את האינדקסים הייחודיים, ו-Mermaid מסמן עמודה ייחודית ב-UK, אבל אינו כותב אף אינדקס.
כל היעדים מלבד Java, AML, DBML ו-Mermaid כותבים עמודת מפתח ראשי כעמודה שאינה מקבלת NULL, בין אם Not Null מסומן בה ובין אם לא. Java אינו מציין לגבי אף עמודה אם היא מקבלת NULL או לא, ו-AML, DBML ו-Mermaid שומרים על הדגל כפי שהוא בתרשים.
מה חלק מהיעדים כותבים:
PHP: מחלקות פשוטות של מאפיינים ציבוריים עם סוג מוצהר, שנפתחות ב-<?phpוב-declare(strict_types=1);.Doctrine: ישויות של Doctrine ORM 3 עם תכונות, עבור DBAL 4.2 ומעלה, כל עמודה עם סוג ה-DBAL והאפשרויות שלה עבור מסד הנתונים שנבחר.Rust: מבנהpub structלכל טבלה, שהסוגים בו נכתבים בנתיב המלא, כגוןchrono::NaiveDateTimeאוrust_decimal::Decimal, ללא שורתuse.SeaORM: ישויות של SeaORM 2.0 בפורמט הדחוס, כל טבלה היאpub mod, כך שהטקסט כולו עובר הידור כקובץ אחד.Swift: מבנהCodable,Hashable,Sendableלכל טבלה, שדורש Swift 6.1 ומעלה.TypeScript: ממשקexport interfaceלכל טבלה שמתאר את השורה כ-JSON, כמו הסכמה שלZod– תאריך או שעה הםstring, ועמודה שמקבלת NULL היאT | null.Zod: סכמת שורה של Zod 4 לכל טבלה והסוג שהיא מסיקה, ללא סכמת הכנסה וללא קשרים.JSON Schema: מסמך JSON Schema אחד בגרסת הטיוטה 2020-12, עם סכמת שורה לכל טבלה תחת$defs.Mermaid: תרשיםerDiagram, מהסוג ש-GitHub מציג, שבו כל טבלה היא ישות שמפרטת כל עמודה עם הסוג שלה וכל סימוןPK,FKאוUKשלה, וכל קשר הוא קו בין שתי הטבלאות שלו.
AML, DBML ו-GraphQL הם פורמטים דו-כיווניים: כל אחד מהם הוא גם מקור לייבוא. ראו ייבוא וייצוא של קבצים. שאר הסכמות, JSON Schema, Mermaid ו-Zod, הן לפלט בלבד.
DBML כותב את הצבע של כל טבלה כ-headercolor, ובקוד של המסמך כולו, בלוק TableGroup אחרי הגדרות ה-Ref לכל קבוצת טבלאות שמכילה טבלה. AML כותב את הצבע של טבלה כשם הצבע הקרוב ביותר מבין שמות הצבעים של AML.
ON DELETE ו-ON UPDATE
פעולות ה-ON DELETE וה-ON UPDATE של קשר נקבעות מתפריט ההקשר שלו – ראו ON DELETE ו-ON UPDATE.
היעדים שמסומנים ב-✓ בעמודה ON DELETE / ON UPDATE שבטבלת שפת קוד כותבים את הפעולות שקשר קובע; פעולה שנשארה Not set אינה כותבת דבר.
אילו פעולות יעדי ה-ORM שומרים תלוי במסד הנתונים שנבחר, ואילו AML ו-DBML שומרים את כולן – ראו מסד נתונים.
Doctrineכותב רק ON DELETE, כי ב-Doctrine אין ON UPDATE. הוא מוסיףonDelete: 'CASCADE'לכל#[ORM\JoinColumn]של ה-ManyToOneאו ה-OneToOneשבצד הבעלים, כגון#[ORM\JoinColumn(name: 'user_id', referencedColumnName: 'id', nullable: false, onDelete: 'CASCADE')], ואינו מוסיף דבר ל-OneToManyאו ל-OneToOneשבצד ההפוך. קשר לעמודה ייחודית שאינה המפתח הראשי נשאר בצורת עמודות פשוטות, ש-Doctrine ממפה ללא אסוציאציה, ולכן הוא אינו כותב פעולה.Drizzleכותב אותן באותיות קטנות. ב-.references()הן אפשרויות, כגון{ onDelete: "cascade", onUpdate: "set null" }; ב-foreignKey(), שמפתח מרובה עמודות מקבל, הן משורשרות, כגון.onDelete("restrict").onUpdate("no action").SeaORMכותב אותן על הקשרbelongs_toשל טבלת הבן, ON UPDATE קודם, בשמותNoAction,Cascade,SetNull,SetDefaultו-Restrictשל SeaORM, כגוןon_update = "Cascade", on_delete = "SetNull". ה-has_oneאו ה-has_manyשל טבלת האב אינו מקבל אף אחת מהן.Sequelizeכותב רשומותonDelete: "CASCADE"ו-onUpdateבשתי קריאות האסוציאציה:hasManyאוhasOne, ו-belongsTo. מפתח מרובה עמודות אינו מקבל קריאות אסוציאציה, ולכןSequelizeאינו כותב עבורו פעולות.SQLAlchemyמעביר את הארגומנטיםondelete="CASCADE"ו-onupdateל-ForeignKey()עבור מפתח של עמודה אחת, ול-ForeignKeyConstraint()עבור מפתח מרובה עמודות.TypeORMכותב את האפשרויותonDelete: "CASCADE"ו-onUpdateעל ה-@ManyToOneאו ה-@OneToOneשבצד הבעלים, ולעולם לא בצד ההפוך. הוא תמיד משמיט אתSET DEFAULT, כי TypeORM היה כותב אותו כ-DEFAULT, שאף מסד נתונים אינו מקבל.DBMLמוסיף הגדרות ל-Ref, כגון[delete: set null, update: no action].AMLכותב קשר שיש לו פעולה כמשפטrelעצמאי עם מאפיינים, כגון{onDelete: cascade, onUpdate: "set null"}, במקום בתוך הגדרת העמודה שלו.
JPA אינו כותב אף אחת מהן: ב-JPA הבסיסי אין אפשרות עבורן, והמחולל אינו משתמש ב-@OnDelete של Hibernate. גם Mermaid אינו כותב אף אחת מהן, כי בקו של erDiagram אין להן מקום.
בכרטיסייה Code Generator של חלון מאפייני הטבלה, שמציגה טבלה אחת, DBML אינו כותב Ref ו-AML אינו כותב משפט rel, ולכן אף אחד מהם אינו מציג שם את הפעולות; AML שומר קשר של עמודה אחת שיש לו פעולות בתוך הגדרת העמודה שלו, כפי שהוא עושה עם קשר שאין לו פעולות. Mermaid אינו כותב שם קווי קשר כלל. Doctrine ו-SeaORM כותבים שם את אותה ישות כמו במסמך כולו, כולל הפעולות.
סגנון שמות
Table Name Case ו-Column Name Case תומכים כל אחד ב-Pascal, Camel, Snake ו-None.
ברירות המחדל הן Pascal לשמות טבלאות ו-Camel לשמות עמודות. None מפיק שם כפי שהוא כתוב בתרשים.
בכל סגנון, שם שהוא מילה שמורה בשפה של היעד עובר מילוט כשהשפה מאפשרת זאת, כגון @class ב-C# או r#type ב-Rust, ומקבל שם אחר כשאינה מאפשרת, כגון class_ ב-Java.
AML, DBML ו-Mermaid מתעלמים משתי ההגדרות ותמיד מפיקים את השמות מהתרשים.
גם SeaORM מתעלם מהן: הוא נותן לשדות ולמודולים שמות בסגנון snake case, הצורה ש-SeaORM קורא בחזרה, ומציין את השמות המאוחסנים ב-table_name, וכשהם שונים, גם ב-column_name.
עבור ארבעת היעדים האלה החלונית מעמעמת את שתי הרשימות, עם ההערה Not used by מתחתיהן.
מסד נתונים
סוגי הנתונים נקבעים לפי מסד הנתונים שנבחר – ראו מסדי נתונים.
בכרטיסייה הזו בוחרים אותו מהרשימה Database בחלונית, מ-Database בתפריט ההקשר או מהחיפוש המהיר, והקוד נכתב מחדש מיד. זו הגדרת מסד הנתונים היחידה של התרשים, אותה הגדרה שתפריט ההקשר של בד הציור וכרטיסיית סכמת SQL קובעים, ולכן שינוי כאן מוצג גם שם.
Drizzle לוקח את הדיאלקט שלו מאותה הגדרה: pgTable ל-PostgreSQL, mysqlTable ל-MySQL ול-MariaDB, sqliteTable ל-SQLite, ו-pgTable לכל מסד נתונים אחר.
SeaORM כותב column_type בכל מקום שבו SeaORM היה יוצר אחרת סוג עמודה שונה ב-PostgreSQL, ב-MySQL, ב-MariaDB או ב-SQLite, ואינו כותב אף אחד ב-MSSQL, ב-Oracle, ב-Snowflake או ב-Databricks, ש-SeaORM אינו תומך בהם.
מסד הנתונים שנבחר קובע גם אילו פעולות ON DELETE ו-ON UPDATE יעדי ה-ORM כותבים.
Doctrine, SeaORM, Sequelize, SQLAlchemy ו-TypeORM משמיטים כל פעולה שסכמת SQL משמיטה עבור אותו מסד נתונים, כגון SET DEFAULT ב-MySQL וב-MariaDB, RESTRICT ב-MSSQL, או כל פעולה מלבד NO ACTION ב-Snowflake וב-Databricks, כך שחלה ברירת המחדל של מסד הנתונים. הרשימה המלאה נמצאת ב-ON DELETE ו-ON UPDATE.
Drizzle פועל במקום זאת לפי הדיאלקט שהוא כותב: קוד mysqlTable משמיט את SET DEFAULT, ואילו קוד pgTable וקוד sqliteTable שומרים על כל הפעולות, כולל קוד ה-pgTable שהוא כותב עבור MSSQL, Oracle, Snowflake ו-Databricks.
AML, DBML ו-Mermaid הם היוצא מן הכלל: הם מפיקים כל סוג נתונים כפי שהוא כתוב בתרשים, ולכן הגדרת מסד הנתונים אינה משנה את הפלט שלהם, והחלונית מעמעמת עבורם את Database. AML ו-DBML כותבים כל פעולה שקשר קובע, ו-Mermaid אינו כותב אף אחת.
מירכאות
Bracket מוצע בחלונית, בתפריט ההקשר ובחיפוש המהיר רק כל עוד שפת הקוד היא Doctrine, JPA או SeaORM.
זו אותה הגדרה כמו המירכאות של כרטיסיית סכמת SQL – ראו סכמת SQL – ולכן שינוי כאן משנה גם את האופן שבו סכמת SQL תוחמת שמות במירכאות. היא מציעה את SingleQuote, DoubleQuote, Backtick ו-None, וערכה ההתחלתי הוא None.
Doctrine: בכל סוג מירכאות מלבדNone, כל שם של טבלה, של עמודה ושל עמודת צירוף נתחם בגרשים הפוכים, שבאמצעותם Doctrine מסמן שם שיש לתחום במירכאות, כגון#[ORM\Table(name: '`order`')]. עםNoneנתחם רק שם שזקוק לכך: מילה שמורה של מסד נתונים, שם שאינו מזהה ASCII פשוט, או שם שהוקלד בתוך מירכאות.JPA: בכל סוג מירכאות מלבדNone, שם טבלה שהוא מילה שמורה נתחם במירכאות בתוך@Table, כגון@Table(name = "\"user\""). עםNoneהוא נשאר ללא תיחום, כפי שסכמת SQL משאירה אותו.SeaORM: עםNone, השמות נכתבים כפי שמסד הנתונים מאחסן אותם: שם טבלה עם נקודה מפוצל ל-schema_nameול-table_name, וב-PostgreSQL שם שאינו תחום במירכאות מומר לאותיות קטנות. עם כל סוג מירכאות אחר, שם נשמר בשלמותו, כפי שנכתב.
שמירה או העתקה של התוצאה
Save file, בתחתית חלונית האפשרויות או בתפריט ההקשר, שומר את הקוד המוצג כקובץ.
הקובץ מקבל שם כמו כל ייצוא, <database name>-<timestamp>, ואחריו הסיומת שבטבלת שפת קוד, כגון shop-2026-10-12T04_05_06.ts, ונשמר במקום שבו נשמר כל ייצוא בסביבה המארחת – ראו ייצוא. Java ו-JPA מכניסים את כל המחלקות לקובץ .java אחד, כפי שהכרטיסייה מציגה אותן.
בתפריט הייצוא אין פריט של מחולל הקוד, והכרטיסייה Code Generator של חלון מאפייני הטבלה אינה יכולה לשמור קובץ.
כדי להעתיק את הקוד, יש ללחוץ על הלחצן Copy בתחתית החלונית, או לרחף עם הסמן מעל הקוד וללחוץ על לחצן ההעתקה בפינה הימנית העליונה שלו, וזו הדרך היחידה בחלון מאפייני הטבלה.
הודעה קופצת Copied! עם סימן וי מאשרת זאת למשך שתי שניות. אם הדפדפן או הסביבה המארחת חוסמים את הגישה ללוח, הודעה קופצת Couldn't copy to the clipboard עם סימן אזהרה מציינת זאת במקומה. העתקה נוספת מחליפה את ההודעה הקופצת במקום להוסיף עוד אחת.
ניתן גם לבחור את הטקסט, וכך לקחת רק את החלק הנחוץ.