דילוג לתוכן הראשי

מחולל קוד

יש לעבור לכרטיסייה 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, שמכווץ או פותח את החלונית.

בחירה ב-TypeScript ואחר כך ב-Rust בתפריט ההקשר של הקוד, מעבר לסגנון Snake בשמות העמודות בחלונית האפשרויות, והעתקת הקוד

אותה תצוגת קוד היא גם הכרטיסייה 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
DoctrineORM✓✓ON DELETE בלבד.php
DrizzleORM✓✓✓.ts
JPAORM✓——.java
SeaORMORM✓ייחודיים בלבד✓.rs
SequelizeORM✓✓✓.ts
SQLAlchemyORM✓✓✓.py
TypeORMORM✓✓✓.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 עם סימן אזהרה מציינת זאת במקומה. העתקה נוספת מחליפה את ההודעה הקופצת במקום להוסיף עוד אחת.
ניתן גם לבחור את הטקסט, וכך לקחת רק את החלק הנחוץ.