Schemă SQL
Fila Schema SQL afișează codul DDL al diagramei pentru baza de date selectată: codul SQL care îi creează tabelele, cu cheile, indexurile și cheile străine ale acestora.
Treceți la fila Schema SQL din bara de instrumente sau alegeți Schema SQL sub Tab în căutarea rapidă. Alegerea elementului Schema SQL din submeniul Export o deschide de asemenea, pregătită pentru salvare (consultați Salvarea sau copierea codului SQL).
Codul SQL se află în stânga, iar în dreapta lui un panou de opțiuni cu titlul Schema SQL conține variantele care îl determină (consultați Panoul de opțiuni). Și într-o limbă de afișare de la dreapta la stânga, codul SQL rămâne în stânga și se citește de la stânga la dreapta.
Panoul se deschide singur, cu excepția cazului în care editorul este mai îngust de 640 px când fila se deschide prima dată. Butonul Hide options din antetul panoului îl restrânge, iar butonul Show options din dreapta sus a codului îl readuce. Apoi rămâne deschis sau restrâns așa cum l-ați lăsat, inclusiv la schimbarea filelor, cât timp editorul este deschis. Se restrânge și se deschide independent de panoul filei Generator de cod și nu se salvează niciodată în fișier.

Faceți clic dreapta pe codul SQL pentru a-i deschide meniul contextual:
DatabaseșiBracket, fiecare un submeniu care bifează valoarea curentă.StatementsșiHeader, fiecare un submeniu care bifează varianta în vigoare. O variantă pe care baza de date nu o are poartă o mențiune estompată, de exemplunot in Oracle, și nu face nimic.Options panel, bifat cât timp panoul este afișat, care restrânge sau deschide panoul.Save file
Cât timp această filă este deschisă, căutarea rapidă oferă Database și Bracket; Schema SQL: Statements și Schema SQL: Header, care listează doar variantele pe care le are baza de date; și Schema SQL: Options panel, care restrânge sau deschide panoul.
Codul SQL este scris când fila se deschide și din nou de fiecare dată când se schimbă una dintre variantele panoului, numele bazei de date sau un script. O editare a tabelelor făcută cât timp fila este deschisă, de exemplu de un colaborator sau de un agent de programare, apare după ce părăsiți fila și reveniți sau după ce se schimbă unul dintre aceste elemente.
Panoul Proprietăți tabel are propria filă Schema SQL, care afișează codul DDL al unui singur tabel. Aceasta scrie întotdeauna instrucțiuni CREATE simple, fără antet sau scripturi, nu are panou de opțiuni, iar meniul ei contextual oferă doar Database și Bracket.
Panoul de opțiuni
Panoul conține trei grupuri, fiecare sub un titlu:
Saved in the document:DatabaseșiBracket(consultați Bază de date și delimitator).This window only:Statements,Headerși, cât timp diagrama are un grup de tabele,Tables(consultați Instrucțiuni, Antet și Tabele).Saved in the document · written as is for every database: scripturileBefore tablesșiAfter tables(consultați Scripturi înainte și după tabele).
Butoanele Save file și Copy se află în partea de jos a panoului (consultați Salvarea sau copierea codului SQL).
Variantele de sub This window only aparțin ferestrei editorului în care le alegeți. Ele nu se salvează în document, nu se partajează cu colaboratorii și nu se înregistrează pentru anulare, iar când editorul este închis sau reîncărcat se resetează; schimbarea filei le păstrează.
Opțiunea Statements pornește de la If not exists, iar Header de la CREATE + USE. Codul SQL pe care îl citește cu getSchemaSQL() o pagină care încorporează editorul și codul SQL pe care îl citește un agent de programare pornesc în schimb de la Create, fără antet.
O variantă pe care baza de date selectată nu o are rămâne în panou, estompată, cu sfatul ecran Not in <database>, de exemplu Not in Oracle, iar apăsarea ei nu face nimic.
Codul SQL folosește atunci cea mai apropiată formă pe care o are baza de date, iar butonul acelei forme apare apăsat: If not exists revine la Create, CREATE + USE la USE sau la None acolo unde baza de date nu are nici USE, iar USE la None. Alegerea dumneavoastră se păstrează, astfel încât trecerea la o bază de date care are acea variantă o readuce.
Bază de date și delimitator
Opțiunea Database este baza de date a diagramei, aceeași setare ca Database din meniul contextual al pânzei și cea din generatorul de cod (consultați Baze de date). Listează Databricks, MSSQL, MariaDB, MySQL, Oracle, PostgreSQL, Snowflake și SQLite, pornește de la MySQL și se salvează în fișier ca orice editare.
Opțiunea Bracket stabilește delimitatorul care încadrează numele tabelelor, coloanelor, constrângerilor și indexurilor: SingleQuote, DoubleQuote, Backtick sau None, adică nicio delimitare, care este valoarea implicită. Este aceeași setare ca cea din generatorul de cod (consultați Delimitator).
Snowflake, care delimitează numele doar cu ghilimele duble, le folosește la orice variantă în afară de None, iar Databricks delimitează întotdeauna numele cu apostrofuri inverse.
Opțiunea Bracket se salvează în fișier doar cât timp blocarea Bracket Type din fila Setări este dezactivată, iar o diagramă nouă are toate blocările activate. Cât timp blocarea este activată, o modificare rescrie codul SQL de pe ecran, dar fișierul păstrează valoarea blocată, iar diagrama se redeschide cu ea (consultați Blocare).
Cât timp baza de date este Oracle și codul SQL conține un nume mai lung de 30 de octeți, pe care Oracle 12.1 și versiunile mai vechi îl refuză, o mențiune sub cele două liste numește fiecare astfel de nume: Oracle 12.2+ for names over 30 bytes: <names>. Sunt verificate numele de tabele, coloane, scheme, chei, indexuri, secvențe și triggere. Codul SQL în sine nu se schimbă.
Instrucțiuni
Opțiunea Statements determină modul în care sunt create tabelele:
Createscrie instrucțiuniCREATEsimple.If not existsomite tabelele și indexurile care există deja. MySQL, MariaDB, PostgreSQL, SQLite și Databricks au această variantă; MSSQL, Oracle și Snowflake scriu în schimbCreate.- MySQL scrie fiecare tabel ca
CREATE TABLE IF NOT EXISTS, cu constrângerile unice, indexurile și cheile străine în interiorul lui, și pune întregul lot întreSET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;șiSET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;. - MariaDB pune
IF NOT EXISTSîn fiecare instrucțiune: înCREATE TABLE, în fiecare constrângereUNIQUEșiFOREIGN KEYși în fiecareCREATE INDEX. - PostgreSQL scrie
CREATE TABLE IF NOT EXISTSșiCREATE INDEX IF NOT EXISTSși elimină fiecare cheie străină cuDROP CONSTRAINT IF EXISTSînainte de a o adăuga din nou. - SQLite scrie
CREATE TABLE IF NOT EXISTSșiCREATE INDEX IF NOT EXISTS. - Databricks scrie
CREATE TABLE IF NOT EXISTSși elimină fiecare cheie străină cuDROP CONSTRAINT IF EXISTSînainte de a o adăuga din nou.
- MySQL scrie fiecare tabel ca
Drop & re-createelimină toate tabelele pe care le scrie înainte de a le crea din nou, exceptând Snowflake. Toate bazele de date au această variantă:- MySQL și MariaDB scriu câte un
DROP TABLE IF EXISTSpentru fiecare tabel, între aceleași două linii care dezactivează și apoi reactivează verificarea cheilor străine. - PostgreSQL scrie un singur
DROP TABLE IF EXISTScare numește toate tabelele și care eșuează dacă un tabel din afara listei referă unul dintre ele. Cu antetulCREATE + USE, un tabel al cărui nume nu indică nicio schemă este eliminat din acea schemă, de exemplushop.member. - MSSQL scrie o singură tranzacție, care necesită SQL Server 2016 sau o versiune ulterioară, după cum indică sfatul ecran
SQL Server 2016+al butonului. Aceasta elimină cheile străine pe care le conțin tabelele scrise, apoi tabelele, cu un singurDROP TABLE IF EXISTS, și se anulează în caz de eroare. O cheie străină conținută de un tabel din afara listei blochează în continuare eliminarea. - SQLite scrie
PRAGMA foreign_keys=OFF;, care rămâne în vigoare pentru acea conexiune, apoi câte unDROP TABLE IF EXISTSpentru fiecare tabel. - Oracle scrie
DROP TABLE … CASCADE CONSTRAINTSpentru fiecare tabel șiDROP SEQUENCEpentru fiecare secvență de autoincrementare, fiecare într-un bloc PL/SQL care se termină cu o linie/și ignoră eroarea generată de un tabel sau de o secvență inexistentă. - Databricks scrie câte un
DROP TABLE IF EXISTSpentru fiecare tabel. - Snowflake nu elimină nimic și scrie în schimb
CREATE OR REPLACE TABLE.
- MySQL și MariaDB scriu câte un
Cât timp varianta Drop & re-create este în vigoare, un avertisment din panou numește tabelele pe care le elimină: Drops <tables> before creating them. Their rows are lost. sau, pentru Snowflake, Replaces <tables>. Their rows are lost.
Sunt numite integral până la cinci tabele. Peste cinci, avertismentul le numește pe primele patru și le numără pe celelalte, de exemplu a, b, c, d, and 3 more tables.
Antet
Opțiunea Header începe codul SQL cu instrucțiunile care creează sau selectează baza de date, ori schema, în care rulează acesta. Numele este numele bazei de date al diagramei, tastat în câmpul database name din bara de instrumente, și este delimitat cu caracterul ales la Bracket.
- MySQL și MariaDB:
USEscrieUSE shop;, iarCREATE + USEscrie înainte de aceastaCREATE DATABASE IF NOT EXISTS shop;. - MSSQL:
USEscrieUSE shopșiGO, iarCREATE + USEscrie înainte de acesteaIF DB_ID(N'shop') IS NULL CREATE DATABASE shopșiGO. - PostgreSQL are doar
CREATE + USE, care scrieCREATE SCHEMA IF NOT EXISTS shop;șiSET search_path TO shop, public;. - Oracle are doar
USE, care scrieALTER SESSION SET CURRENT_SCHEMA = shop;.CREATE + USErevine la această variantă, așa că aceasta este linia pe care o scrie Oracle cu antetul implicit al filei. - Snowflake și Databricks:
USEscrieUSE SCHEMA shop;, iarCREATE + USEscrie înainte de aceastaCREATE SCHEMA IF NOT EXISTS shop;. - SQLite nu are niciuna dintre ele și nu scrie niciun antet.
Acolo unde baza de date are USE sau CREATE + USE, sfatul ecran al butonului indică ce scrie acesta pentru ea, de exemplu CREATE SCHEMA + SET search_path pentru PostgreSQL.
Un antet se scrie doar cât timp numele bazei de date este un identificator simplu: o literă ASCII (A–Z, a–z) sau _, urmată de litere ASCII, cifre sau _.
Cu orice alt nume, inclusiv cu unul gol, nu se scrie niciun antet, iar instrucțiunea DROP TABLE din PostgreSQL nu numește atunci nicio schemă. Cât timp este în vigoare un alt antet decât None, o mențiune sub Header semnalează acest lucru: Database name "<name>" is not a valid identifier.
Numele bazei de date al unei diagrame noi este gol, așa că, până când îi dați un nume, panoul afișează Database name "" is not a valid identifier.
Tabele
Cât timp diagrama are cel puțin un grup de tabele, afișat sau ascuns, opțiunea Tables apare sub This window only, cu o casetă de selectare pentru fiecare variantă:
All, care bifează sau debifează toate casetele. Afișează o stare mixtă cât timp doar unele sunt bifate.- Câte o casetă pentru fiecare grup de tabele, în ordinea grupurilor din diagramă, etichetată cu numele grupului sau cu
unnamedpentru un grup fără nume, după un punct în culoarea grupului când acesta are o culoare. No group, pentru tabelele care nu fac parte din niciun grup.
Cu toate casetele bifate, fila scrie întreaga diagramă.
Cu doar unele bifate, scrie tabelele casetelor bifate, cu indexurile lor și cu cheile străine pe care le conțin, inclusiv una care referă un tabel omis. Scripturile înainte și după tabele se scriu în continuare, iar Drop & re-create, avertismentul său și mențiunea Oracle despre numele lungi se aplică doar acelor tabele.
Fără nicio casetă bifată, fila nu scrie nimic, iar deasupra codului apare indicația No tables chosen. Check some under Tables. Butonul Save file salvează atunci un fișier gol, iar Copy copiază un text gol.
Ca în cazul opțiunilor Statements și Header, alegerea aparține ferestrei (consultați Panoul de opțiuni).
Un grup adăugat ulterior pornește bifat doar dacă în acel moment toate casetele erau bifate. Eliminarea unui grup îi elimină caseta, iar eliminarea ultimului grup bifează din nou totul.
Alegerea se aplică doar acestei file. Fila Schema SQL din panoul Proprietăți tabel și metoda getSchemaSQL() nu sunt afectate de ea.
Scripturi înainte și după tabele
Câmpurile Before tables și After tables conțin cod SQL propriu, de exemplu instrucțiuni CREATE EXTENSION sau SET înainte de tabele ori permisiuni, vizualizări și date inițiale după ele.
Acestea se salvează în document, o singură pereche pentru întreaga diagramă, indiferent de baza de date. Fiecare este scris în codul SQL așa cum l-ați tastat, fără a fi verificat vreodată: scriptul de dinaintea tabelelor, după antet și înaintea instrucțiunilor DROP și a tabelelor, iar scriptul de după tabele, chiar la final.
Sfârșiturile de linie se scriu ca LF, iar liniile goale dinaintea unui script și spațiile albe de după el sunt eliminate.
Pentru MSSQL, se adaugă o linie GO după un script a cărui ultimă linie nu este GO (sau GO cu un număr), după cum precizează textul de sub cele două câmpuri. Pentru Oracle, încheiați manual un bloc PL/SQL cu linia lui /.
Câmpurile evidențiază sintaxa SQL și se măresc odată cu textul lor.
O editare se aplică atunci când părăsiți câmpul, făcând clic în altă parte sau schimbând fila, și abia atunci se schimbă codul SQL de alături și documentul. Un câmp în care doar ați făcut clic nu schimbă nimic.
O editare a unui script modifică diagrama ca orice altă editare: se salvează în fișier, colaboratorii o văd, iar fiecare editare aplicată constituie în istoricul anulărilor un pas pe care îl anulați din fila ERD.
Cât timp tastați într-un câmp, comenzile rapide proprii ale editorului sunt lăsate în seama câmpului, astfel încât Ctrl + Z (Windows/Linux) sau ⌘ + Z (Mac) anulează ce ați tastat acolo, iar copierea, decuparea și lipirea acționează asupra textului, nu asupra diagramei.
Căutarea rapidă și căutarea din explorator se deschid în continuare cu comenzile lor rapide, Ctrl + K și Ctrl + F (Windows/Linux) sau ⌘ + K și ⌘ + F (Mac). Deoarece Ctrl + F sau ⌘ + F trece la fila ERD, aplică editarea, ca orice schimbare de filă.
Un câmp fără focusul tastaturii preia o modificare pe care un colaborator sau un agent de programare o face scriptului său. Un câmp în care vă aflați afișează acea modificare când îl părăsiți fără să fi tastat. Dacă ați tastat, textul dumneavoastră se aplică la ieșire și îl înlocuiește pe al lor.
Salvarea sau copierea codului SQL
Comanda Save file, din partea de jos a panoului sau din meniul contextual, salvează exact codul SQL afișat de filă, cu baza de date, delimitatorul, instrucțiunile, antetul, tabelele și scripturile curente, ca <database name>-<timestamp>.sql. Fișierul este denumit și salvat ca orice alt export (consultați Exportarea).
Elementul Export ▸ Schema SQL, din meniul contextual al pânzei sau din căutarea rapidă, nu salvează nimic singur.
Trece la această filă, deschide panoul de opțiuni chiar dacă era restrâns și mută focusul tastaturii pe Save file, astfel încât apăsarea tastei Enter salvează fișierul.
Butonul Copy din partea de jos a panoului, sau butonul de copiere care apare în dreapta sus a codului cât timp treceți cu indicatorul peste acesta, copiază codul SQL.
O notificare Copied! cu o bifă confirmă copierea timp de două secunde. Dacă browserul sau aplicația gazdă refuză accesul la clipboard, o notificare Couldn't copy to the clipboard cu un semn de avertizare semnalează în schimb acest lucru. O nouă copiere înlocuiește notificarea în loc să adauge alta.
Codul SQL poate fi și selectat, astfel încât puteți prelua doar o parte din el.
Ce scrie codul DDL
Aceste reguli se aplică oriunde editorul scrie cod Schemă SQL: în această filă și în fișierul ei, precum și în codul SQL pe care îl citește o pagină care încorporează editorul sau un agent de programare.
Fila Schema SQL din panoul Proprietăți tabel le respectă pentru singurul tabel pe care îl afișează. Nu scrie chei străine, cu excepția celor din SQLite, care se află în instrucțiunea CREATE TABLE a tabelului, și nici secvențe sau triggere Oracle.
Părțile apar în această ordine, separate de câte o linie goală: antetul, scriptul de dinaintea tabelelor, instrucțiunile DROP, tabelele și scriptul de după tabele. Tabelele sunt scrise în ordinea numelor.
Pentru o diagramă fără tabele și fără scripturi nu se scrie nimic, chiar dacă este ales un antet.
Autoincrementare
O coloană marcată cu Auto Increment este scrisă așa cum o scrie fiecare bază de date: AUTO_INCREMENT în MySQL și MariaDB, IDENTITY(1,1) în MSSQL, AUTOINCREMENT în Snowflake și GENERATED ALWAYS AS IDENTITY în PostgreSQL și Databricks.
Oracle primește o secvență SEQ_<table> și un trigger SEQ_TRG_<table> care completează coloana din aceasta. Triggerul se termină cu o linie /, astfel încât SQL*Plus și SQLcl îl rulează.
Acolo unde o bază de date nu acceptă autoincrementarea pentru tipul coloanei, clauza este omisă, iar o linie de comentariu de după tabel numește coloana:
- PostgreSQL o acceptă doar pentru
smallint,integersaubigint, sub oricare dintre numele lor:INT,INTEGER,BIGINT,SMALLINT,INT2,INT4sauINT8. O coloană de alt tip nu primește nici clauza, nici o valoare implicită, iar comentariul este, de exemplu,-- PostgreSQL takes IDENTITY only on smallint, integer or bigint, so member.id is written without it. - Databricks o acceptă doar pentru
BIGINTsauLONG. - SQLite acceptă
AUTOINCREMENTdoar pentru singura coloană a cheii primare a unui tabel, dacă este de tip întreg, de exempluINT,BIGINTsauINT8, cu sau fără lățime. Acea coloană este scrisă caINTEGER, iar cheia caPRIMARY KEY (id AUTOINCREMENT). O cheie dintr-o singură coloană de orice alt tip este scrisă fără acesta.
Acțiuni referențiale
Acțiunile ON DELETE și ON UPDATE pe care le scrie fiecare bază de date sunt enumerate în ON DELETE și ON UPDATE.
Acolo unde Snowflake omite o acțiune, un comentariu deasupra instrucțiunii ALTER TABLE a acelei chei străine o numește, de exemplu -- Snowflake creates no foreign key with a referential action other than NO ACTION, so ON DELETE CASCADE is left out.
Nume de tabele calificate cu schema
Cu opțiunea Bracket la None, un nume de tabel cu punct, de exemplu sales.users, este citit ca schemă și tabel, despărțite la ultimul punct din afara parantezelor drepte sau a ghilimelor duble.
- MySQL, MariaDB, MSSQL, Oracle și PostgreSQL construiesc numele automate pe care le scriu doar din partea de tabel:
FK_users_TO_ordersșiIDX_usersîn toate cele cinci,UQ_users_emailîn toate în afară de PostgreSQL șiPK_usersîn MSSQL și Oracle, singurele dintre ele care denumesc cheia primară. În cele două,[sales].[users]și"sales"."users"dau totPK_users, iar[Order]dăPK_Order. - SQLite nu denumește nicio constrângere, așa că singurul nume automat pe care îl construiește este cel al indexului:
CREATE INDEX sales.IDX_users ON users. - Oracle creează indexurile tabelului, precum și secvența și triggerul unei coloane cu autoincrementare, în schema tabelului:
sales.IDX_users,sales.SEQ_usersșisales.SEQ_TRG_users. - În Oracle și SQLite, un nume de index căruia i-ați dat dumneavoastră o schemă o păstrează.
- Un nume automat de cheie străină sau de index care repetă unul anterior, indiferent de majuscule, primește un număr. Cu
sales.usersșihr.Usersreferite amândouă dinorders, a doua cheie esteFK_Users_TO_orders1.
Cu orice altă valoare a opțiunii Bracket, întregul nume al tabelului este un singur identificator, de exemplu "PK_sales.users". Snowflake și Databricks păstrează întotdeauna numele întreg.
Rândurile Keys din fila Indexuri afișează aceleași nume.
Valori implicite
Valoarea implicită a unei coloane este scrisă așa cum ați tastat-o, dar între paranteze acolo unde baza de date citește acea expresie doar între paranteze. O valoare implicită aflată deja între paranteze este lăsată așa cum este.
- MySQL pune între paranteze orice în afară de un literal sau de ora curentă, de exemplu
(uuid()). Pune între paranteze și orice valoare implicită în afară deNULLpentru o coloanăBLOB,TEXT,JSON, spațială sauLONG…, precum și ora curentă pentru orice coloană în afară deTIMESTAMPsauDATETIME. - MariaDB pune între paranteze orice în afară de un literal, de ora curentă, de un apel de funcție sau de un nume.
- SQLite pune între paranteze orice în afară de un literal sau de un nume, de exemplu
(datetime('now')). - PostgreSQL pune între paranteze doar o expresie care conține în afara parantezelor un cuvânt precum
AT TIME ZONE,AND,OR,IS,IN,LIKE,COLLATEsau= ANY, de exemplu(now() AT TIME ZONE 'utc'). - MSSQL, Oracle, Snowflake și Databricks scriu fiecare valoare implicită așa cum a fost tastată.
Editoare doar în citire
Într-un editor cu atributul readonly, fila funcționează ca de obicei: Database și Bracket schimbă în continuare codul SQL afișat, Statements, Header și Tables funcționează în continuare, iar Save file și Copy îl salvează și îl copiază în continuare.
Singurele elemente doar în citire sunt cele două câmpuri pentru scripturi.