ابزارها
سرور 77 ابزار ارائه میدهد: پنج ابزار نشست، چهار ابزار خواندن، 67 ابزار ویرایش که هر یک برای یک عملیات ویرایش است و erd_batch که چند ابزار ویرایش را بهصورت یک ویرایش اجرا میکند.
همهٔ ابزارها بهجز erd_list_documents مسیر سند را در path بهعنوان نخستین آرگومان میگیرند و در جدولهای زیر این آرگومان آورده نشده است.
آرگومانی که با ? مشخص شده، اختیاری است.
ابزارهای نشست
| ابزار | آرگومانها | کاری که انجام میدهد |
|---|---|---|
erd_list_documents | اسناد ERD را با path، open، active، dirty و readonly فهرست میکند: اسناد ویرایشگری که به پوشهٔ کاری سرویس میدهد، که در یک IDE از JetBrains شامل همهٔ پروژههای باز است، و در غیر این صورت فایلهای ERD درون پوشهٔ کاری. | |
erd_open_document | create? | سندی را برای ویرایش باز میکند؛ اگر ویرایشگری به آن سرویس دهد، در ERD Editor همان ویرایشگر. با create، اگر فایل وجود نداشته باشد ابتدا آن را میسازد و به نامی که پسوند ندارد .erd.json افزوده میشود. |
erd_save | سندی را که در اختیار یک ویرایشگر است ذخیره میکند. VS Code ویرایشهای عامل را تا فراخوانی این ابزار ذخیرهنشده نگه میدارد؛ Obsidian و یک IDE از JetBrains آنها را مانند ویرایشهای خودتان ذخیره میکنند و این ابزار آنها را بیدرنگ مینویسد. در حالت بدون رابط کاربری، هر ویرایش از قبل نوشته شده است، همانطور که saved: true در نتیجهٔ آن میگوید، و این ابزار کاری انجام نمیدهد. | |
erd_undo | آخرین ویرایش این عامل را واگرد میکند و هرگز ویرایشهای خودتان را واگرد نمیکند. فراخوانیهایی که هیچ مدخل واگردی ثبت نکردهاند نادیده گرفته میشوند و نامشان ذکر میشود. | |
erd_redo | ویرایشی را که erd_undo آخرین بار واگرد کرده است دوباره اعمال میکند. |
برای آنچه ذخیره کردن و واگرد در هر حالت انجام میدهند، زنده و بدون رابط کاربری را ببینید.
خواندن سند
| ابزار | آرگومانها | کاری که انجام میدهد |
|---|---|---|
erd_list | query?، offset?، limit?، namesOnly? | تنظیمات و تعدادها، سپس صفحهای از جدولها با شاخصها و رابطههایشان، هر جدول با شناسه، موقعیت و اندازهاش روی بوم، تعداد ستونها، نام منطقیاش اگر داشته باشد و گروه جدولش اگر در گروهی باشد. اگر جستوجو نکند، پس از جدولها گروههای جدول، یادداشتها و سپس دامنهها، اصطلاحات و واژهها میآیند. |
erd_get | tableIds?، tableNames?، relationshipIds?، indexIds?، memoIds?، tableGroupIds?، wordIds?، termIds?، domainIds? | موجودیتهای مشخصشده، بهطور کامل: جدولها با ستونها و گروه جدولشان، رابطهها با ستونها و onDelete و onUpdate آنها، شاخصها با ستونهایشان، یادداشتها با متنشان، گروههای جدول با جدولهایشان، و واژهها، اصطلاحات و دامنهها با همهٔ فیلدهایشان. |
erd_read | format، vendor?، statements?، header?، logicalNameAsComment?، tableIds?، tableNames?، groupNames? | کل سند یکجا در یکی از چهار قالب، یا DDL فقط برخی جدولها یا گروههای جدول. |
erd_list_checks | level?، tableIds?، tableNames?، offset?، limit? | ایرادهایی که واژهنامههای واژهها، اصطلاحات و دامنهها مییابند، همانطور که برگهٔ Checks در زبانهٔ واژهنامهٔ ویرایشگر آنها را فهرست میکند، صفحهبهصفحه. چیزی را تغییر نمیدهد؛ بررسیهای واژهنامه را ببینید. |
عامل شناسهها را با erd_list پیدا میکند، ستونها، ردیفهای واژهنامه و جزئیات دیگر را با erd_get میخواند و همان شناسهها را به ابزارهای ویرایش میدهد.
اندازهٔ یک جدول در erd_list کادری است که روی بوم اشغال میکند: ارتفاع دقیق و عرض تقریبی.
گروه جدول با مستطیلی که ذخیره میکند، همراه با نام، رنگ و تعداد جدولهایش فهرست میشود.
هر رابطه یک بار و همراه با یکی از دو جدولش فهرست میشود.
ردیف واژهنامه با شناسهاش، name آن و آنچه به یک نام فیزیکی یا یک ستون میدهد فهرست میشود: dataType یک دامنه، physicalName و domainId یک اصطلاح و abbreviation یک واژه. هر واژهنامه ردیفهایش را به ترتیبی فهرست میکند که برگهاش نشان میدهد.
تنظیماتی که erd_list و erd_read گزارش میدهند همانهایی است که فایل ذخیره میکند؛ تنظیمات را ببینید.
در erd_get و قالب snapshot در erd_read، هر جدول و ستون logicalName خود را دارد، که اگر نام منطقیای نباشد رشتهٔ خالی است، و nameDerived را، که تا وقتی نام را واژهنامهها دادهاند true است، تا یک نام منطقی تازه آن را دوباره استخراج کند؛ واژهنامهها را ببینید.
هر ستون domainId خود را دارد و هر اصطلاح هم همینطور: رشتهٔ خالی وقتی دامنهای نیست، یا برای دامنهای که سند دیگر آن را فهرست نمیکند.
erd_read یکی از چهار قالب را میگیرد:
format | آنچه پاسخ میدهد |
|---|---|
snapshot | JSON فشردهای شامل همهٔ موجودیتها با شناسههایشان، از جمله گروههای جدول و ردیفهای واژهها، اصطلاحات و دامنهها، و تنظیمات همراه با اسکریپتهای طرحواره SQL. آنچه را از یک بیننده به بینندهٔ دیگر فرق میکند کنار میگذارد: عرضهای اندازهگیریشده، ترتیب لایهها، نما، زبانه و نمایش نامها. در طرحوارهٔ بزرگ حجیم است. |
sql | DDL برای یکی از هشت پایگاه داده: Databricks، MariaDB، MSSQL، MySQL، Oracle، PostgreSQL، Snowflake یا SQLite. پیشفرض vendor پایگاه دادهای است که سند روی آن تنظیم شده است. DDL کل سند اسکریپتهای پیش و پس از جدولها را دربر میگیرد. با tableIds، tableNames یا groupNames، فقط همان جدولها با کلیدهای خارجیشان و بدون اسکریپت. کلیدهای خارجی کنشهای ON DELETE و ON UPDATE خود را دارند، جز آنهایی که پایگاه دادهٔ هدف کنار میگذارد؛ ON DELETE و ON UPDATE را ببینید. |
json | کل سند دقیقاً همانطور که هنگام ذخیره در فایل نوشته میشود، از جمله ویرایشهایی که ویرایشگر هنوز ذخیره نکرده است؛ شکل ذخیرهسازی را ببینید. |
scripts | فقط اسکریپتهای پیش و پس از جدولهای سند، بهصورت {"before":"…","after":"…"} که هر کدام در صورت تنظیم نشدن خالی است، هر چقدر هم طرحواره بزرگ باشد. |
vendor، statements، header، logicalNameAsComment، tableIds، tableNames و groupNames را فقط قالب sql میپذیرد و هر قالب دیگری آنها را رد میکند.
statements:createکه پیشفرض است؛ifNotExistsکه در MySQL، MariaDB، PostgreSQL، SQLite و Databricks دستورCREATE TABLE IF NOT EXISTSو در بقیهCREATE TABLEساده مینویسد؛ یاrecreateکه جدولها را پیش از ساختن حذف میکند، در حالی که Snowflake بهجای آنCREATE OR REPLACE TABLEمینویسد.header:noneکه پیشفرض است؛useکه پایگاه داده یا طرحوارهای را که نام پایگاه دادهٔ سند تعیین میکند انتخاب میکند؛ یاcreateAndUseکه ابتدا آن را میسازد. Oracle فقطuseرا دارد، پسcreateAndUseدر آنجاuseمینویسد، و PostgreSQL فقطcreateAndUseرا دارد، پسuseدر آنجا هیچ سرآیندی نمینویسد. SQLite هیچ سرآیندی نمینویسد و تا وقتی نام پایگاه داده خالی است یا یک شناسهٔ ساده نیست، هیچ پایگاه دادهای سرآیند نمینویسد.logicalNameAsComment:trueنام منطقی یک جدول یا ستون را تا وقتی توضیح آن خالی است یا فقط از فاصله تشکیل شده است، بهعنوان توضیح آن مینویسد، در جایی و به شکلی که هر پایگاه داده توضیح را مینویسد، و هر توضیحی را که متن دارد نگه میدارد؛false، که پیشفرض است، هیچ نام منطقیای نمینویسد؛ نامهای منطقی بهعنوان توضیح را ببینید.groupNames: جدولهای گروههای جدولی که نامشان آمده، بر اساس نام و بدون توجه به بزرگی و کوچکی حروف، که باtableIdsوtableNamesترکیب میشوند. نامی که با هیچ گروهی تطابق نداشته باشد باnotFoundرد میشود. گروهی که هیچ جدولی ندارد جدولی اضافه نمیکند، و اگر برای خواندن هیچ جدولی باقی نماند، مانند وقتی که همهٔ گروههای نامبرده خالیاند و نام هیچ جدولی آورده نشده، باinvalidArgsرد میشود.
statements، header و logicalNameAsComment برای DDL برخی جدولها هم اعمال میشوند. اینها مانند گزینههای Statements و Header و گزینهٔ Write logical names into empty comments در زبانهٔ طرحواره SQL در ویرایشگر کار میکنند، هرچند مقدار آغازین این زبانه If not exists و CREATE + USE است. این گزینه، مانند logicalNameAsComment، در ابتدا خاموش است.
نامها با نوع علامت نقلقولی که فایل ذخیره میکند در علامت نقلقول قرار میگیرند، و تا وقتی Bracket Type قفل است، با نوع قفلشده؛ قفل را ببینید.
طرحوارههای بزرگ
طرحوارههایی با صدها یا هزاران جدول هم کار میکنند. پاسخ هر خواندن حداکثر 40,000 نویسه است، کمتر از حدی که Claude Code از آن به بعد نتیجهٔ ابزار را جداگانه در یک فایل کنار میگذارد.
erd_listبهطور پیشفرض صفحهای با 100 مورد پاسخ میدهد، ابتدا جدولها، سپس گروههای جدول، یادداشتها، دامنهها، اصطلاحات و واژهها، با یک شمارهٔ شروع مشترک برای همهٔ آنها، و باnextOffsetو یکnoteمیگوید صفحهٔ بعد از کجا شروع میشود. همانnextOffsetرا بهعنوانoffsetو همراه با همانqueryبدهید.queryجدولها را بر اساس واژههایی در نام، نام منطقی یا توضیح جدول یا ستون و بدون توجه به بزرگی و کوچکی حروف پیدا میکند. جدولهایی که نام یا نام منطقیشان واژههای بیشتری از آنها را دارد اول میآیند. جستوجو هیچ گروه جدول، یادداشت یا ردیف واژهنامهای را فهرست نمیکند.namesOnlyفقط نام جدولها را فهرست میکند، حدود 2,000 نام کوتاه در یک پاسخ.erd_getوerd_readعلاوه بر شناسهها آرگومانtableNamesرا هم میپذیرند وerd_readآرگومانgroupNamesرا نیز میپذیرد، بنابراین عاملی که از او یک کوئری SQL روی طرحوارهای بزرگ خواسته شده، فقط DDL جدولهایی را که لازم دارد میخواند.- واژهنامهها هم بخشبخش میآیند:
erd_listردیفهای آنها را پس از جدولها صفحهبهصفحه میآورد وerd_getردیفها را بر اساسdomainIds،termIdsوwordIdsبهطور کامل میدهد. erd_getشناسهها و نامهایی را که به هیچ چیزی اشاره نمیکنند زیرmissingفهرست میکند و شناسههایی را که در یک پاسخ جا نمیشوند زیرnotReturned، تا دوباره درخواست شوند.erd_list_checksهم به همین شکل صفحهبهصفحه پاسخ میدهد؛ بررسیهای واژهنامه را ببینید.- اگر نتیجهٔ یک خواندن در یک پاسخ نگنجد، با
tooLargeرد میشود، همراه با راه محدود کردن آن.
بررسیهای واژهنامه
erd_list_checks بررسیهای برگهٔ بررسیها در ویرایشگر را به همان ترتیب فهرست میکند: ابتدا بررسیهای واژهها، سپس بررسیهای اصطلاحات و دامنهها، هر واژهنامه به ترتیبی که برگهاش نشان میدهد، و سپس هر جدول و پس از آن ستونهایش.
مانند برگه، هر بررسی فقط تا وقتی اجرا میشود که واژهنامهای که میخواند ردیفی داشته باشد. سندی که واژهنامههایش هیچ واژه، اصطلاح یا دامنهای ندارند اصلاً بررسی نمیشود: total برابر 0 است و note همین را میگوید.
level:errorیاwarningفقط برای همان سطح؛ بهطور پیشفرض هر دو.tableIdsوtableNames: فقط بررسیهای همان جدولها و ستونهایشان، با نامها بدون توجه به بزرگی و کوچکی حروف، که ردیفهای خود واژهنامهها را کنار میگذارد. شناسه یا نامی که به هیچ جدولی اشاره نکند باnotFoundرد میشود.offsetوlimit: بهطور پیشفرض صفحهای با 100 بررسی، که هر جا یک پاسخ پر شود هم متوقف میشود. تا وقتی موارد بیشتری در پی میآیند،nextOffsetو یکnoteمیگویند صفحهٔ بعد از کجا شروع میشود؛ آن را با همان فیلترها بهعنوانoffsetبدهید. پس از رفع چند بررسی، دوباره از شمارهٔ شروع0فهرست بگیرید: بررسی رفعشده از فهرست خارج میشود، بنابراین شمارهٔ شروع جلوتر از روی بررسیهایی که هنوز رفع نشدهاند رد میشود.
پاسخ شامل total، یعنی تعداد بررسیهایی که فیلترها نگه میدارند؛ counts، یعنی تعداد آنها برای هر کد، بدون کدی که هیچ بررسیای ندارد؛ و صفحه بهصورت checks است.
هر بررسی level، code و kind و id هدف خود را میدهد: table، column، word، term یا domain. بررسی یک ستون tableId آن و نام جدولش را بهصورت table هم اضافه میکند.
name نام هدف است، یعنی نام فیزیکی یک جدول یا ستون، همراه با logicalName آن اگر داشته باشد. field چیزی است که بررسی میخواند: name، logicalName یا domainId. text چیزی است که بررسی در آنجا یافته است و suggestions، اگر واژهنامهها پیشنهادی داشته باشند، چیزی است که باید بهجای آن به کار رود. بنابراین عامل میتواند بدون erd_get یک بررسی را رفع کند:
{"level":"warning","code":"physicalNameMismatch","kind":"column","id":"8e1z0q4xk2m7cwd5tfb9h3ynp","tableId":"03h17be2plxpj5n59tqag7ogj","table":"users","name":"id","logicalName":"Member Number","field":"name","text":"id","suggestions":["MBR_NO"]}
code | level | Type در برگه | آنچه مییابد |
|---|---|---|---|
duplicateName | error | Duplicate name | نامی که دو ردیف از یک واژهنامه در آن مشترکاند. هر یک از این ردیفها فهرست میشود. |
unknownDomain | error | Unknown domain | ستون یا اصطلاحی که به دامنهای پیوند خورده است که سند دیگر آن را فهرست نمیکند. text نام آن دامنه است، یا وقتی نامی شناخته نیست، شناسهٔ آن. |
forbiddenWord | error | Forbidden word | واژهای که یکی از واژهها آن را بهعنوان واژهٔ ممنوع فهرست کرده است، در نام منطقی یک جدول یا ستون یا در نام یک اصطلاح. suggestions واژههای استاندارد هستند. |
unregisteredWord | warning | Unregistered word | متنی که هیچ واژهای آن را فهرست نکرده است، در همان جاها. |
synonymWord | warning | Synonym | مترادفی که بهجای یک واژهٔ استاندارد به کار رفته است، در همان جاها. suggestions واژههای استاندارد هستند. |
physicalNameMismatch | warning | Physical name mismatch | نام فیزیکی جدول یا ستونی که با نامی که اصطلاح نام منطقی آن میدهد فرق دارد. پیشنهاد، نام فیزیکی اصطلاح است، یا تا وقتی اصطلاح نام فیزیکی ندارد، نامی که واژههایش میسازند. |
domainTypeMismatch | warning | Domain type mismatch | ستونی که نوع دادهاش با نوع دامنهای که به آن پیوند خورده است یکی نیست. text نوع ستون است و پیشنهاد، نوع دامنه. |
اینکه هر بررسی یک نام را چگونه میخواند در هر بررسی چه مییابد توضیح داده شده است.
ابزارهای ویرایش
شناسهها از erd_list و erd_get به دست میآیند، یا از createdIds فراخوانیای که آن موجودیت را ساخته است.
شناسهٔ تازه از 25 حرف کوچک و رقم تشکیل شده است، مانند 03h17be2plxpj5n59tqag7ogj، در حالی که شناسهای که سند از قبل دارد شکل خود را حفظ میکند، پس از شکل یک شناسه هیچ نتیجهای نگیرید.
x و y لبههای چپ و بالا روی بوم به پیکسل هستند، و مقدار رنگ یک رنگ هگز CSS مانند #3b82f6 است یا رشتهٔ خالی که رنگ را حذف میکند.
جدولها
| ابزار | آرگومانها | کاری که انجام میدهد |
|---|---|---|
erd_add_table | یک جدول خالی در جایی خالی اضافه میکند و شناسهٔ آن را در createdIds برمیگرداند. | |
erd_remove_table | tableId | یک جدول را همراه با ستونها، شاخصها و همهٔ رابطههایی که به آن متصلاند حذف میکند. |
erd_change_table_name | tableId، value | نام یک جدول را تغییر میدهد. پس از آن، نام دستی نوشتهشده به شمار میآید، بنابراین یک نام منطقی بعدی تا وقتی نام خالی نیست آن را همانطور که هست باقی میگذارد؛ واژهنامهها را ببینید. |
erd_change_table_comment | tableId، value | توضیح یک جدول را تنظیم میکند. رشتهٔ خالی آن را پاک میکند. |
erd_set_table_logical_name | tableId، value | نام منطقی یک جدول را تنظیم میکند. رشتهٔ خالی آن را پاک میکند و نام را باقی میگذارد. تا وقتی نام جدول خالی است یا استخراج شده است، واژهنامهها آن را از نام منطقی استخراج میکنند؛ واژهنامهها را ببینید. اصطلاح به جدول هیچ دامنهای نمیدهد. |
erd_change_table_color | tableId، color | رنگ یک جدول را تنظیم میکند. |
erd_move_table | tableId، x، y | یک جدول را به موقعیتی روی بوم جابهجا میکند. |
erd_move_tables | positions | چند جدول را در یک ویرایش جابهجا میکند که یک بار erd_undo آن را واگرد میکند. positions برای هر جدول یک { tableId, x, y } دارد و هر جدول حداکثر یک بار در آن میآید. |
erd_sort_tables | همهٔ جدولها را در ردیفهایی روی بوم میچیند، ابتدا جدولهای با کمترین ستون، همانطور که erd_import_sql، erd_import_graphql، erd_import_dbml و erd_import_aml آنها را میچینند. جدولهای یک گروه جدول کنار هم میمانند و کادر هر گروه طوری تنظیم میشود که دور آنها را بگیرد. |
ستونها
| ابزار | آرگومانها | کاری که انجام میدهد |
|---|---|---|
erd_add_column | tableId | یک ستون خالی به یک جدول اضافه میکند و شناسهٔ آن را در createdIds برمیگرداند. |
erd_remove_columns | tableId، columnIds | ستونهایی را از یک جدول حذف میکند، همراه با رابطهها و ورودیهای شاخصی که از آنها استفاده میکنند. |
erd_change_column_name | tableId، columnId، value | نام یک ستون را تغییر میدهد. پس از آن، نام دستی نوشتهشده به شمار میآید، مانند نام جدول. |
erd_change_column_data_type | tableId، columnId، value | نوع داده را تنظیم میکند، مانند INT یا VARCHAR(255). تا وقتی همگامسازی نوع داده در رابطهها روشن است، تغییر مانند ویرایشگر در هر دو جهت رابطهها پیش میرود: نوع serial بهصورت نوع عدد صحیحی که ذخیره میکند به کلیدهای خارجی میرسد، همانطور که erd_add_relationship آن را کپی میکند، و کلید serial وقتی یکی از کلیدهای خارجیاش تغییر کند نوع خود را نگه میدارد و تغییر همانجا متوقف میشود. روشن یا خاموش کردن همگامسازی با کاربر است و erd_list آن را بهصورت relationshipDataTypeSync گزارش میکند. پیوند ستونی که به یک دامنه پیوند خورده است، وقتی به نوعی غیر از نوع دامنه تنظیم شود، از آن دامنه قطع میشود، و پیوند هر ستونی که همگامسازی به آن میرسد و نوع تازهاش با نوع دامنهٔ خودش فرق دارد نیز قطع میشود؛ قطع پیوند را ببینید. |
erd_change_column_default | tableId، columnId، value | مقدار پیشفرض را بهصورت متن SQL تنظیم میکند. رشتهٔ خالی آن را پاک میکند. |
erd_change_column_comment | tableId، columnId، value | توضیح را تنظیم میکند. رشتهٔ خالی آن را پاک میکند. |
erd_set_column_logical_name | tableId، columnId، value | نام منطقی یک ستون را تنظیم میکند. رشتهٔ خالی آن را پاک میکند و نام را باقی میگذارد. تا وقتی نام ستون خالی است یا استخراج شده است، واژهنامهها آن را استخراج میکنند و ستون به دامنهٔ اصطلاح پیوند میخورد و نوع دادهٔ آن دامنه را میگیرد؛ واژهنامهها را ببینید. |
erd_set_column_domain | tableId، columnId، domainId?، domainName? | یک ستون را به دامنهای پیوند میدهد که با شناسه یا با نام، یکی از این دو، داده میشود. ستون نوع دادهٔ دامنه را میگیرد که تا وقتی همگامسازی نوع داده در رابطهها روشن است، در رابطهها پیش میرود، با همان قطع پیوندی که در erd_change_column_data_type رخ میدهد. domainId برابر null یا رشتهٔ خالی، یا domainName خالی، پیوند ستون را قطع میکند و نوعش را نگه میدارد. |
erd_set_column_primary_key | tableId، columnId، value | true ستون را بخشی از کلید اصلی میکند و false آن را از کلید اصلی بیرون میآورد. |
erd_set_column_unique | tableId، columnId، value | تعیین میکند ستون یکتا باشد یا نه. |
erd_set_column_not_null | tableId، columnId، value | تعیین میکند ستون NOT NULL باشد یا نه. |
erd_set_column_auto_increment | tableId، columnId، value | تعیین میکند ستون افزایش خودکار داشته باشد یا نه. |
erd_move_column | tableId، columnId، targetColumnId | یک ستون را درون جدولش به موقعیت ستونی دیگر جابهجا میکند. |
رابطهها
relationshipType کاردینالیتی در انتهای فرزند است: ZeroOne، ZeroN، OneOnly یا OneN.
جدول آغاز والد است، یعنی سمت مرجع که کلید اصلی را دارد، و جدول پایان فرزند است.
onDelete و onUpdate کنشهای ON DELETE و ON UPDATE کلید خارجی هستند: none، noAction، cascade، setNull، setDefault یا restrict.
none هیچ بندی نمینویسد، پس پیشفرض پایگاه داده اعمال میشود؛ ON DELETE و ON UPDATE را ببینید.
کنشی که در erd_add_relationship یا erd_link_columns آورده نشود، none است.
| ابزار | آرگومانها | کاری که انجام میدهد |
|---|---|---|
erd_add_relationship | startTableId، endTableId، relationshipType، onDelete?، onUpdate? | دو جدول را به هم مرتبط میکند. کلید اصلی والد را بهصورت ستونهای کلید خارجی در فرزند کپی میکند و اگر والد کلید اصلی نداشته باشد، ابتدا یک ستون کلید اصلی میسازد. هر ستون کلید خارجی همانطور نامگذاری میشود که رسم یک رابطه در ویرایشگر آن را نامگذاری میکند: از کلید id در جدول users نام users_id به دست میآید و کلیدی مانند member_id نام خود را حفظ میکند؛ نام ستونهای کلید خارجی را ببینید. هر یک نوع دادهٔ کلید خود را کپی میکند، جز اینکه کلید serial نوع عدد صحیحی را که ذخیره میکند میدهد، مانند integer برای serial4، و نوع serial ساده بیرون از PostgreSQL، MySQL و MariaDB همان serial میماند؛ رابطههای شناسا را ببینید. هر یک نام منطقی کلید خود را هم میگیرد و به دامنهای که کلیدش به آن پیوند خورده است پیوند میخورد، مگر اینکه کلید serial نوع دیگری به آن بدهد. createdIds آن ستون کلید تازه را اگر ساخته شده باشد، ستونهای کلید خارجی و در آخر شناسهٔ رابطه را دارد. |
erd_link_columns | startTableId، startColumnIds، endTableId، endColumnIds، relationshipType، onDelete?، onUpdate? | رابطهای میان ستونهایی که از قبل وجود دارند رسم میکند و ستونهای آغاز و پایان را بر اساس موقعیت جفت میکند. نام هیچ ستونی را تغییر نمیدهد، هیچ نوع دادهای را عوض نمیکند و هیچ نام منطقی یا دامنهای را کپی نمیکند. |
erd_remove_relationship | relationshipId | یک خط رابطه را حذف میکند. ستونهای کلید خارجی آن در جدول میمانند. |
erd_change_relationship_type | relationshipId، relationshipType | کاردینالیتی یک رابطه را تغییر میدهد. |
erd_change_relationship_on_delete | relationshipId، onDelete | کنش ON DELETE یک رابطه را تنظیم میکند: اینکه حذف یک ردیف والد با ردیفهای فرزندش چه میکند. |
erd_change_relationship_on_update | relationshipId، onUpdate | کنش ON UPDATE یک رابطه را تنظیم میکند: اینکه تغییر یک کلید والد با ردیفهای فرزندش چه میکند. |
erd_add_relationship ستونهای کلید خارجی را هنگام اجرا نامگذاری میکند و نامهای منطقی کلیدهایشان را کپی میکند. تغییر نام یا نام منطقیای که بعداً به کلید داده شود به آنها نمیرسد، پس ابتدا جدول والد و کلید اصلی آن را نامگذاری کنید و نام منطقی کلید را به آن بدهید.
نامهایی که میدهد دستی نوشتهشده به شمار میآیند، بنابراین یک نام منطقی بعدی آنها را همانطور که هستند باقی میگذارد، در حالی که erd_derive_physical_names آنها را به واژهنامهها برمیگرداند؛ واژهنامهها را ببینید.
هیچ ابزاری ستونهای یک رابطهٔ موجود را آنطور که نگاشت ستونها در ویرایشگر انجام میدهد تغییر نمیدهد.
برای نگاشت کردن یک رابطه روی ستونهای دیگر، erd_remove_relationship را که ستونهای کلید خارجی آن را در جدول باقی میگذارد و erd_link_columns را با ستونهای مورد نظر در یک erd_batch اجرا کنید که یک بار erd_undo آن را واگرد میکند.
شاخصها
شناسهٔ ستون شاخص یک ورودی از فهرست ستونهای شاخص است که erd_get میدهد، نه شناسهٔ ستون جدول.
| ابزار | آرگومانها | کاری که انجام میدهد |
|---|---|---|
erd_add_index | tableId | یک شاخص خالی به یک جدول اضافه میکند و شناسهٔ آن را در createdIds برمیگرداند. |
erd_remove_index | indexId | یک شاخص را حذف میکند. |
erd_change_index_name | indexId، value | نام یک شاخص را تغییر میدهد. |
erd_set_index_unique | indexId، value | تعیین میکند شاخص یکتا باشد یا نه. |
erd_add_index_column | indexId، columnId | ستونی از جدول شاخص را اضافه میکند و شناسهٔ ستون شاخص تازه را برمیگرداند. ستونی که از قبل در شاخص باشد دستنخورده میماند. |
erd_remove_index_column | indexId، indexColumnId | یک ستون را از یک شاخص حذف میکند. |
erd_move_index_column | indexId، indexColumnId، targetIndexColumnId | یک ستون را درون شاخص به موقعیت ستون دیگری از همان شاخص جابهجا میکند. |
erd_set_index_column_order | indexId، indexColumnId، orderType | ترتیب مرتبسازی یک ستون در شاخص را تنظیم میکند، ASC یا DESC. |
یادداشتها
| ابزار | آرگومانها | کاری که انجام میدهد |
|---|---|---|
erd_add_memo | یک یادداشت خالی در جایی خالی اضافه میکند و شناسهٔ آن را در createdIds برمیگرداند. | |
erd_remove_memo | memoId | یک یادداشت را حذف میکند. |
erd_change_memo_value | memoId، value | متن یک یادداشت را جایگزین میکند. |
erd_change_memo_color | memoId، color | رنگ یک یادداشت را تنظیم میکند. |
erd_move_memo | memoId، x، y | یک یادداشت را به موقعیتی روی بوم جابهجا میکند. |
erd_resize_memo | memoId، width، height | اندازهٔ یک یادداشت را تغییر میدهد. عرض باید دستکم حدود 116 پیکسل و ارتفاع دستکم 100 باشد. هیچ مدخل واگردی ثبت نمیکند، زیرا ویرایشگر تغییر اندازهٔ یادداشت را فقط وقتی با کشیدن انجام شود ثبت میکند. |
تا وقتی یادداشتها با View Option → Memos پنهاناند، erd_add_memo باز هم یادداشتی اضافه میکند و آن یادداشت تا وقتی یادداشتها دوباره نمایش داده شوند پنهان میماند.
erd_list و erd_get یادداشتهای پنهان را هم فهرست میکنند.
گروههای جدول
گروه جدول کادری نامدار است که پشت جدولهایش رسم میشود و رنگ آن روی کادر و در سراسر سرآیند جدولهایش دیده میشود؛ گروههای جدول را ببینید.
هر جدول حداکثر در یک گروه است. erd_move_table، erd_move_tables و erd_move_table_group هر جا که جدولی را بگذارند، هرگز تغییر نمیدهند که یک گروه چه جدولهایی دارد، در حالی که در ویرایشگر جدول در جایی که رها میشود به گروهی میپیوندد یا از آن خارج میشود؛ افزودن و خارج کردن جدولها را ببینید. erd_add_table_group و erd_set_table_group جدولها را در یک گروه میگذارند و erd_remove_table_group جدولهایش را بدون گروه باقی میگذارد.
هر گروه یک مستطیل ذخیره میکند، با عرض دستکم 160 پیکسل و ارتفاع دستکم 100، با احتساب نوار عنوان، و ویرایشگر کادر را آنقدر بزرگتر رسم میکند که هر یک از جدولهایش را دربر بگیرد.
| ابزار | آرگومانها | کاری که انجام میدهد |
|---|---|---|
erd_add_table_group | name، color?، x?، y?، width?، height?، tableIds? | یک گروه اضافه میکند و شناسهٔ آن را در createdIds برمیگرداند. یا tableIds را بدهید یا یک مستطیل، یعنی x، y، width و height را با هم. با tableIds، هر جدول از گروهی که در آن بوده خارج میشود و مستطیل، همانطور که در گروهبندی جدولهای انتخابشده، طوری تنظیم میشود که دور آنها را بگیرد. یک مستطیل، همانطور که رسم گروه انجام میدهد، هر جدول بدون گروهی را که مرکزش درون آن باشد دربر میگیرد. اگر name خالی باشد، گروه بینام میماند. یک بار erd_undo گروه را حذف میکند و هر جدول را به گروهی که در آن بوده برمیگرداند. |
erd_remove_table_group | groupId | یک گروه را حذف میکند. جدولهایش در جای خود و بدون گروه میمانند. |
erd_change_table_group_name | groupId، value | نام یک گروه را تغییر میدهد. رشتهٔ خالی آن را بینام میگذارد. |
erd_change_table_group_color | groupId، color | رنگ یک گروه را تنظیم میکند. |
erd_move_table_group | groupId، x، y | یک گروه را جابهجا میکند تا مستطیلش از آن نقطه شروع شود و جدولهایش را به همان اندازه جابهجا میکند، همانطور که کشیدن نوار عنوان آن انجام میدهد. جابهجایی کمتر از 20 پیکسل، با جمع جابهجایی افقی و عمودی، هیچ مدخل واگردی ثبت نمیکند. از نسخهٔ 1.2.0 سرور، جابهجایی بهصورت نقطههایی که گروه و جدولهایش به آنها ختم میشوند به ویرایشگر میرسد، بنابراین با افزونهٔ VS Code نسخهٔ 4.3.0 یا بالاتر یا پلاگین Obsidian یا JetBrains نسخهٔ 1.3.0 یا بالاتر، جابهجایی گروه یا یکی از جدولهایش که همانجا در یک لحظه انجام شود روی یکی از دو موقعیت تمام میشود، هرگز مجموع آنها؛ ویرایشهای هملحظه را ببینید. |
erd_resize_table_group | groupId، x?، y?، width، height | مستطیل یک گروه را تنظیم میکند، در حالی که جدولهایش در جای خود میمانند. اگر x و y داده نشوند، گوشهٔ آن ثابت میماند. مستطیلی که جدولهای گروه را همراه با فاصلهٔ داخلیشان در خود جا ندهد رد میشود، با پیامی که کادری را که مستطیل باید دربر بگیرد مشخص میکند. |
erd_set_table_group | tableIds، groupId | جدولها را در یک گروه میگذارد و هر یک از گروهی که در آن بوده خارج میشود. مقدار null یا رشتهٔ خالی برای groupId آنها را از هر گروهی خارج میکند. |
تا وقتی گروهها با View Option → Table Groups پنهاناند، این ابزارها باز هم گروهها را اضافه و تغییر میدهند و این گروهها تا وقتی گروهها نمایش داده شوند پنهان میمانند؛ پنهان کردن گروهها را ببینید.
erd_sort_tables جدولهای هر گروه را کنار هم نگه میدارد، erd_import_dbml و erd_import_json گروهها را میآورند — وارد کردن را ببینید — و erd_read با groupNames، DDL گروههای انتخابشده را مینویسد.
نسخهای از ERD Editor که پیش از آمدن گروههای جدول منتشر شده، هنگام ذخیرهٔ فایل گروههای آن را حذف میکند، همانطور که افزونهٔ VS Code پیش از نسخهٔ 4.0.0 و پلاگینهای Obsidian و JetBrains پیش از نسخهٔ 1.0.0 چنین میکنند؛ بهروزرسانی را ببینید.
واژهنامهها
این ابزارها سه واژهنامهٔ زبانهٔ واژهنامه در ویرایشگر را ویرایش میکنند که نام منطقی یک جدول یا ستون نام فیزیکی خود را از آنها استخراج میکند:
- واژه یک واژهٔ استاندارد است که نامهای منطقی از آن ساخته میشوند، همراه با اختصاری که در نام فیزیکی مینویسد، مانند
MemberوMBR. - اصطلاح یک نام منطقی کامل است همراه با نام فیزیکیای که میدهد و، برای یک ستون، دامنهای که به آن پیوند میدهد، مانند
Member NumberباMBR_NOوIdentifier. - دامنه یک نوع دادهٔ نامدار است که ستونها به آن پیوند میخورند، مانند
IdentifierبرایINT.
| ابزار | آرگومانها | کاری که انجام میدهد |
|---|---|---|
erd_add_word | name، abbreviation، englishName?، description?، synonyms?، forbiddenWords? | یک واژه به انتهای واژهنامهٔ واژهها اضافه میکند و شناسهٔ آن را در createdIds برمیگرداند. synonyms و forbiddenWords با ویرگول از هم جدا میشوند: املاهای دیگر آن واژه، و واژههایی که نباید بهجای آن به کار روند. |
erd_update_word | wordId، name?، abbreviation?، englishName?، description?، synonyms?، forbiddenWords? | فیلدهای دادهشده را تغییر میدهد و بقیه را دستنخورده میگذارد. |
erd_remove_word | wordId | یک واژه را حذف میکند. |
erd_add_term | name، physicalName?، domainId?، domainName?، description?، synonyms? | یک اصطلاح به انتهای واژهنامهٔ اصطلاحات اضافه میکند و شناسهٔ آن را در createdIds برمیگرداند. بدون physicalName، اگر واژهها بتوانند، یک نام فیزیکی میسازند، مانند MBR_NO برای Member Number. |
erd_update_term | termId، name?، physicalName?، domainId?، domainName?، description?، synonyms? | فیلدهای دادهشده را تغییر میدهد و بقیه را دستنخورده میگذارد. name که در حالی داده شود که اصطلاح نام فیزیکی ندارد، یا همراه با physicalName خالی داده شود، نام فیزیکیای را هم که واژههایش میسازند مینویسد، اگر واژهها نامی بسازند. |
erd_remove_term | termId | یک اصطلاح را حذف میکند. |
erd_add_domain | name، category?، dataType، description? | یک دامنه به انتهای واژهنامهٔ دامنهها اضافه میکند و شناسهٔ آن را در createdIds برمیگرداند. category دامنهها را دستهبندی میکند، مانند Number یا Text. |
erd_update_domain | domainId، name?، category?، dataType?، description? | فیلدهای دادهشده را تغییر میدهد و بقیه را دستنخورده میگذارد. dataType تازه به هر ستونی که به دامنه پیوند خورده است میرسد و تا وقتی همگامسازی نوع داده در رابطهها روشن است در رابطهها پیش میرود، با همان قطع پیوندی که در erd_change_column_data_type رخ میدهد. |
erd_remove_domain | domainId | یک دامنه را حذف میکند. ستونهایی که به آن پیوند خوردهاند نوع دادهٔ خود را نگه میدارند و این ستونها و اصطلاحاتی که به آن پیوند خوردهاند هیچ دامنهای نشان نمیدهند: domainId آنها رشتهٔ خالی خوانده میشود. erd_undo پیوندها را برمیگرداند و ذخیره کردن آنها را در فایل نمینویسد. |
erd_derive_physical_names | scope، tableId?، columnId? | نامهای فیزیکی را دوباره از نامهای منطقی استخراج میکند، همانطور که استخراج دوبارهٔ نامهای فیزیکی در ویرایشگر انجام میدهد، برای یک ستون، یک جدول یا کل سند. |
- هر واژهنامه هر نام را فقط یک بار نگه میدارد، بنابراین نامی که ردیف دیگری از همان واژهنامه دارد با
invalidArgsرد میشود. نامها پس از حذف فاصلههای دو سر مقایسه میشوند و بزرگی و کوچکی حروف در نظر گرفته میشود، بنابراینMemberوmemberدو ناماند. - بهروزرسانی ردیف را با شناسهاش نام میبرد و دستکم یک فیلد میدهد. مقادیری که ردیف از قبل دارد چیزی را تغییر نمیدهند و هیچ مدخل واگردی ثبت نمیکنند؛ افزودن یا حذف همیشه یک مدخل ثبت میکند.
- دامنهٔ یک اصطلاح یا با
domainIdداده میشود، باnullیا رشتهٔ خالی برای نبود دامنه، یا باdomainName، با رشتهٔ خالی برای نبود دامنه.domainNameنخستین دامنه با آن نام را به ترتیب واژهنامه میگیرد و مقایسه مانند مقایسهٔ نامها انجام میشود. دادن هر دو، یاdomainNameکه هیچ دامنهای آن را ندارد، رد میشود.erd_set_column_domainدامنه را به همین شکل میگیرد. - تغییر یا حذف یک واژه یا اصطلاح نام هیچ چیزی را تغییر نمیدهد و هیچ پیوندی را قطع نمیکند: نامها و دامنههایی که داده است همانطور که هستند میمانند.
erd_derive_physical_namesنامها را دوباره استخراج میکند و دامنهای را که اکنون یک اصطلاح میدهد پیوند میدهد، اما ستونی که اکنون هیچ اصطلاحی با آن منطبق نیست، یا اصطلاحش هیچ دامنهای نمیدهد، دامنهای را که به آن پیوند خورده است نگه میدارد.erd_set_column_domainباdomainIdخالی پیوند آن را قطع میکند. - هیچ ابزاری واژهنامه را بهصورت CSV وارد یا صادر نمیکند، واژهنامه را مرتب نمیکند یا ردیفها را در یک موقعیت درج نمیکند، آنطور که زبانهٔ واژهنامه انجام میدهد.
erd_list ردیفها را فهرست میکند، erd_get همهٔ فیلدها را میدهد، قالب snapshot در erd_read همهٔ آنها را در بر دارد و erd_list_checks ایرادهایی را که واژهنامهها مییابند فهرست میکند؛ خواندن سند را ببینید.
erd_set_table_logical_name و erd_set_column_logical_name نام فیزیکی را همانطور استخراج میکنند که ویرایشگر هنگام نوشتن یک نام منطقی انجام میدهد؛ استخراج نامهای فیزیکی را ببینید:
- نام فقط تا وقتی استخراج میشود که خالی باشد یا خودش استخراج شده باشد، که خواندنها آن را بهصورت
nameDerived: trueنشان میدهند. نامی که خالی نیست و دستی نوشته شده است میماند و فقط نام منطقی نوشته میشود.erd_change_table_name،erd_change_column_name، وارد کردن SQL، GraphQL، DBML و AML و ستونهای کلید خارجیای کهerd_add_relationshipنامگذاری میکند، همگی نامها را دستی مینویسند. نامی که به رشتهٔ خالی تغییر یابد، با نام منطقی بعدی دوباره استخراج میشود. - اصطلاحی که نامش همان نام منطقی است در اولویت است و مقایسه مانند مقایسهٔ نامهای واژهنامه انجام میشود. این اصطلاح نام فیزیکی خود را میدهد، یا تا وقتی نام فیزیکی ندارد، نامی را که واژههایش میسازند. برای یک ستون، دامنهٔ اصطلاح را هم پیوند میدهد، حتی وقتی هیچ نامی استخراج نمیشود، و ستون نوع دادهٔ دامنه را میگیرد که تا وقتی همگامسازی نوع داده در رابطهها روشن است در رابطهها پیش میرود.
- اگر چنین اصطلاحی نباشد، واژهها نام را میسازند و اختصارهایشان با زیرخط به هم میپیوندند:
Member NumberنامMBR_NOرا میدهد. یا همه یا هیچ: یک مترادف، یک واژهٔ ممنوع، متنی که هیچ واژهای آن را فهرست نکرده است یا واژهای بدون اختصار هیچ نامی نمیسازد و نام همانطور که بود میماند. واژهها هیچ دامنهای را پیوند نمیدهند و اصطلاحی هم که دامنه ندارد چنین نمیکند، بنابراین ستون دامنهای را که به آن پیوند خورده است نگه میدارد. - ستونی که نام استخراجشدهاش را ستون دیگری از جدولش، بدون توجه به بزرگی و کوچکی حروف، از قبل دارد، نام،
nameDerivedو دامنهٔ خود را نگه میدارد. - پاک کردن یک نام منطقی نام فیزیکی را همانطور که هست باقی میگذارد. فراخوانیای که نام منطقیاش و آنچه استخراج میکند از قبل سر جایشان هستند، چیزی را تغییر نمیدهد و هیچ مدخل واگردی ثبت نمیکند.
erd_derive_physical_names یک scope میگیرد: column، با tableId و columnId، برای همان ستون؛ table، با tableId، برای نام جدول و همهٔ ستونهایش؛ یا document، بدون شناسه، برای همهٔ جدولها و ستونهایشان. گسترهای که شناسهٔ لازمش را نداشته باشد، یا شناسهای بگیرد که نمیپذیرد، رد میشود.
هر نام در این گستره که نام منطقی دارد، از جمله نامی که دستی نوشته شده است، به واژهنامهها برمیگردد و آنچه را اکنون میدهند میگیرد: نام فیزیکی یک اصطلاح و، برای یک ستون، دامنه و نوع آن، یا در غیر این صورت نامی که واژهها میسازند، که دامنهٔ ستون را همانطور که هست باقی میگذارد. نام منطقیای که چیزی استخراج نمیکند نام را همانطور که هست باقی میگذارد و nameDerived اکنون true است. نامی که نام منطقی ندارد همانطور که هست میماند، و همچنین ستونی که نام تازهاش را ستون دیگری از جدولش دارد، مانند دومین کلید خارجی به یک جدول، که nameDerived خود را هم نگه میدارد. یک بار erd_undo کل فراخوانی را واگرد میکند.
نامهای طرحوارهٔ واردشده دستی نوشتهشده به شمار میآیند، بنابراین برای نامگذاری آن از روی واژهنامهها، نامهای منطقی را تنظیم کنید و سپس erd_derive_physical_names را فراخوانی کنید. این فراخوانی نام فیزیکی خود اصطلاح را میدهد که تغییر واژههای اصطلاح آن را دوباره نمیسازد. بنابراین پس از تغییر واژههای یک اصطلاح، ابتدا اصطلاح را بهروزرسانی کنید: name آن را همراه با physicalName خالی بدهید تا واژهها آن را از نو بسازند، یا physicalName تازه را بدهید.
نسخهای از ERD Editor که پیش از آمدن زبانهٔ واژهنامه منتشر شده، هنگام ذخیرهٔ فایل نامهای منطقی، پیوندهای دامنه و ردیفهای واژهنامهٔ آن را حذف میکند، همانطور که افزونهٔ VS Code پیش از نسخهٔ 4.2.0 و پلاگینهای Obsidian و JetBrains پیش از نسخهٔ 1.2.0 چنین میکنند. از میان اینها، افزونهٔ نسخهٔ 4.0.0 یا 4.1.0 و پلاگینهای نسخهٔ 1.0.0 یا 1.1.0 همچنان بهصورت زنده با سرور ویرایش میکنند، اما نامهای منطقی، پیوندهای دامنه و ردیفهای واژهنامهای را که عامل مینویسد نه نشان میدهند و نه نگه میدارند؛ بهروزرسانی را ببینید.
تنظیمات
عامل تنظیمات خود طرحواره را تعیین میکند: پایگاه داده، نام آن و اسکریپتهای طرحواره SQL.
هر تنظیم دیگری که سند ذخیره میکند بر عهدهٔ کاربر است تا در ویرایشگر تعیین کند: نمایش نامها، کلیدهای روشن/خاموش گزینههای نمایش، گزینههای زبانهٔ تنظیمات، زبان کد و شیوههای نگارش نام در مولد کد، نوع علامت نقلقول و قفلها.
هیچ ابزاری آنها را تغییر نمیدهد، جز ابزارهای وارد کردن در حالت replace: erd_import_json تنظیمات و قفلهای سندی را که بارگذاری میکند میآورد و چهار ابزار دیگر نما را به ابتدای بوم برمیگردانند؛ وارد کردن را ببینید.
سرور نسخهٔ 1.0.0 ابزارهایی را که آنها را تنظیم میکردند حذف کرد: erd_set_language، erd_set_table_name_case، erd_set_column_name_case، erd_set_bracket_type، erd_set_relationship_data_type_sync، erd_set_relationship_optimization، erd_set_column_order، erd_set_max_width_comment، erd_set_ignore_save_settings و erd_set_show.
erd_list و قالب snapshot در erd_read تنظیمات را همانطور که فایل ذخیره میکند گزارش میدهند، و lockSettings برای هر قفل یک پرچم دارد: viewport، canvasType، language، tableNameCase، columnNameCase، bracketType و unlockNameViewMode.
آخری برعکس خوانده میشود: تا وقتی قفل Name View روشن است false است، همانطور که در یک سند جدید و در فایلی که پیش از وجود این قفل ذخیره شده است روشن است، و وقتی کاربر قفل را خاموش کند true میشود.
اگر زبان کد، شیوهٔ نگارش نام یا نوع علامت نقلقول قفل باشد، با مقدار قفلشدهاش گزارش میشود، یعنی مقداری که فایل نگه میدارد و هر ویرایشگری با آن باز میشود، هر چه صفحهٔ یک ویرایشگر نشان دهد. نما، زبانه و نمایش نامها گزارش نمیشوند. عامل نامهای منطقی را میخواند و مینویسد، نمایش نامها هرچه نشان دهد.
erd_set_ddl_script یک مدخل واگرد ثبت میکند. erd_set_database و erd_set_database_name هیچ مدخلی ثبت نمیکنند، پس erd_undo نمیتواند آنها را واگرد کند.
| ابزار | آرگومانها | کاری که انجام میدهد |
|---|---|---|
erd_set_database | value | پایگاه داده را تنظیم میکند: MariaDB، MSSQL، MySQL، Oracle، PostgreSQL، SQLite، Databricks یا Snowflake. انواع دادهٔ پایگاه داده و نیز DDL خروجی erd_read را در صورتی که vendor داده نشود تعیین میکند. |
erd_set_database_name | value | نام پایگاه داده را تنظیم میکند، همان نامی که سرآیندهای use و createAndUse در erd_read میآورند. |
erd_set_ddl_script | position، sql | یکی از دو اسکریپتی را که پیرامون جدولها نوشته میشوند تنظیم میکند؛ اسکریپتهای پیش و پس از جدولها را ببینید. position یا before است که پیش از جدولها نوشته میشود، مانند CREATE EXTENSION یا CREATE SCHEMA، یا after که پس از آنها نوشته میشود، مانند GRANT یا CREATE VIEW. sql کل اسکریپت را جایگزین میکند، حداکثر 10,000 نویسه، و رشتهٔ خالی آن را حذف میکند. ابتدا اسکریپت فعلی را با قالب scripts در erd_read بخوانید. |
اسکریپت همانطور که هست در DDL همهٔ پایگاههای داده قرار میگیرد، پس آن را برای پایگاه دادهٔ سند بنویسید. در MSSQL، پس از اسکریپتی که خط آخرش GO نیست، یک خط GO اضافه میشود.
نسخهای از ERD Editor که پیش از آمدن این اسکریپتها منتشر شده، هنگام ذخیرهٔ فایل اسکریپتهای آن را حذف میکند، همانطور که افزونهٔ VS Code پیش از نسخهٔ 4.0.0 و پلاگینهای Obsidian و JetBrains پیش از نسخهٔ 1.0.0 چنین میکنند؛ بهروزرسانی را ببینید.
وارد کردن
این ابزارها طرحواره را همانطور میخوانند که منوی وارد کردن ویرایشگر میخواند؛ وارد کردن یا صادر کردن فایلها را ببینید.
هر یک متن را در value و حالت را در mode میگیرد: replace که پیشفرض است، یا append.
| ابزار | آرگومانها | کاری که انجام میدهد |
|---|---|---|
erd_import_sql | value، mode? | DDL به زبان SQL را بارگذاری میکند، یعنی دستورهای CREATE TABLE و مانند آن. |
erd_import_graphql | value، mode? | یک SDL از GraphQL را بارگذاری میکند. |
erd_import_dbml | value، mode? | DBML را بارگذاری میکند. هر TableGroup به یک گروه جدول از جدولهایی که نام میبرد تبدیل میشود؛ DBML را ببینید. |
erd_import_aml | value، mode? | AML را بارگذاری میکند. |
erd_import_json | value، mode? | یک سند JSON از erd-editor را بارگذاری میکند، مانند یک فایل .erd.json دیگر. |
replace جای سند را میگیرد و erd_undo سند پیشین را برمیگرداند:
erd_import_sql،erd_import_graphql،erd_import_dbmlوerd_import_amlهمهٔ جدولها، رابطهها، شاخصها، یادداشتها و گروههای جدول را جایگزین میکنند. تنظیمات سند را، از جمله قفلهایش، نگه میدارند، جز نما که با بزرگنمایی 100% به ابتدای بوم برمیگردد، و واژهنامههای واژهها، اصطلاحات و دامنههای آن را هم نگه میدارند. جدولهایی که میآورند هیچ نام منطقیای ندارند و به هیچ دامنهای پیوند نمیخورند.erd_import_jsonکل سند را، از جمله تنظیمات و واژهنامههایش، جایگزین میکند: تنظیمات، قفلها، واژهها، اصطلاحات و دامنههای JSON جای همینها در این سند را میگیرند، و اگر JSON هیچ قفلی ثبت نکرده باشد، همهٔ قفلها روشن میشوند و نما در ابتدای بوم قرار میگیرد. هر بیننده نمایش نامهای خودش را نگه میدارد، مگر اینکه قفلName Viewدر JSON خاموش باشد، که در این صورت نمایش نامهای آن را میآورد. برای نگه داشتن تنظیمات این سند، از متنی که قالبjsonدرerd_readمیدهد شروع کنید. متن خالی یک سند تازه میدهد، مانند سندی کهerd_open_documentباcreateمیسازد.
در ویرایشگری با افزونهٔ VS Code نسخهٔ 4.3.0 یا بالاتر یا پلاگین Obsidian یا JetBrains نسخهٔ 1.3.0 یا بالاتر، یک replace و erd_undo یا erd_redo آن هم کشیدن رابطهای را که مشغول آن هستید پایان میدهند؛ زنده را ببینید.
append محتوای واردشده را به سند اضافه میکند، همانطور که وارد کردن و افزودن در ویرایشگر انجام میدهد، و یک بار erd_undo کل آنچه افزوده شده را برمیدارد:
- محتوای متن بهصورت موجودیتهای تازه با شناسههای تازه وارد میشود، در بلوکی زیر همهٔ محتوای سند، از جمله یادداشتهای پنهان و گروههای جدول، همتراز با لبهٔ چپ آن. هر جدول و تنظیمی که از قبل وجود دارد میماند، از جمله جدولی همنام: هیچ چیز بر اساس نام ادغام نمیشود.
- رابطهها و شاخصها فقط میان جدولهایی میآیند که همراه وارد کردن آمدهاند، پس کلید خارجیای که به جدولی اشاره کند که متن آن را تعریف نکرده، کنار گذاشته میشود.
erd_import_sql،erd_import_graphqlوerd_import_amlجدولها را همراه با رابطهها و شاخصهایشان اضافه میکنند وerd_import_dbmlگروههای جدول خود را هم.erd_import_jsonجدولها، رابطهها، شاخصها، یادداشتها و گروههای جدول را اضافه میکند و هرگز تنظیماتش را اضافه نمیکند، و متن خالی را رد میکند. جدولها و ستونهای آن نامهای منطقی خود را میآورند، اما هیچ ستونی به دامنهای پیوند نمیخورد و هیچیک از واژهها، اصطلاحات یا دامنههای JSON وارد نمیشود.
سند JSON چیدمان خودش را، از جمله گروههای جدولش، حفظ میکند: با replace همان جایی که جدولهایش را قرار داده، و با append درون بلوک افزودهشده.
جدولهای SQL، GraphQL، DBML و AML در ردیفها چیده میشوند، ابتدا جدولهای با کمترین ستون و جدولهای هر گروه کنار هم، همانطور که erd_sort_tables آنها را میچیند، و هرگز با Flow، آنطور که قابلیت وارد کردن خود ویرایشگر در صورت امکان آنها را میچیند. این چهار ابزار در هر دو حالت متن خالی را رد میکنند.
erd_batch
erd_batch چند ابزار ویرایش را به ترتیب بهصورت یک ویرایش اجرا میکند، یا همه یا هیچ.
operationsحداکثر 100 ورودی دارد، هر کدام به شکل{ tool, as?, args? }، که در آنtoolیک ابزار ویرایش است وargsآرگومانهای ابزار بدونpathاست. ابزار خواندن، مانندerd_list_checks، رد میشود.- عملیاتها ابتدا روی یک کپی از سند آزموده میشوند. عملیات ردشده نام برده میشود، مانند
operations[1] erd_remove_table: …، و هیچ چیز اعمال نمیشود. - یک بار
erd_undoکل دسته را واگرد میکند، جز عملیاتهایی که نمیتواند واگرد کند وundoNoteدر نتیجه نام آنها را میآورد: عملیاتهای ابزاری که هیچ مدخل واگردی ثبت نمیکند، مانندerd_set_database، و عملیاتهایی که سند را بدون ثبت ورودی واگرد تغییر دادهاند، مانند یکerd_move_table_groupکوتاه.erd_undoدستهای را که اصلاً هیچ ورودی واگردی ثبت نکرده نادیده میگیرد.historyEntriesدر نتیجه ورودیهای تاریخچهٔ ویرایشگر را درون دسته میشمارد، نه فراخوانیهایerd_undoرا. - در نشست زنده، ویرایشگر یا کل دسته را میپذیرد یا هیچ بخشی از آن را.
عامل پیش از فراخوانی نمیتواند شناسههایی را که یک دسته میسازد بداند، پس عملیاتی که با as نامگذاری شده به یک عملیات بعدی اجازه میدهد به آنها ارجاع دهد: $name یا $name.0 برای نخستین شناسهٔ ساختهشده، $name.1 برای دومی و $name.last برای آخرین.
نام از حروف ASCII، ارقام و زیرخط تشکیل میشود، با رقم شروع نمیشود و فقط به یک عملیات تعلق دارد.
ارجاع فقط جایی به شناسه تبدیل میشود که آرگومان شناسهٔ یک موجودیت را میگیرد، از جمله wordId، termId و domainId، پس نام یا توضیحی که $x است متن باقی میماند.
domainName هم متن است، اما هنگام اجرای عملیاتش خوانده میشود، بنابراین میتواند دامنهای را نام ببرد که عملیات پیشینی از همان دسته اضافه کرده است.
یک جدول با ستونهایش و یک رابطه، در یک فراخوانی:
{
"path": "shop.erd.json",
"operations": [
{ "tool": "erd_add_table", "as": "users" },
{ "tool": "erd_change_table_name", "args": { "tableId": "$users", "value": "users" } },
{ "tool": "erd_add_column", "as": "uid", "args": { "tableId": "$users" } },
{ "tool": "erd_change_column_name", "args": { "tableId": "$users", "columnId": "$uid", "value": "id" } },
{ "tool": "erd_change_column_data_type", "args": { "tableId": "$users", "columnId": "$uid", "value": "BIGINT" } },
{ "tool": "erd_set_column_primary_key", "args": { "tableId": "$users", "columnId": "$uid", "value": true } },
{ "tool": "erd_add_table", "as": "orders" },
{ "tool": "erd_change_table_name", "args": { "tableId": "$orders", "value": "orders" } },
{ "tool": "erd_add_relationship", "args": { "startTableId": "$users", "endTableId": "$orders", "relationshipType": "ZeroN", "onDelete": "cascade" } }
]
}
جدول users و کلید id آن پیش از رابطه نامگذاری شدهاند، پس ستون کلید خارجیای که رابطه به orders اضافه میکند users_id است.
واژهها، یک دامنه و یک اصطلاح، سپس جدولی که بر اساس نامهای منطقیاش از روی آنها نامگذاری میشود:
{
"path": "shop.erd.json",
"operations": [
{ "tool": "erd_add_word", "args": { "name": "Member", "abbreviation": "MBR" } },
{ "tool": "erd_add_word", "args": { "name": "Number", "abbreviation": "NO" } },
{ "tool": "erd_add_word", "args": { "name": "Name", "abbreviation": "NM" } },
{ "tool": "erd_add_domain", "as": "identifier", "args": { "name": "Identifier", "dataType": "INT" } },
{ "tool": "erd_add_term", "args": { "name": "Member Number", "domainId": "$identifier" } },
{ "tool": "erd_add_table", "as": "members" },
{ "tool": "erd_set_table_logical_name", "args": { "tableId": "$members", "value": "Member" } },
{ "tool": "erd_add_column", "as": "no", "args": { "tableId": "$members" } },
{ "tool": "erd_set_column_logical_name", "args": { "tableId": "$members", "columnId": "$no", "value": "Member Number" } },
{ "tool": "erd_add_column", "as": "nm", "args": { "tableId": "$members" } },
{ "tool": "erd_set_column_logical_name", "args": { "tableId": "$members", "columnId": "$nm", "value": "Member Name" } }
]
}
اصطلاح MBR_NO را از واژههایش میسازد و جدول MBR نام میگیرد. ستون Member Number نام MBR_NO و دامنهٔ اصطلاح را میگیرد، بنابراین به Identifier پیوند میخورد و نوعش INT میشود، و Member Name، که هیچ اصطلاحی آن را ندارد، بهصورت MBR_NM ساخته میشود.
نتایج
یک ویرایش با یک خط JSON پاسخ میدهد:
{"tool":"erd_add_table","mode":"live","createdIds":["03h17be2plxpj5n59tqag7ogj"],"batches":1,"historyEntries":1}
| فیلد | معنا |
|---|---|
mode | live یا headless؛ زنده و بدون رابط کاربری را ببینید. |
saved | true در نتیجهٔ هر ویرایش در حالت بدون رابط کاربری، erd_batch، erd_undo و erd_redo: هنگامی که فراخوانی پاسخ میدهد، فایل تغییر را در خود دارد، بنابراین چیزی برای ذخیره باقی نمیماند. نتیجهٔ زنده saved ندارد، زیرا تغییر در اختیار ویرایشگر است؛ ذخیره کردن را ببینید. |
createdIds | شناسههای آنچه فراخوانی ساخته است، به ترتیب. |
batches، historyEntries | تعداد دستههای تغییری که فراخوانی فرستاده و تعداد مدخلهای تاریخچهٔ ویرایشگر که ثبت کرده است. |
undoable، undoNote | وقتی erd_undo این فراخوانی را نادیده بگیرد، undoable برابر false است و undoNote دلیلش را میگوید: ابزار هیچ مدخل واگردی ثبت نمیکند، فراخوانی سند را بدون ثبت مدخل واگرد تغییر داده است، همانطور که erd_move_table_group کمتر از 20 پیکسل چنین میکند، یا سند از قبل همان مقدار را داشته است. نتیجهٔ erd_batch همیشه یک undoNote دارد. وقتی دسته ورودی واگرد ثبت کرده باشد، این پیام میگوید که یک بار erd_undo دسته را واگرد میکند و هر عملیاتی را که دستنخورده باقی میماند نام میبرد؛ وقتی هیچ ورودیای ثبت نکرده باشد، نتیجه undoable: false دارد و پیام میگوید که erd_undo آن را نادیده میگیرد. |
mismatch | زمانی وجود دارد که فراخوانی تعداد دستهها یا مدخلهای تاریخچه را متفاوت از آنچه ابزار اعلام میکند ساخته باشد. |
notes | زمانی وجود دارد که چیزی در نشست تغییر کرده باشد، مانند ویرایشگری که بسته شده یا دیگر به سند سرویس نمیدهد، یا فایلی که روی دیسک تغییر کرده است. |
پاسخ رد یک نتیجهٔ خطاست که یک کد و پیامی دارد که میگوید چه باید کرد:
{"error":{"code":"notFound","message":"tableId nope names no live table; read the document for current ids"}}
code | علت |
|---|---|
notFound | شناسهای به هیچ چیزی که اکنون وجود داشته باشد اشاره نمیکند، یا فایل وجود ندارد. |
invalidArgs | آرگومانی داده نشده یا مقدار نادرستی دارد. |
invalidPath | مسیر یک سند ERD نیست. در Windows همچنین مسیری با نامی که Windows آن را همانطور که نوشته شده ذخیره نمیکند، یا مسیری که به سندی میرسد که یک ویرایشگر آن را با مسیر دیگری در اختیار دارد، و پیام آن مسیر دیگر را نام میبرد. |
invalidDocument | فایل سندی نیست که ویرایشگر بتواند بخواند. |
tooLarge | نتیجهٔ خواندن در یک پاسخ نمیگنجد. |
blocked | ویرایشگری که هابش خاموش است سند را در اختیار دارد. پیام میگوید چگونه آن را روشن کنید: در VS Code، به فضای کاری اعتماد کنید و تنظیم dineug.erd-editor.agentHub.enabled را روشن کنید، یا پنجره را دوباره بارگذاری کنید؛ در Obsidian، گزینهٔ Coding agents را روشن کنید، یا Obsidian را دوباره بارگذاری کنید؛ در یک IDE از JetBrains، گزینهٔ Coding agents را روشن کنید، یا اگر روشن است IDE را دوباره راهاندازی کنید. |
hubDisabled | یک IDE از JetBrains سند را فقط در پروژهای در اختیار دارد که به آن اعتماد ندارد. خواندن همچنان کار میکند؛ برای اینکه عامل بتواند ویرایش کند، به پروژه اعتماد کنید. |
conflict | فایل در طول فراخوانی روی دیسک تغییر کرد. هیچ چیز نوشته نشد. |
hubAppeared، hubGone | ویرایشگری شروع به سرویس دادن به سندی کرد که عامل آن را روی دیسک ویرایش میکرد، یا ویرایشگری که به آن سرویس میداد هنوز در حال اجراست اما فایل قفل و اتصالش از بین رفتهاند. هیچ چیز نوشته نشد. |
notSaved | erd_save نتوانست سند ویرایشگر را ذخیره کند. |
readonly | ویرایشگر سند را بهصورت فقط خواندنی در اختیار دارد، مانند فایلی که نمیتواند در آن بنویسد یا نمیتواند آن را بهصورت نمودار بخواند. بدون ویرایشگر، خود فایل فقط خواندنی است، مانند فایلی از Perforce یا TFVC که چکاوت نشده است. هیچ چیز نوشته نشد. |
protocolMismatch | افزونه یا پلاگین ERD Editor در ویرایشگر و سرور از نسخههای متفاوتی از پروتکل استفاده میکنند، مانند سرور نسخهٔ 1.0.0 یا بالاتر با افزونهٔ VS Code نسخهٔ 3.x. خواندنها هم رد میشوند و پیام سمتی را که باید بهروزرسانی شود نام میبرد؛ بهروزرسانی را ببینید. |
hubUnreachable، timeout، disconnected | هاب یک ویرایشگر اتصال را نپذیرفت، در 30 ثانیه پاسخ نداد، یا در طول فراخوانی اتصال را قطع کرد. در Windows، hubUnreachable همچنین به این معناست که Windows عامل را از هاب دور نگه داشته است: ویرایشگر با دسترسیهایی بیشتر از عامل اجرا میشود، مانند وقتی که ویرایشگر با دسترسی مدیر سیستم اجرا شده و عامل نه، یا عامل در یک سندباکس اجرا میشود. |
کدهای دیگر کمیابترند و هر پاسخ رد پیامی دارد که میگوید چه اتفاقی افتاده است.
ابزارهای ویرایش، erd_batch و چهار ابزار خواندن، آرگومانی را که تعریف نکردهاند یا آرگومانی با نوع نادرست را پیش از دست زدن به سند با خطای invalid params در JSON-RPC (-32602) رد میکنند، پس آرگومانی که اشتباه نوشته شده هرگز بیصدا کنار گذاشته نمیشود.
پنج ابزار نشست آرگومانهایی را که نمیشناسند نادیده میگیرند.