طرحواره SQL
زبانهٔ Schema SQL DDL نمودار را برای پایگاه دادهٔ انتخابشده نشان میدهد: همان SQL که جدولهای نمودار را همراه با کلیدها، شاخصها و کلیدهای خارجیشان میسازد.
در نوار ابزار به زبانهٔ Schema SQL بروید، یا در جستوجوی سریع گزینهٔ Schema SQL را زیر Tab انتخاب کنید. انتخاب Schema SQL از زیرمنوی Export نیز این زبانه را، آماده برای ذخیره، باز میکند؛ ذخیره یا کپی کردن SQL را ببینید.
SQL در سمت چپ قرار دارد و در سمت راست آن، پنل گزینههایی با عنوان Schema SQL انتخابهایی را در خود دارد که شکل SQL را تعیین میکنند؛ پنل گزینهها را ببینید. در یک زبان نمایش راستبهچپ نیز SQL در سمت چپ میماند و از چپ به راست خوانده میشود.
پنل خودبهخود باز میشود، مگر آنکه ویرایشگر هنگام نخستین باز شدن زبانه باریکتر از 640 px باشد. Hide options در سرآیند پنل آن را جمع میکند و Show options در گوشهٔ بالای سمت راست کد آن را برمیگرداند. پس از آن، پنل تا وقتی ویرایشگر باز است، در جابهجایی میان زبانهها نیز، همانطور که آن را گذاشتهاید باز یا جمعشده میماند. پنل مستقل از پنل زبانهٔ مولد کد جمع و باز میشود و هرگز در فایل ذخیره نمیشود.

برای باز کردن منوی زمینهٔ SQL، روی آن راستکلیک کنید:
DatabaseوBracket، که هر کدام زیرمنویی است که مقدار فعلی را علامت میزند.StatementsوHeader، که هر کدام زیرمنویی است که انتخاب اعمالشده را علامت میزند. انتخابی که پایگاه داده آن را ندارد، پیامی کمرنگ مانندnot in Oracleدر کنار خود دارد و کاری انجام نمیدهد.Options panel، که تا وقتی پنل نمایش داده میشود علامتخورده است و پنل را جمع یا باز میکند.Save file
تا وقتی این زبانه باز است، جستوجوی سریع این گزینهها را ارائه میکند: Database و Bracket؛ Schema SQL: Statements و Schema SQL: Header که فقط انتخابهایی را فهرست میکنند که پایگاه داده دارد؛ و Schema SQL: Options panel که پنل را جمع یا باز میکند.
نه منوی زمینه و نه جستوجوی سریع گزینهٔ Write logical names into empty comments را ارائه نمیکنند، که فقط در پنل گزینهها قرار دارد؛ نامهای منطقی بهعنوان توضیح را ببینید.
SQL هنگام باز شدن زبانه نوشته میشود و هر بار که یکی از گزینههای پنل، نام پایگاه داده یا یک اسکریپت تغییر کند، دوباره نوشته میشود. ویرایشی که هنگام باز بودن زبانه روی جدولها انجام میشود، مانند ویرایش یک همکار یا یک عامل کدنویسی، زمانی نمایش داده میشود که از زبانه بیرون بروید و برگردید، یا یکی از آن موارد تغییر کند.
ویژگیهای جدول زبانهٔ Schema SQL مخصوص خود را دارد که DDL یک جدول را نشان میدهد. این زبانه همیشه دستورهای سادهٔ CREATE را بدون سرآیند یا اسکریپت مینویسد، هرگز نام منطقی را در توضیح خالی نمینویسد، پنل گزینهها ندارد و منوی زمینهٔ آن فقط Database و Bracket را ارائه میکند.
پنل گزینهها
پنل سه دسته را در خود دارد که هر کدام زیر یک عنوان قرار دارد:
Saved in the document:DatabaseوBracket؛ پایگاه داده و علامت نقلقول را ببینید. ویرایشگر فقط خواندنی آنها راThis window onlyعنوانگذاری میکند؛ ویرایشگرهای فقط خواندنی را ببینید.This window only:Statements،Header،Write logical names into empty commentsو، تا وقتی نمودار یک گروه جدول دارد،Tables؛ دستورها، سرآیند، نامهای منطقی بهعنوان توضیح و جدولها را ببینید.Saved in the document · written as is for every database: اسکریپتهایBefore tablesوAfter tables؛ اسکریپتهای پیش و پس از جدولها را ببینید.
Save file و Copy در پایین پنل قرار دارند؛ ذخیره یا کپی کردن SQL را ببینید.
گزینههای زیر This window only به پنجرهٔ ویرایشگری تعلق دارند که در آن انجام شدهاند. این گزینهها در سند ذخیره نمیشوند، با همکاران به اشتراک گذاشته نمیشوند و برای واگرد ثبت نمیشوند، و با بسته شدن یا بارگذاری دوبارهٔ ویرایشگر بازنشانی میشوند؛ جابهجایی میان زبانهها آنها را حفظ میکند.
Statements با If not exists، Header با CREATE + USE و Write logical names into empty comments در حالت خاموش آغاز میشوند. SQL خواندهشده با getSchemaSQL() بهدست صفحهای که ویرایشگر را جاسازی میکند و SQL خواندهشده بهدست یک عامل کدنویسی، بهجای آن با Create و بدون سرآیند آغاز میشوند و تا وقتی درخواست نشود، هیچ نام منطقیای نمینویسند.
انتخابی که پایگاه دادهٔ انتخابشده آن را ندارد، بهصورت کمرنگ و با راهنمای ابزار Not in <database>، مانند Not in Oracle، در پنل باقی میماند و فشردن آن کاری انجام نمیدهد.
در این حالت SQL از نزدیکترین شکلی که پایگاه داده دارد استفاده میکند و دکمهٔ آن شکل به حالت فشرده نمایش داده میشود: If not exists به Create برمیگردد، CREATE + USE به USE، یا اگر پایگاه داده USE را هم نداشته باشد به None، و USE به None. انتخابتان حفظ میشود، بنابراین تغییر پایگاه داده به پایگاه دادهای که آن را دارد، آن را برمیگرداند.
پایگاه داده و علامت نقلقول
Database پایگاه دادهٔ نمودار است و همان تنظیم Database در منوی زمینهٔ بوم و در مولد کد است؛ پایگاههای داده را ببینید. این تنظیم Databricks، MSSQL، MariaDB، MySQL، Oracle، PostgreSQL، Snowflake و SQLite را فهرست میکند، مقدار آغازین آن MySQL است و مانند هر ویرایشی در فایل ذخیره میشود.
Bracket علامت نقلقولی را تعیین میکند که دور نام جدولها، ستونها، قیدها و شاخصها قرار میگیرد: SingleQuote، DoubleQuote، Backtick یا None که هیچ علامت نقلقولی نمیگذارد و پیشفرض است. این همان تنظیم مولد کد است؛ علامت نقلقول را ببینید.
Snowflake، که نامها را فقط داخل گیومهٔ دوتایی قرار میدهد، با هر انتخابی بهجز None از آن استفاده میکند و Databricks همیشه نامها را داخل بکتیک قرار میدهد.
Bracket فقط تا وقتی قفل Bracket Type در زبانهٔ تنظیمات خاموش است در فایل ذخیره میشود، و در نمودار جدید همهٔ قفلها روشناند. تا وقتی قفل روشن است، هر تغییری SQL را فقط در ویرایشگر شما دوباره مینویسد: ویرایشگرهای دیگری که روی نمودار باز هستند علامت نقلقول خودشان را نگه میدارند، و فایل مقدار قفلشده را نگه میدارد، بنابراین نمودار با همان مقدار دوباره باز میشود؛ قفل را ببینید.
تا وقتی پایگاه داده Oracle است و SQL نامی طولانیتر از 30 بایت دارد، که Oracle 12.1 و نسخههای قدیمیتر آن را نمیپذیرند، پیامی زیر دو فهرست هر یک از این نامها را میآورد: Oracle 12.2+ for names over 30 bytes: <names>. این پیام نام جدولها، ستونها، طرحوارهها، کلیدها، شاخصها، دنبالهها و تریگرها را بررسی میکند. خود SQL تغییر نمیکند.
دستورها
Statements تعیین میکند جدولها چگونه ساخته شوند:
Createدستورهای سادهٔCREATEرا مینویسد.If not existsاز جدولها و شاخصهایی که از قبل وجود دارند میگذرد. MySQL، MariaDB، PostgreSQL، SQLite و Databricks این گزینه را دارند؛ MSSQL، Oracle و Snowflake بهجای آنCreateرا مینویسند.- MySQL هر جدول را بهصورت
CREATE TABLE IF NOT EXISTSهمراه با قیدهای یکتا، شاخصها و کلیدهای خارجیاش درون آن مینویسد و کل این دسته را میانSET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;وSET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;قرار میدهد. - MariaDB عبارت
IF NOT EXISTSرا در هر دستور میگذارد:CREATE TABLE، هر قیدUNIQUEوFOREIGN KEYو هرCREATE INDEX. - PostgreSQL دستورهای
CREATE TABLE IF NOT EXISTSوCREATE INDEX IF NOT EXISTSرا مینویسد و هر کلید خارجی را پیش از افزودن دوباره باDROP CONSTRAINT IF EXISTSحذف میکند. - SQLite دستورهای
CREATE TABLE IF NOT EXISTSوCREATE INDEX IF NOT EXISTSرا مینویسد. - Databricks دستور
CREATE TABLE IF NOT EXISTSرا مینویسد و هر کلید خارجی را پیش از افزودن دوباره باDROP CONSTRAINT IF EXISTSحذف میکند.
- MySQL هر جدول را بهصورت
Drop & re-createهر جدولی را که مینویسد پیش از ساختن دوباره حذف میکند، بهجز در Snowflake. همهٔ پایگاههای داده این گزینه را دارند:- MySQL و MariaDB برای هر جدول یک
DROP TABLE IF EXISTSمینویسند، میان همان دو خطی که بررسی کلیدهای خارجی را خاموش و دوباره روشن میکنند. - PostgreSQL یک
DROP TABLE IF EXISTSمینویسد که نام همهٔ جدولها را میآورد، و اگر جدولی بیرون از این فهرست به یکی از آنها ارجاع دهد، شکست میخورد. با سرآیندCREATE + USE، جدولی که نامش طرحوارهای مشخص نمیکند از همان طرحواره حذف میشود، مانندshop.member. - MSSQL یک تراکنش مینویسد که، همانطور که راهنمای ابزار دکمه،
SQL Server 2016+، میگوید، به SQL Server 2016 یا بالاتر نیاز دارد. این تراکنش کلیدهای خارجیای را که جدولهای نوشتهشده دارند حذف میکند، سپس جدولها را با یکDROP TABLE IF EXISTSحذف میکند و در صورت خطا عقبگرد میکند. کلید خارجیای که جدولی بیرون از فهرست دارد، همچنان مانع حذف میشود. - SQLite دستور
PRAGMA foreign_keys=OFF;را، که برای آن اتصال خاموش میماند، و سپس برای هر جدول یکDROP TABLE IF EXISTSمینویسد. - Oracle برای هر جدول
DROP TABLE … CASCADE CONSTRAINTSو برای هر دنبالهٔ افزایش خودکارDROP SEQUENCEرا مینویسد، هر کدام در یک بلوک PL/SQL که با خط/پایان مییابد و خطایی را که نبود جدول یا دنباله ایجاد میکند نادیده میگیرد. - Databricks برای هر جدول یک
DROP TABLE IF EXISTSمینویسد. - Snowflake چیزی حذف نمیکند و بهجای آن
CREATE OR REPLACE TABLEرا مینویسد.
- MySQL و MariaDB برای هر جدول یک
تا وقتی Drop & re-create اعمال میشود، هشداری در پنل نام جدولهایی را که حذف میکند میآورد: Drops <tables> before creating them. Their rows are lost.، یا در Snowflake Replaces <tables>. Their rows are lost.
تا پنج جدول با نام کامل آورده میشوند. با بیش از پنج جدول، هشدار نام چهار جدول نخست را میآورد و بقیه را میشمارد، مانند a, b, c, d, and 3 more tables.
سرآیند
Header در ابتدای SQL دستورهایی میگذارد که پایگاه داده، یا طرحوارهای را که SQL در آن اجرا میشود، میسازند یا انتخاب میکنند. نام بهکاررفته همان نام پایگاه دادهٔ نمودار است که در فیلد database name در نوار ابزار تایپ میشود و با نویسهٔ Bracket در علامت نقلقول قرار میگیرد.
- MySQL و MariaDB:
USEدستورUSE shop;را مینویسد وCREATE + USEپیش از آنCREATE DATABASE IF NOT EXISTS shop;را مینویسد. - MSSQL:
USEخطهایUSE shopوGOرا مینویسد وCREATE + USEپیش از آنIF DB_ID(N'shop') IS NULL CREATE DATABASE shopوGOرا مینویسد. - PostgreSQL فقط
CREATE + USEرا دارد کهCREATE SCHEMA IF NOT EXISTS shop;وSET search_path TO shop, public;را مینویسد. - Oracle فقط
USEرا دارد کهALTER SESSION SET CURRENT_SCHEMA = shop;را مینویسد.CREATE + USEبه آن برمیگردد، بنابراین Oracle با سرآیند پیشفرض زبانه همین خط را مینویسد. - Snowflake و Databricks:
USEدستورUSE SCHEMA shop;را مینویسد وCREATE + USEپیش از آنCREATE SCHEMA IF NOT EXISTS shop;را مینویسد. - SQLite هیچیک را ندارد و سرآیندی نمینویسد.
هر جا پایگاه داده USE یا CREATE + USE را داشته باشد، راهنمای ابزار دکمه نشان میدهد که آن دکمه در آنجا چه مینویسد، مانند CREATE SCHEMA + SET search_path در PostgreSQL.
سرآیند فقط تا وقتی نوشته میشود که نام پایگاه داده یک شناسهٔ ساده باشد: یک حرف ASCII (A–Z، a–z) یا _، و پس از آن حروف ASCII، رقمها یا _.
با هر نام دیگری، از جمله نام خالی، سرآیندی نوشته نمیشود و DROP TABLE در PostgreSQL در این حالت نام هیچ طرحوارهای را نمیآورد. تا وقتی سرآیندی بهجز None اعمال میشود، پیامی زیر Header این را اعلام میکند: Database name "<name>" is not a valid identifier.
نام پایگاه دادهٔ نمودار جدید خالی است، بنابراین تا وقتی آن را نامگذاری نکنید، پنل Database name "" is not a valid identifier. را نشان میدهد.
نامهای منطقی بهعنوان توضیح
گزینهٔ Write logical names into empty comments، یک کلید روشن/خاموش زیر This window only، در هر پایگاه داده نام منطقی یک جدول یا ستون را هر جا توضیح آن خالی باشد در DDL مینویسد.

- توضیحی که متن دارد همیشه اولویت دارد: نام منطقی هرگز جای آن را نمیگیرد و هرگز به آن افزوده نمیشود.
- توضیحی که فقط از فاصله تشکیل شده باشد خالی به شمار میآید، بنابراین نام منطقی بهجای آن نوشته میشود. نام منطقیای که خالی باشد یا فقط از فاصله تشکیل شده باشد چیزی نمینویسد، و آن جدول یا ستون همچنان توضیحی نمیگیرد.
- نام منطقی در همان جا و به همان شکلی نوشته میشود که پایگاه داده توضیح را مینویسد، و گیومههای آن نیز به همان شیوه گریز داده میشوند؛ توضیحات را ببینید.
برای نمونه در MySQL، ستون id با نام منطقی Member ID و بدون توضیح با COMMENT 'Member ID' نوشته میشود، در حالی که ستون email با نام منطقی Email و توضیح Sign-in address، همان COMMENT 'Sign-in address' را نگه میدارد.
این کلید، مانند Statements و Header، به پنجره تعلق دارد و خاموش آغاز میشود؛ پنل گزینهها را ببینید.
وارد کردن هرگز چنین توضیحی را بهعنوان نام منطقی بازنمیخواند؛ توضیحات را ببینید.
جدولها
تا وقتی نمودار دستکم یک گروه جدول، نمایان یا پنهان، دارد، Tables زیر This window only با یک کادر انتخاب برای هر گزینه نمایش داده میشود:
All، که همهٔ کادرها را علامت میزند یا علامتشان را برمیدارد. تا وقتی فقط برخی علامتخوردهاند، این کادر حالتی مختلط نشان میدهد.- یک کادر برای هر گروه جدول، به ترتیب گروهها در نمودار، با برچسب نام گروه یا
unnamedبرای گروهی بینام، که اگر گروه رنگی داشته باشد پس از نقطهای به رنگ آن میآید. No group، برای جدولهایی که در هیچ گروهی نیستند.
وقتی همهٔ کادرها علامتخورده باشند، زبانه کل نمودار را مینویسد.
وقتی فقط برخی علامتخورده باشند، زبانه جدولهای کادرهای علامتخورده را همراه با شاخصهایشان و کلیدهای خارجیای که دارند مینویسد، از جمله کلیدی که به جدولی کنارگذاشتهشده ارجاع میدهد. اسکریپتهای پیش و پس از جدولها همچنان نوشته میشوند، و Drop & re-create، هشدار آن و پیام Oracle دربارهٔ نامهای طولانی فقط همان جدولها را در بر میگیرند.
وقتی هیچ کادری علامت نخورده باشد، زبانه چیزی نمینویسد و راهنمایی روی کد این متن را نشان میدهد: No tables chosen. Check some under Tables. در این حالت Save file فایلی خالی ذخیره میکند و Copy متنی خالی را کپی میکند.
این انتخاب، مانند Statements و Header، به پنجره تعلق دارد؛ پنل گزینهها را ببینید.
گروهی که بعداً اضافه شود فقط در صورتی از ابتدا علامتخورده است که در آن لحظه همهٔ کادرها علامتخورده بوده باشند. با حذف یک گروه، کادر آن نیز حذف میشود و حذف آخرین گروه دوباره همهچیز را علامت میزند.
این انتخاب فقط بر همین زبانه اعمال میشود. زبانهٔ Schema SQL در ویژگیهای جدول و getSchemaSQL() از آن تأثیر نمیپذیرند.
اسکریپتهای پیش و پس از جدولها
Before tables و After tables SQL نوشتهٔ خودتان را نگه میدارند، مانند دستورهای CREATE EXTENSION یا SET پیش از جدولها، یا مجوزها، نماها و دادههای اولیه پس از آنها.
این دو در سند ذخیره میشوند، یک جفت برای کل نمودار، هر پایگاه دادهای که باشد. هر کدام همانطور که تایپ کردهاید و بدون هیچ بررسیای در SQL نوشته میشود: اسکریپت پیش از جدولها بعد از سرآیند و قبل از دستورهای DROP و جدولها، و اسکریپت پس از جدولها در انتهای SQL.
نویسههای خط جدید بهصورت LF نوشته میشوند و خطهای خالی پیش از اسکریپت و فضای خالی پس از آن حذف میشوند.
در MSSQL، همانطور که خط زیر دو فیلد میگوید، پس از اسکریپتی که خط آخرش GO (یا GO همراه با یک عدد) نباشد، یک خط GO افزوده میشود. در Oracle، بلوک PL/SQL را خودتان با خط / آن پایان دهید.
فیلدها نحو SQL را برجسته میکنند و با افزایش متن بزرگتر میشوند.
ویرایش وقتی اعمال میشود که از فیلد خارج شوید، با کلیک کردن در جای دیگر یا رفتن به زبانهٔ دیگر، و تنها در آن هنگام SQL کنار آن و سند تغییر میکنند. فیلدی که فقط درونش کلیک کردهاید چیزی را تغییر نمیدهد.
ویرایش اسکریپت مانند هر ویرایش دیگری نمودار را تغییر میدهد: در فایل ذخیره میشود، همکاران آن را میبینند و هر ویرایش اعمالشده یک گام در تاریخچهٔ واگرد است که آن را از زبانهٔ ERD واگرد میکنید.
تا وقتی در یک فیلد تایپ میکنید، میانبرهای خود ویرایشگر به آن فیلد سپرده میشوند، بنابراین Ctrl + Z (Windows/Linux) یا ⌘ + Z (Mac) تایپ شما را در همان فیلد واگرد میکند و کپی، برش و جایگذاری بهجای نمودار روی متن عمل میکنند.
جستوجوی سریع و جستوجوی کاوشگر همچنان با میانبرهایشان، Ctrl + K و Ctrl + F (Windows/Linux) یا ⌘ + K و ⌘ + F (Mac)، باز میشوند. چون Ctrl + F یا ⌘ + F به زبانهٔ ERD میرود، ویرایش شما را، مانند هر جابهجایی دیگری میان زبانهها، اعمال میکند.
فیلدی که فوکوس صفحهکلید را ندارد، تغییری را که یک همکار یا یک عامل کدنویسی در اسکریپت آن ایجاد میکند دنبال میکند. فیلدی که در آن هستید، اگر بدون تایپ کردن از آن خارج شوید، آن تغییر را نشان میدهد. اگر تایپ کرده باشید، متن شما هنگام خروج اعمال میشود و جای متن آنها را میگیرد.
ذخیره یا کپی کردن SQL
Save file، در پایین پنل یا در منوی زمینه، دقیقاً همان SQL را که زبانه نشان میدهد، با پایگاه داده، علامت نقلقول، دستورها، سرآیند، نامهای منطقی در توضیحات، جدولها و اسکریپتهای فعلیاش، با نام <database name>-<timestamp>.sql ذخیره میکند. نامگذاری و ذخیرهٔ این فایل مانند هر صادر کردن دیگری انجام میشود؛ صادر کردن را ببینید.
Export ▸ Schema SQL، در منوی زمینهٔ بوم یا در جستوجوی سریع، بهخودیخود چیزی ذخیره نمیکند.
این فرمان به همین زبانه میرود، پنل گزینهها را حتی اگر جمع شده بوده باشد باز میکند و فوکوس صفحهکلید را روی Save file میگذارد، بنابراین فشار دادن Enter فایل را ذخیره میکند.
Copy در پایین پنل، یا دکمهٔ کپی که هنگام بردن نشانگر روی کد در گوشهٔ بالای سمت راست آن ظاهر میشود، SQL را کپی میکند.
اعلان Copied! با یک علامت تیک به مدت دو ثانیه کپی را تأیید میکند. اگر مرورگر یا میزبان دسترسی به کلیپبورد را رد کند، بهجای آن اعلان Couldn't copy to the clipboard با یک علامت هشدار به مدت پنج ثانیه این را اعلام میکند. کپی دوباره بهجای افزودن اعلانی دیگر، اعلان قبلی را جایگزین میکند.
SQL قابل انتخاب نیز هست، بنابراین میتوانید فقط بخشی از آن را بردارید.
آنچه DDL مینویسد
این قاعدهها هر جا ویرایشگر طرحواره SQL مینویسد برقرارند: در این زبانه و فایل آن، و در SQL خواندهشده بهدست صفحهای که ویرایشگر را جاسازی میکند یا بهدست یک عامل کدنویسی.
زبانهٔ Schema SQL در ویژگیهای جدول برای تنها جدولی که نشان میدهد از آنها پیروی میکند. این زبانه هیچ دنباله یا تریگر Oracle، و هیچ کلید خارجیای بهجز کلیدهای خارجی SQLite که درون CREATE TABLE آن جای دارند، نمینویسد. دستورهای توضیحی را هم که PostgreSQL، Oracle و MSSQL پس از جدول قرار میدهند نمینویسد، بنابراین در این سه پایگاه داده هیچ توضیحی نشان نمیدهد.
بخشها به این ترتیب و با یک خط خالی فاصله از هم میآیند: سرآیند، اسکریپت پیش از جدولها، دستورهای DROP، جدولها و اسکریپت پس از جدولها. جدولها به ترتیب نام نوشته میشوند.
نموداری که نه جدول دارد و نه اسکریپت، حتی با انتخاب سرآیند، چیزی نمینویسد.
جدولها و ستونها با نامهای فیزیکیشان نوشته میشوند، نمایش نامها هرچه را نشان دهد. ستونی که به یک دامنه پیوند خورده است با نوع دادهٔ خودش نوشته میشود، که دامنه آن را تعیین میکند؛ دامنهها و انواع داده را ببینید.
افزایش خودکار
ستونی که با Auto Increment مشخص شده، به همان شکلی نوشته میشود که هر پایگاه داده آن را مینویسد: AUTO_INCREMENT در MySQL و MariaDB، IDENTITY(1,1) در MSSQL، AUTOINCREMENT در Snowflake و GENERATED ALWAYS AS IDENTITY در PostgreSQL و Databricks.
در Oracle یک دنبالهٔ SEQ_<table> و یک تریگر SEQ_TRG_<table> نوشته میشود که ستون را از آن دنباله پر میکند. تریگر با خط / پایان مییابد، بنابراین SQL*Plus و SQLcl آن را اجرا میکنند.
هر جا پایگاه داده افزایش خودکار را روی نوع ستون نپذیرد، این بند کنار گذاشته میشود و یک خط توضیح پس از جدول نام ستون را میآورد:
- PostgreSQL آن را فقط روی
smallint،integerیاbigintمیپذیرد، با هر یک از نامهایشان:INT،INTEGER،BIGINT،SMALLINT،INT2،INT4یاINT8. ستونی از نوع دیگر نه این بند را میگیرد و نه مقدار پیشفرض را، و توضیح برای نمونه چنین است:-- PostgreSQL takes IDENTITY only on smallint, integer or bigint, so member.id is written without it. - Databricks آن را فقط روی
BIGINTیاLONGمیپذیرد. - SQLite عبارت
AUTOINCREMENTرا فقط روی تنها ستون کلید اصلی یک جدول میپذیرد که از نوع عدد صحیح باشد، مانندINT،BIGINTیاINT8، با پهنا یا بدون آن. آن ستون بهصورتINTEGERو کلید بهصورتPRIMARY KEY (id AUTOINCREMENT)نوشته میشود. کلید تکی از هر نوع دیگری بدون آن نوشته میشود.
کنشهای ارجاعی
اینکه هر پایگاه داده کدام کنشهای ON DELETE و ON UPDATE را مینویسد، در ON DELETE و ON UPDATE فهرست شده است.
هر جا Snowflake کنشی را کنار بگذارد، توضیحی بالای ALTER TABLE آن کلید خارجی نام آن کنش را میآورد، مانند -- Snowflake creates no foreign key with a referential action other than NO ACTION, so ON DELETE CASCADE is left out.
نام جدولها با پیشوند طرحواره
با Bracket روی None، نام جدولی که نقطه دارد، مانند sales.users، بهصورت یک طرحواره و یک جدول خوانده میشود و از آخرین نقطهٔ بیرون از کروشهها یا گیومههای دوتایی تقسیم میشود.
- MySQL، MariaDB، MSSQL، Oracle و PostgreSQL نامهای خودکاری را که مینویسند فقط از بخش جدول میسازند:
FK_users_TO_ordersوIDX_usersدر هر پنج پایگاه داده،UQ_users_emailدر همه بهجز PostgreSQL، وPK_usersدر MSSQL و Oracle، یعنی آن دو پایگاه داده از این پنج که برای کلید اصلی نام میگذارند. در این دو،[sales].[users]و"sales"."users"نیز بهPK_usersمیانجامند و[Order]بهPK_Orderمیانجامد. - SQLite برای هیچ قیدی نام نمیگذارد، بنابراین تنها نام خودکاری که میسازد نام شاخص است:
CREATE INDEX sales.IDX_users ON users. - Oracle شاخصهای جدول و دنباله و تریگر ستون دارای افزایش خودکار را در طرحوارهٔ جدول میسازد:
sales.IDX_users،sales.SEQ_usersوsales.SEQ_TRG_users. - در Oracle و SQLite، اگر خودتان برای نام شاخص طرحوارهای تعیین کرده باشید، آن نام طرحوارهٔ خود را حفظ میکند.
- نام خودکار کلید خارجی یا شاخصی که، بدون توجه به بزرگی و کوچکی حروف، نامی قبلی را تکرار کند، یک عدد میگیرد. وقتی
ordersبه هر دو جدولsales.usersوhr.Usersارجاع دهد، کلید دومFK_Users_TO_orders1است.
با هر Bracket دیگری، کل نام جدول یک شناسه است، مانند "PK_sales.users". Snowflake و Databricks همیشه کل نام را نگه میدارند.
ردیفهای Keys در زبانهٔ شاخصها همین نامها را نشان میدهند.
مقادیر پیشفرض
مقدار پیشفرض ستون همانطور که تایپ کردهاید نوشته میشود، اما هر جا پایگاه داده آن عبارت را فقط درون پرانتز بخواند، درون پرانتز قرار میگیرد. مقدار پیشفرضی که از قبل در پرانتز باشد، همانطور که هست باقی میماند.
- MySQL هر چیزی بهجز یک مقدار لفظی یا زمان فعلی را در پرانتز میگذارد، مانند
(uuid()). همچنین هر مقدار پیشفرضی بهجزNULLرا روی ستونBLOB،TEXT،JSON، مکانی یاLONG…، و زمان فعلی را روی هر ستونی بهجزTIMESTAMPیاDATETIMEدر پرانتز میگذارد. - MariaDB هر چیزی بهجز مقدار لفظی، زمان فعلی، فراخوانی تابع یا نام را در پرانتز میگذارد.
- SQLite هر چیزی بهجز مقدار لفظی یا نام را در پرانتز میگذارد، مانند
(datetime('now')). - PostgreSQL فقط عبارتی را در پرانتز میگذارد که بیرون از پرانتز واژهای مانند
AT TIME ZONE،AND،OR،IS،IN،LIKE،COLLATEیا= ANYداشته باشد، مانند(now() AT TIME ZONE 'utc'). - MSSQL، Oracle، Snowflake و Databricks هر مقدار پیشفرض را همانطور که تایپ شده مینویسند.
توضیحات
توضیح غیرخالی یک جدول یا ستون، یا نام منطقیای که Write logical names into empty comments بهجای آن مینویسد، به همان شکلی نوشته میشود که هر پایگاه داده توضیحات را مینویسد:
- MySQL و MariaDB آن را درونخطی مینویسند: ستون با
COMMENT 'Member ID'پایان مییابد و جدول با) COMMENT 'Members';بسته میشود، در دستهٔIf not existsدر MySQL نیز. - Snowflake توضیح ستون را درونخطی،
COMMENT 'Member ID'، و توضیح جدول را در خطی جداگانه پس از پرانتز بسته،COMMENT = 'Members';، مینویسد. - Databricks توضیح ستون را درونخطی و توضیح جدول را بهصورت
COMMENT 'Members';پس ازUSING DELTAمینویسد. - PostgreSQL دستورهای
COMMENT ON TABLE member IS 'Members';وCOMMENT ON COLUMN member.id IS 'Member ID';را درست پس ازCREATE TABLEجدول مینویسد. Oracle همین دستورها را پس از جدول، قیدهای یکتای آن و دنباله و تریگر افزایش خودکار آن مینویسد. - MSSQL برای هر جدول و هر ستون یک فراخوانی، پس از جدول و قیدهای یکتای آن، مینویسد که پس از هر کدام
GOمیآید:EXECUTE sys.sp_addextendedproperty 'MS_Description', N'Members', 'schema', 'dbo', 'table', 'member'، که برای ستون'column', 'id'به آن افزوده میشود.
متن یک لفظ رشتهای ملی است،N'…'، بنابراین SQL Server متنی را که بیرون از صفحهٔ کد پایگاه داده است، مانند متن کرهای، نگه میدارد و بهجای آن علامت سؤال ذخیره نمیکند.
باBracketرویNone، جدولی با نامsales.usersطرحوارهٔsalesو جدولusersرا میدهد، و[sales].[users]و"sales"."users"نیز همینطور، که کروشهها و گیومههای دوتاییشان حذف میشوند. نامی که طرحواره ندارد درdboقرار میگیرد. بخشی پیش از طرحواره، مانندshop.sales.users، رویهٔ همان پایگاه داده،shop.sys.sp_addextendedproperty، را اجرا میکند. با هر مقدار دیگری برایBracket، کل نام بهعنوان نام جدول درdboدر نظر گرفته میشود. - SQLite توضیحی نگه نمیدارد، بنابراین هر توضیح را بهصورت یک خط
--بالای چیزی که توصیف میکند مینویسد:-- MembersبالایCREATE TABLE memberو-- Member IDبالای ستون.
گیومهٔ درون توضیحی که داخل گیومه نوشته میشود دو بار نوشته میشود، مانند 'it''s' و N'it''s'، و گیومهٔ درون نامهایی که فراخوانیهای MSSQL ارسال میکنند نیز همینطور. Databricks در عوض گیومه و بکاسلش را با بکاسلش گریز میدهد، مانند 'it\'s'، شکلی که همهٔ نسخههای Spark میخوانند. خطهای -- در SQLite داخل گیومه نیستند، بنابراین گیومه را همانطور که تایپ شده است نگه میدارند: -- it's.
در غیر این صورت، متن همانطور که تایپ شده است، از جمله شکستهای خط، نوشته میشود، بهجز در دو پایگاه داده:
- Oracle خطهای خالی را کنار میگذارد، و خطی که فقط فاصله یا نویسهٔ Tab دارد خالی به شمار میآید، زیرا SQL*Plus دستور را در یک خط خالی پایان میدهد و بقیهٔ آن را نادیده میگیرد. توضیح جدولی شامل
Members، یک خط خالی وActive onlyبهصورتCOMMENT ON TABLE member IS 'MembersوActive only';در خط بعد نوشته میشود. - SQLite هر رشته از شکستهای خط پیاپی را بهصورت یک فاصله مینویسد، زیرا شکست خط، خط
--را پایان میدهد و بقیه را بهعنوان SQL اجرا میکند. همان توضیح بهصورت-- Members Active onlyنوشته میشود.
اینکه این توضیحات هنگام وارد کردن چگونه بازخوانده میشوند، در توضیحات توضیح داده شده است.
ویرایشگرهای فقط خواندنی
در ویرایشگری با readonly زبانه برای خواننده کار میکند و هیچچیزی که در آن انجام شود به سند نمیرسد:
DatabaseوBracketهمچنان SQL را دوباره مینویسند، اما فقط در همان پنجره، بنابراین پنل آنها را همThis window onlyعنوانگذاری میکند. انتخاب، قفلها هرچه بگویند، در فایل ذخیره نمیشود، با همکاران به اشتراک گذاشته نمیشود و برای واگرد ثبت نمیشود، و تغییر یک همکار در تنظیمی که شما انتخاب کردهاید انتخاب شما را روی صفحه باقی میگذارد. زبانهٔ مولد کد همان انتخاب را نشان میدهد وgetSchemaSQL()هم بدون پایگاه داده آن را مینویسد. وقتی ویرایشگر دوباره قابل نوشتن شود، پایگاه داده و علامت نقلقولی که انتخاب کردهاید به آنچه ویرایشگر پیش از آن نشان میداد برمیگردند، همراه با هر تغییری که یک همکار از آن زمان انجام داده است؛ ویرایشگرهای فقط خواندنی را در تنظیمات ببینید.Statements،Header،Write logical names into empty commentsوTablesمانند هر جای دیگر کار میکنند، چون از پیش به همان پنجره تعلق دارند.- دو فیلد اسکریپت فقط خواندنی هستند: اسکریپتهای سند را نشان میدهند، که SQL همچنان آنها را مینویسد، و تایپ را نمیپذیرند.
Save fileوCopySQLی را که زبانه نشان میدهد ذخیره و کپی میکنند.