الانتقال إلى المحتوى الرئيسي

منشئ التعليمات البرمجية

انتقل إلى علامة التبويب Code Generator في شريط الأدوات. تعرض علامة التبويب التعليمات البرمجية للمستند بأكمله على اليسار، وعلى يمينها لوحة خيارات عنوانها Code Generator، تختار فيها اللغة وقاعدة البيانات ونمطي التسمية، وكذلك علامات الاقتباس لبعض الأهداف.
تُفتح اللوحة تلقائيًا ما لم يكن عرض المحرر أقل من 640 بكسل عند فتح علامة التبويب لأول مرة. يطويها 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)، وتكون كل الأقفال مفعّلة في المخطط الجديد. وأثناء تفعيل القفل، يعيد التغيير كتابة التعليمات البرمجية على شاشتك، لكن الملف يحتفظ بالقيمة المقفلة ويُعاد فتح المخطط بها. ولا تُظهر اللوحة أي علامة على القفل؛ ولإبقاء اختيار ما في الملف، عطّل قفله، راجع القفل.

اللغة​

يدعم منشئ التعليمات البرمجية 22 هدفًا، مرتّبة في ثلاث فئات — اللغات، ثم أطر 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 فقط، إذ لا يوجد ON UPDATE في Doctrine. ويضيف 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 أولًا، بالأسماء التي يستخدمها SeaORM، وهي NoAction وCascade وSetNull وSetDefault وRestrict، مثل 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 مع علامة تحذير. ويستبدل النسخ مجددًا الإشعار المنبثق بدلًا من إضافة إشعار آخر.
ويمكن أيضًا تحديد النص، لذا يمكنك أخذ الجزء الذي تحتاج إليه فقط.