پرش به محتوای اصلی

ابزارها

سرور 77 ابزار ارائه می‌دهد: پنج ابزار نشست، چهار ابزار خواندن، 67 ابزار ویرایش که هر یک برای یک عملیات ویرایش است و erd_batch که چند ابزار ویرایش را به‌صورت یک ویرایش اجرا می‌کند.

همهٔ ابزارها به‌جز erd_list_documents مسیر سند را در path به‌عنوان نخستین آرگومان می‌گیرند و در جدول‌های زیر این آرگومان آورده نشده است. آرگومانی که با ? مشخص شده، اختیاری است.

ابزارهای نشست​

ابزارآرگومان‌هاکاری که انجام می‌دهد
erd_list_documentsاسناد ERD را با path، open، active، dirty و readonly فهرست می‌کند: اسناد ویرایشگری که به پوشهٔ کاری سرویس می‌دهد، که در یک IDE از JetBrains شامل همهٔ پروژه‌های باز است، و در غیر این صورت فایل‌های ERD درون پوشهٔ کاری.
erd_open_documentcreate?سندی را برای ویرایش باز می‌کند؛ اگر ویرایشگری به آن سرویس دهد، در ERD Editor همان ویرایشگر. با create، اگر فایل وجود نداشته باشد ابتدا آن را می‌سازد و به نامی که پسوند ندارد .erd.json افزوده می‌شود.
erd_saveسندی را که در اختیار یک ویرایشگر است ذخیره می‌کند. VS Code ویرایش‌های عامل را تا فراخوانی این ابزار ذخیره‌نشده نگه می‌دارد؛ Obsidian و یک IDE از JetBrains آن‌ها را مانند ویرایش‌های خودتان ذخیره می‌کنند و این ابزار آن‌ها را بی‌درنگ می‌نویسد. در حالت بدون رابط کاربری، هر ویرایش از قبل نوشته شده است، همان‌طور که saved: true در نتیجهٔ آن می‌گوید، و این ابزار کاری انجام نمی‌دهد.
erd_undoآخرین ویرایش این عامل را واگرد می‌کند و هرگز ویرایش‌های خودتان را واگرد نمی‌کند. فراخوانی‌هایی که هیچ مدخل واگردی ثبت نکرده‌اند نادیده گرفته می‌شوند و نامشان ذکر می‌شود.
erd_redoویرایشی را که erd_undo آخرین بار واگرد کرده است دوباره اعمال می‌کند.

برای آنچه ذخیره کردن و واگرد در هر حالت انجام می‌دهند، زنده و بدون رابط کاربری را ببینید.

خواندن سند​

ابزارآرگومان‌هاکاری که انجام می‌دهد
erd_listquery?، offset?، limit?، namesOnly?تنظیمات و تعدادها، سپس صفحه‌ای از جدول‌ها با شاخص‌ها و رابطه‌هایشان، هر جدول با شناسه، موقعیت و اندازه‌اش روی بوم، تعداد ستون‌ها، نام منطقی‌اش اگر داشته باشد و گروه جدولش اگر در گروهی باشد. اگر جست‌وجو نکند، پس از جدول‌ها گروه‌های جدول، یادداشت‌ها و سپس دامنه‌ها، اصطلاحات و واژه‌ها می‌آیند.
erd_gettableIds?، tableNames?، relationshipIds?، indexIds?، memoIds?، tableGroupIds?، wordIds?، termIds?، domainIds?موجودیت‌های مشخص‌شده، به‌طور کامل: جدول‌ها با ستون‌ها و گروه جدولشان، رابطه‌ها با ستون‌ها و onDelete و onUpdate آن‌ها، شاخص‌ها با ستون‌هایشان، یادداشت‌ها با متنشان، گروه‌های جدول با جدول‌هایشان، و واژه‌ها، اصطلاحات و دامنه‌ها با همهٔ فیلدهایشان.
erd_readformat، vendor?، statements?، header?، logicalNameAsComment?، tableIds?، tableNames?، groupNames?کل سند یک‌جا در یکی از چهار قالب، یا DDL فقط برخی جدول‌ها یا گروه‌های جدول.
erd_list_checkslevel?، 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آنچه پاسخ می‌دهد
snapshotJSON فشرده‌ای شامل همهٔ موجودیت‌ها با شناسه‌هایشان، از جمله گروه‌های جدول و ردیف‌های واژه‌ها، اصطلاحات و دامنه‌ها، و تنظیمات همراه با اسکریپت‌های طرح‌واره SQL. آنچه را از یک بیننده به بینندهٔ دیگر فرق می‌کند کنار می‌گذارد: عرض‌های اندازه‌گیری‌شده، ترتیب لایه‌ها، نما، زبانه و نمایش نام‌ها. در طرح‌وارهٔ بزرگ حجیم است.
sqlDDL برای یکی از هشت پایگاه داده: 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"]}
codelevelType در برگهآنچه می‌یابد
duplicateNameerrorDuplicate nameنامی که دو ردیف از یک واژه‌نامه در آن مشترک‌اند. هر یک از این ردیف‌ها فهرست می‌شود.
unknownDomainerrorUnknown domainستون یا اصطلاحی که به دامنه‌ای پیوند خورده است که سند دیگر آن را فهرست نمی‌کند. text نام آن دامنه است، یا وقتی نامی شناخته نیست، شناسهٔ آن.
forbiddenWorderrorForbidden wordواژه‌ای که یکی از واژه‌ها آن را به‌عنوان واژهٔ ممنوع فهرست کرده است، در نام منطقی یک جدول یا ستون یا در نام یک اصطلاح. suggestions واژه‌های استاندارد هستند.
unregisteredWordwarningUnregistered wordمتنی که هیچ واژه‌ای آن را فهرست نکرده است، در همان جاها.
synonymWordwarningSynonymمترادفی که به‌جای یک واژهٔ استاندارد به کار رفته است، در همان جاها. suggestions واژه‌های استاندارد هستند.
physicalNameMismatchwarningPhysical name mismatchنام فیزیکی جدول یا ستونی که با نامی که اصطلاح نام منطقی آن می‌دهد فرق دارد. پیشنهاد، نام فیزیکی اصطلاح است، یا تا وقتی اصطلاح نام فیزیکی ندارد، نامی که واژه‌هایش می‌سازند.
domainTypeMismatchwarningDomain type mismatchستونی که نوع داده‌اش با نوع دامنه‌ای که به آن پیوند خورده است یکی نیست. text نوع ستون است و پیشنهاد، نوع دامنه.

اینکه هر بررسی یک نام را چگونه می‌خواند در هر بررسی چه می‌یابد توضیح داده شده است.

ابزارهای ویرایش​

شناسه‌ها از erd_list و erd_get به دست می‌آیند، یا از createdIds فراخوانی‌ای که آن موجودیت را ساخته است. شناسهٔ تازه از 25 حرف کوچک و رقم تشکیل شده است، مانند 03h17be2plxpj5n59tqag7ogj، در حالی که شناسه‌ای که سند از قبل دارد شکل خود را حفظ می‌کند، پس از شکل یک شناسه هیچ نتیجه‌ای نگیرید. x و y لبه‌های چپ و بالا روی بوم به پیکسل هستند، و مقدار رنگ یک رنگ هگز CSS مانند #3b82f6 است یا رشتهٔ خالی که رنگ را حذف می‌کند.

جدول‌ها​

ابزارآرگومان‌هاکاری که انجام می‌دهد
erd_add_tableیک جدول خالی در جایی خالی اضافه می‌کند و شناسهٔ آن را در createdIds برمی‌گرداند.
erd_remove_tabletableIdیک جدول را همراه با ستون‌ها، شاخص‌ها و همهٔ رابطه‌هایی که به آن متصل‌اند حذف می‌کند.
erd_change_table_nametableId، valueنام یک جدول را تغییر می‌دهد. پس از آن، نام دستی نوشته‌شده به شمار می‌آید، بنابراین یک نام منطقی بعدی تا وقتی نام خالی نیست آن را همان‌طور که هست باقی می‌گذارد؛ واژه‌نامه‌ها را ببینید.
erd_change_table_commenttableId، valueتوضیح یک جدول را تنظیم می‌کند. رشتهٔ خالی آن را پاک می‌کند.
erd_set_table_logical_nametableId، valueنام منطقی یک جدول را تنظیم می‌کند. رشتهٔ خالی آن را پاک می‌کند و نام را باقی می‌گذارد. تا وقتی نام جدول خالی است یا استخراج شده است، واژه‌نامه‌ها آن را از نام منطقی استخراج می‌کنند؛ واژه‌نامه‌ها را ببینید. اصطلاح به جدول هیچ دامنه‌ای نمی‌دهد.
erd_change_table_colortableId، colorرنگ یک جدول را تنظیم می‌کند.
erd_move_tabletableId، x، yیک جدول را به موقعیتی روی بوم جابه‌جا می‌کند.
erd_move_tablespositionsچند جدول را در یک ویرایش جابه‌جا می‌کند که یک بار erd_undo آن را واگرد می‌کند. positions برای هر جدول یک { tableId, x, y } دارد و هر جدول حداکثر یک بار در آن می‌آید.
erd_sort_tablesهمهٔ جدول‌ها را در ردیف‌هایی روی بوم می‌چیند، ابتدا جدول‌های با کمترین ستون، همان‌طور که erd_import_sql، erd_import_graphql، erd_import_dbml و erd_import_aml آن‌ها را می‌چینند. جدول‌های یک گروه جدول کنار هم می‌مانند و کادر هر گروه طوری تنظیم می‌شود که دور آن‌ها را بگیرد.

ستون‌ها​

ابزارآرگومان‌هاکاری که انجام می‌دهد
erd_add_columntableIdیک ستون خالی به یک جدول اضافه می‌کند و شناسهٔ آن را در createdIds برمی‌گرداند.
erd_remove_columnstableId، columnIdsستون‌هایی را از یک جدول حذف می‌کند، همراه با رابطه‌ها و ورودی‌های شاخصی که از آن‌ها استفاده می‌کنند.
erd_change_column_nametableId، columnId، valueنام یک ستون را تغییر می‌دهد. پس از آن، نام دستی نوشته‌شده به شمار می‌آید، مانند نام جدول.
erd_change_column_data_typetableId، columnId، valueنوع داده را تنظیم می‌کند، مانند INT یا VARCHAR(255). تا وقتی همگام‌سازی نوع داده در رابطه‌ها روشن است، تغییر مانند ویرایشگر در هر دو جهت رابطه‌ها پیش می‌رود: نوع serial به‌صورت نوع عدد صحیحی که ذخیره می‌کند به کلیدهای خارجی می‌رسد، همان‌طور که erd_add_relationship آن را کپی می‌کند، و کلید serial وقتی یکی از کلیدهای خارجی‌اش تغییر کند نوع خود را نگه می‌دارد و تغییر همان‌جا متوقف می‌شود. روشن یا خاموش کردن همگام‌سازی با کاربر است و erd_list آن را به‌صورت relationshipDataTypeSync گزارش می‌کند. پیوند ستونی که به یک دامنه پیوند خورده است، وقتی به نوعی غیر از نوع دامنه تنظیم شود، از آن دامنه قطع می‌شود، و پیوند هر ستونی که همگام‌سازی به آن می‌رسد و نوع تازه‌اش با نوع دامنهٔ خودش فرق دارد نیز قطع می‌شود؛ قطع پیوند را ببینید.
erd_change_column_defaulttableId، columnId، valueمقدار پیش‌فرض را به‌صورت متن SQL تنظیم می‌کند. رشتهٔ خالی آن را پاک می‌کند.
erd_change_column_commenttableId، columnId، valueتوضیح را تنظیم می‌کند. رشتهٔ خالی آن را پاک می‌کند.
erd_set_column_logical_nametableId، columnId، valueنام منطقی یک ستون را تنظیم می‌کند. رشتهٔ خالی آن را پاک می‌کند و نام را باقی می‌گذارد. تا وقتی نام ستون خالی است یا استخراج شده است، واژه‌نامه‌ها آن را استخراج می‌کنند و ستون به دامنهٔ اصطلاح پیوند می‌خورد و نوع دادهٔ آن دامنه را می‌گیرد؛ واژه‌نامه‌ها را ببینید.
erd_set_column_domaintableId، columnId، domainId?، domainName?یک ستون را به دامنه‌ای پیوند می‌دهد که با شناسه یا با نام، یکی از این دو، داده می‌شود. ستون نوع دادهٔ دامنه را می‌گیرد که تا وقتی همگام‌سازی نوع داده در رابطه‌ها روشن است، در رابطه‌ها پیش می‌رود، با همان قطع پیوندی که در erd_change_column_data_type رخ می‌دهد. domainId برابر null یا رشتهٔ خالی، یا domainName خالی، پیوند ستون را قطع می‌کند و نوعش را نگه می‌دارد.
erd_set_column_primary_keytableId، columnId، valuetrue ستون را بخشی از کلید اصلی می‌کند و false آن را از کلید اصلی بیرون می‌آورد.
erd_set_column_uniquetableId، columnId، valueتعیین می‌کند ستون یکتا باشد یا نه.
erd_set_column_not_nulltableId، columnId، valueتعیین می‌کند ستون NOT NULL باشد یا نه.
erd_set_column_auto_incrementtableId، columnId، valueتعیین می‌کند ستون افزایش خودکار داشته باشد یا نه.
erd_move_columntableId، 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_relationshipstartTableId، endTableId، relationshipType، onDelete?، onUpdate?دو جدول را به هم مرتبط می‌کند. کلید اصلی والد را به‌صورت ستون‌های کلید خارجی در فرزند کپی می‌کند و اگر والد کلید اصلی نداشته باشد، ابتدا یک ستون کلید اصلی می‌سازد. هر ستون کلید خارجی همان‌طور نام‌گذاری می‌شود که رسم یک رابطه در ویرایشگر آن را نام‌گذاری می‌کند: از کلید id در جدول users نام users_id به دست می‌آید و کلیدی مانند member_id نام خود را حفظ می‌کند؛ نام ستون‌های کلید خارجی را ببینید. هر یک نوع دادهٔ کلید خود را کپی می‌کند، جز اینکه کلید serial نوع عدد صحیحی را که ذخیره می‌کند می‌دهد، مانند integer برای serial4، و نوع serial ساده بیرون از PostgreSQL، MySQL و MariaDB همان serial می‌ماند؛ رابطه‌های شناسا را ببینید. هر یک نام منطقی کلید خود را هم می‌گیرد و به دامنه‌ای که کلیدش به آن پیوند خورده است پیوند می‌خورد، مگر اینکه کلید serial نوع دیگری به آن بدهد. createdIds آن ستون کلید تازه را اگر ساخته شده باشد، ستون‌های کلید خارجی و در آخر شناسهٔ رابطه را دارد.
erd_link_columnsstartTableId، startColumnIds، endTableId، endColumnIds، relationshipType، onDelete?، onUpdate?رابطه‌ای میان ستون‌هایی که از قبل وجود دارند رسم می‌کند و ستون‌های آغاز و پایان را بر اساس موقعیت جفت می‌کند. نام هیچ ستونی را تغییر نمی‌دهد، هیچ نوع داده‌ای را عوض نمی‌کند و هیچ نام منطقی یا دامنه‌ای را کپی نمی‌کند.
erd_remove_relationshiprelationshipIdیک خط رابطه را حذف می‌کند. ستون‌های کلید خارجی آن در جدول می‌مانند.
erd_change_relationship_typerelationshipId، relationshipTypeکاردینالیتی یک رابطه را تغییر می‌دهد.
erd_change_relationship_on_deleterelationshipId، onDeleteکنش ON DELETE یک رابطه را تنظیم می‌کند: اینکه حذف یک ردیف والد با ردیف‌های فرزندش چه می‌کند.
erd_change_relationship_on_updaterelationshipId، onUpdateکنش ON UPDATE یک رابطه را تنظیم می‌کند: اینکه تغییر یک کلید والد با ردیف‌های فرزندش چه می‌کند.

erd_add_relationship ستون‌های کلید خارجی را هنگام اجرا نام‌گذاری می‌کند و نام‌های منطقی کلیدهایشان را کپی می‌کند. تغییر نام یا نام منطقی‌ای که بعداً به کلید داده شود به آن‌ها نمی‌رسد، پس ابتدا جدول والد و کلید اصلی آن را نام‌گذاری کنید و نام منطقی کلید را به آن بدهید. نام‌هایی که می‌دهد دستی نوشته‌شده به شمار می‌آیند، بنابراین یک نام منطقی بعدی آن‌ها را همان‌طور که هستند باقی می‌گذارد، در حالی که erd_derive_physical_names آن‌ها را به واژه‌نامه‌ها برمی‌گرداند؛ واژه‌نامه‌ها را ببینید.

هیچ ابزاری ستون‌های یک رابطهٔ موجود را آن‌طور که نگاشت ستون‌ها در ویرایشگر انجام می‌دهد تغییر نمی‌دهد. برای نگاشت کردن یک رابطه روی ستون‌های دیگر، erd_remove_relationship را که ستون‌های کلید خارجی آن را در جدول باقی می‌گذارد و erd_link_columns را با ستون‌های مورد نظر در یک erd_batch اجرا کنید که یک بار erd_undo آن را واگرد می‌کند.

شاخص‌ها​

شناسهٔ ستون شاخص یک ورودی از فهرست ستون‌های شاخص است که erd_get می‌دهد، نه شناسهٔ ستون جدول.

ابزارآرگومان‌هاکاری که انجام می‌دهد
erd_add_indextableIdیک شاخص خالی به یک جدول اضافه می‌کند و شناسهٔ آن را در createdIds برمی‌گرداند.
erd_remove_indexindexIdیک شاخص را حذف می‌کند.
erd_change_index_nameindexId، valueنام یک شاخص را تغییر می‌دهد.
erd_set_index_uniqueindexId، valueتعیین می‌کند شاخص یکتا باشد یا نه.
erd_add_index_columnindexId، columnIdستونی از جدول شاخص را اضافه می‌کند و شناسهٔ ستون شاخص تازه را برمی‌گرداند. ستونی که از قبل در شاخص باشد دست‌نخورده می‌ماند.
erd_remove_index_columnindexId، indexColumnIdیک ستون را از یک شاخص حذف می‌کند.
erd_move_index_columnindexId، indexColumnId، targetIndexColumnIdیک ستون را درون شاخص به موقعیت ستون دیگری از همان شاخص جابه‌جا می‌کند.
erd_set_index_column_orderindexId، indexColumnId، orderTypeترتیب مرتب‌سازی یک ستون در شاخص را تنظیم می‌کند، ASC یا DESC.

یادداشت‌ها​

ابزارآرگومان‌هاکاری که انجام می‌دهد
erd_add_memoیک یادداشت خالی در جایی خالی اضافه می‌کند و شناسهٔ آن را در createdIds برمی‌گرداند.
erd_remove_memomemoIdیک یادداشت را حذف می‌کند.
erd_change_memo_valuememoId، valueمتن یک یادداشت را جایگزین می‌کند.
erd_change_memo_colormemoId، colorرنگ یک یادداشت را تنظیم می‌کند.
erd_move_memomemoId، x، yیک یادداشت را به موقعیتی روی بوم جابه‌جا می‌کند.
erd_resize_memomemoId، 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_groupname، color?، x?، y?، width?، height?، tableIds?یک گروه اضافه می‌کند و شناسهٔ آن را در createdIds برمی‌گرداند. یا tableIds را بدهید یا یک مستطیل، یعنی x، y، width و height را با هم. با tableIds، هر جدول از گروهی که در آن بوده خارج می‌شود و مستطیل، همان‌طور که در گروه‌بندی جدول‌های انتخاب‌شده، طوری تنظیم می‌شود که دور آن‌ها را بگیرد. یک مستطیل، همان‌طور که رسم گروه انجام می‌دهد، هر جدول بدون گروهی را که مرکزش درون آن باشد دربر می‌گیرد. اگر name خالی باشد، گروه بی‌نام می‌ماند. یک بار erd_undo گروه را حذف می‌کند و هر جدول را به گروهی که در آن بوده برمی‌گرداند.
erd_remove_table_groupgroupIdیک گروه را حذف می‌کند. جدول‌هایش در جای خود و بدون گروه می‌مانند.
erd_change_table_group_namegroupId، valueنام یک گروه را تغییر می‌دهد. رشتهٔ خالی آن را بی‌نام می‌گذارد.
erd_change_table_group_colorgroupId، colorرنگ یک گروه را تنظیم می‌کند.
erd_move_table_groupgroupId، x، yیک گروه را جابه‌جا می‌کند تا مستطیلش از آن نقطه شروع شود و جدول‌هایش را به همان اندازه جابه‌جا می‌کند، همان‌طور که کشیدن نوار عنوان آن انجام می‌دهد. جابه‌جایی کمتر از 20 پیکسل، با جمع جابه‌جایی افقی و عمودی، هیچ مدخل واگردی ثبت نمی‌کند. از نسخهٔ 1.2.0 سرور، جابه‌جایی به‌صورت نقطه‌هایی که گروه و جدول‌هایش به آن‌ها ختم می‌شوند به ویرایشگر می‌رسد، بنابراین با افزونهٔ VS Code نسخهٔ 4.3.0 یا بالاتر یا پلاگین Obsidian یا JetBrains نسخهٔ 1.3.0 یا بالاتر، جابه‌جایی گروه یا یکی از جدول‌هایش که همان‌جا در یک لحظه انجام شود روی یکی از دو موقعیت تمام می‌شود، هرگز مجموع آن‌ها؛ ویرایش‌های هم‌لحظه را ببینید.
erd_resize_table_groupgroupId، x?، y?، width، heightمستطیل یک گروه را تنظیم می‌کند، در حالی که جدول‌هایش در جای خود می‌مانند. اگر x و y داده نشوند، گوشهٔ آن ثابت می‌ماند. مستطیلی که جدول‌های گروه را همراه با فاصلهٔ داخلی‌شان در خود جا ندهد رد می‌شود، با پیامی که کادری را که مستطیل باید دربر بگیرد مشخص می‌کند.
erd_set_table_grouptableIds، 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_wordname، abbreviation، englishName?، description?، synonyms?، forbiddenWords?یک واژه به انتهای واژه‌نامهٔ واژه‌ها اضافه می‌کند و شناسهٔ آن را در createdIds برمی‌گرداند. synonyms و forbiddenWords با ویرگول از هم جدا می‌شوند: املاهای دیگر آن واژه، و واژه‌هایی که نباید به‌جای آن به کار روند.
erd_update_wordwordId، name?، abbreviation?، englishName?، description?، synonyms?، forbiddenWords?فیلدهای داده‌شده را تغییر می‌دهد و بقیه را دست‌نخورده می‌گذارد.
erd_remove_wordwordIdیک واژه را حذف می‌کند.
erd_add_termname، physicalName?، domainId?، domainName?، description?، synonyms?یک اصطلاح به انتهای واژه‌نامهٔ اصطلاحات اضافه می‌کند و شناسهٔ آن را در createdIds برمی‌گرداند. بدون physicalName، اگر واژه‌ها بتوانند، یک نام فیزیکی می‌سازند، مانند MBR_NO برای Member Number.
erd_update_termtermId، name?، physicalName?، domainId?، domainName?، description?، synonyms?فیلدهای داده‌شده را تغییر می‌دهد و بقیه را دست‌نخورده می‌گذارد. name که در حالی داده شود که اصطلاح نام فیزیکی ندارد، یا همراه با physicalName خالی داده شود، نام فیزیکی‌ای را هم که واژه‌هایش می‌سازند می‌نویسد، اگر واژه‌ها نامی بسازند.
erd_remove_termtermIdیک اصطلاح را حذف می‌کند.
erd_add_domainname، category?، dataType، description?یک دامنه به انتهای واژه‌نامهٔ دامنه‌ها اضافه می‌کند و شناسهٔ آن را در createdIds برمی‌گرداند. category دامنه‌ها را دسته‌بندی می‌کند، مانند Number یا Text.
erd_update_domaindomainId، name?، category?، dataType?، description?فیلدهای داده‌شده را تغییر می‌دهد و بقیه را دست‌نخورده می‌گذارد. dataType تازه به هر ستونی که به دامنه پیوند خورده است می‌رسد و تا وقتی همگام‌سازی نوع داده در رابطه‌ها روشن است در رابطه‌ها پیش می‌رود، با همان قطع پیوندی که در erd_change_column_data_type رخ می‌دهد.
erd_remove_domaindomainIdیک دامنه را حذف می‌کند. ستون‌هایی که به آن پیوند خورده‌اند نوع دادهٔ خود را نگه می‌دارند و این ستون‌ها و اصطلاحاتی که به آن پیوند خورده‌اند هیچ دامنه‌ای نشان نمی‌دهند: domainId آن‌ها رشتهٔ خالی خوانده می‌شود. erd_undo پیوندها را برمی‌گرداند و ذخیره کردن آن‌ها را در فایل نمی‌نویسد.
erd_derive_physical_namesscope، 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_databasevalueپایگاه داده را تنظیم می‌کند: MariaDB، MSSQL، MySQL، Oracle، PostgreSQL، SQLite، Databricks یا Snowflake. انواع دادهٔ پایگاه داده و نیز DDL خروجی erd_read را در صورتی که vendor داده نشود تعیین می‌کند.
erd_set_database_namevalueنام پایگاه داده را تنظیم می‌کند، همان نامی که سرآیندهای use و createAndUse در erd_read می‌آورند.
erd_set_ddl_scriptposition، 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_sqlvalue، mode?DDL به زبان SQL را بارگذاری می‌کند، یعنی دستورهای CREATE TABLE و مانند آن.
erd_import_graphqlvalue، mode?یک SDL از GraphQL را بارگذاری می‌کند.
erd_import_dbmlvalue، mode?DBML را بارگذاری می‌کند. هر TableGroup به یک گروه جدول از جدول‌هایی که نام می‌برد تبدیل می‌شود؛ DBML را ببینید.
erd_import_amlvalue، mode?AML را بارگذاری می‌کند.
erd_import_jsonvalue، 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}
فیلدمعنا
modelive یا headless؛ زنده و بدون رابط کاربری را ببینید.
savedtrue در نتیجهٔ هر ویرایش در حالت بدون رابط کاربری، 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ویرایشگری شروع به سرویس دادن به سندی کرد که عامل آن را روی دیسک ویرایش می‌کرد، یا ویرایشگری که به آن سرویس می‌داد هنوز در حال اجراست اما فایل قفل و اتصالش از بین رفته‌اند. هیچ چیز نوشته نشد.
notSavederd_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) رد می‌کنند، پس آرگومانی که اشتباه نوشته شده هرگز بی‌صدا کنار گذاشته نمی‌شود. پنج ابزار نشست آرگومان‌هایی را که نمی‌شناسند نادیده می‌گیرند.