Schemat SQL
Karta Schema SQL pokazuje kod DDL diagramu dla wybranej bazy danych: kod SQL, który tworzy jego tabele wraz z ich kluczami, indeksami i kluczami obcymi.
Przełącz się na kartę Schema SQL na pasku narzędzi lub wybierz pozycję Schema SQL w grupie Tab w palecie Szybkie wyszukiwanie. Wybranie pozycji Schema SQL z podmenu Export również ją otwiera, od razu gotową do zapisania – zobacz sekcję Zapisywanie lub kopiowanie kodu SQL.
Kod SQL znajduje się po lewej stronie, a po jego prawej stronie panel opcji z nagłówkiem Schema SQL zawiera ustawienia, które określają postać tego kodu – zobacz sekcję Panel opcji. Również w języku wyświetlania zapisywanym od prawej do lewej kod SQL pozostaje po lewej stronie i czyta się go od lewej do prawej.
Panel otwiera się sam, chyba że przy pierwszym otwarciu karty edytor jest węższy niż 640 px. Przycisk Hide options w nagłówku panelu zwija go, a przycisk Show options w prawym górnym rogu kodu ponownie go pokazuje. Następnie panel pozostaje otwarty lub zwinięty tak, jak go zostawisz, także po przełączeniu kart, dopóki edytor jest otwarty. Zwija się i otwiera niezależnie od panelu karty Generator kodu i nigdy nie jest zapisywany w pliku.

Kliknij kod SQL prawym przyciskiem myszy, aby otworzyć jego menu kontekstowe:
- Pozycje
DatabaseiBracket, każda z nich to podmenu z zaznaczoną bieżącą wartością. - Pozycje
StatementsiHeader, każda z nich to podmenu z zaznaczoną obowiązującą opcją. Opcja, której baza danych nie obsługuje, ma przygaszony dopisek, taki jaknot in Oracle, i nic nie robi. - Pozycja
Options panel, która zwija lub otwiera panel i jest zaznaczona, gdy panel jest widoczny. Save file
Gdy ta karta jest otwarta, Szybkie wyszukiwanie oferuje polecenia Database i Bracket; polecenia Schema SQL: Statements i Schema SQL: Header, które wyświetlają tylko opcje obsługiwane przez bazę danych; a także polecenie Schema SQL: Options panel, które zwija lub otwiera panel.
Ani menu kontekstowe, ani Szybkie wyszukiwanie nie oferuje przełącznika Write logical names into empty comments, który znajduje się wyłącznie w panelu opcji – zobacz sekcję Nazwy logiczne jako komentarze.
Kod SQL jest generowany przy otwarciu karty i ponownie przy każdej zmianie jednej z opcji panelu, nazwy bazy danych lub skryptu. Zmiana tabel wprowadzona, gdy karta jest otwarta, na przykład przez współpracownika lub agenta kodującego, pojawia się dopiero, gdy opuścisz kartę i do niej wrócisz albo gdy zmieni się jedna z tych rzeczy.
Właściwości tabeli mają własną kartę Schema SQL, która pokazuje kod DDL jednej tabeli. Karta ta zawsze zapisuje zwykłe instrukcje CREATE bez nagłówka i skryptów, nigdy nie wpisuje nazwy logicznej do pustego komentarza, nie ma panelu opcji, a jej menu kontekstowe oferuje tylko pozycje Database i Bracket.
Panel opcji
Panel zawiera trzy grupy, każdą pod własnym podpisem:
Saved in the document:DatabaseiBracket– zobacz sekcję Baza danych i cudzysłów. Edytor tylko do odczytu podpisuje jeThis window only– zobacz sekcję Edytory tylko do odczytu.This window only:Statements,Header,Write logical names into empty commentsoraz, gdy diagram ma grupę tabel,Tables– zobacz sekcje Instrukcje, Nagłówek, Nazwy logiczne jako komentarze i Tabele.Saved in the document · written as is for every database: skryptyBefore tablesiAfter tables– zobacz sekcję Skrypty przed tabelami i po nich.
Przyciski Save file i Copy znajdują się u jego dołu – zobacz sekcję Zapisywanie lub kopiowanie kodu SQL.
Opcje w grupie This window only należą do okna edytora, w którym je ustawiono. Nie są zapisywane w dokumencie, udostępniane współpracownikom ani rejestrowane w historii cofania, a po zamknięciu lub ponownym wczytaniu edytora wracają do wartości początkowych; przełączanie kart je zachowuje.
Opcja Statements ma początkowo wartość If not exists, opcja Header – CREATE + USE, a przełącznik Write logical names into empty comments jest wyłączony. Kod SQL, który strona osadzająca edytor odczytuje za pomocą getSchemaSQL(), oraz kod SQL odczytywany przez agenta kodującego zaczynają natomiast od Create bez nagłówka i nie zapisują nazw logicznych, chyba że się o to poprosi.
Opcja, której wybrana baza danych nie obsługuje, pozostaje w panelu, przyciemniona, z podpowiedzią Not in <database>, na przykład Not in Oracle, a jej naciśnięcie nic nie robi.
Kod SQL używa wtedy najbliższej postaci obsługiwanej przez bazę danych, a przycisk tej postaci jest wyświetlany jako wciśnięty: zamiast If not exists używana jest opcja Create, zamiast CREATE + USE – USE albo None, jeśli baza danych nie obsługuje również USE, a zamiast USE – None. Twój wybór zostaje zachowany, więc po przełączeniu na bazę danych, która go obsługuje, znów obowiązuje.
Baza danych i cudzysłów
Opcja Database to baza danych diagramu, to samo ustawienie co pozycja Database w menu kontekstowym kanwy i baza danych w Generatorze kodu – zobacz sekcję Bazy danych. Oferuje Databricks, MSSQL, MariaDB, MySQL, Oracle, PostgreSQL, Snowflake i SQLite, początkowo ma wartość MySQL i jest zapisywana w pliku jak każda zmiana.
Opcja Bracket ustala cudzysłów, w który ujmowane są nazwy tabel, kolumn, ograniczeń i indeksów: SingleQuote, DoubleQuote, Backtick lub domyślna wartość None, która w ogóle nie ujmuje nazw w cudzysłów. Jest to ustawienie wspólne z Generatorem kodu – zobacz sekcję Cudzysłów.
Snowflake, który ujmuje nazwy wyłącznie w cudzysłowy podwójne, używa ich przy każdej opcji oprócz None, a Databricks zawsze ujmuje nazwy w grawisy.
Opcja Bracket jest zapisywana w pliku tylko wtedy, gdy blokada Bracket Type na karcie Ustawienia jest wyłączona, a nowy diagram ma włączone wszystkie blokady. Gdy blokada jest włączona, zmiana generuje na nowo kod SQL tylko w twoim edytorze: pozostałe edytory otwarte na diagramie zachowują własny cudzysłów, a plik zachowuje zablokowaną wartość, więc po ponownym otwarciu diagram ma właśnie ją – zobacz sekcję Blokada.
Gdy bazą danych jest Oracle, a kod SQL zawiera nazwę dłuższą niż 30 bajtów, której nie akceptują Oracle 12.1 ani starsze wersje, komunikat pod obiema listami wymienia każdą taką nazwę: Oracle 12.2+ for names over 30 bytes: <names>. Sprawdzane są nazwy tabel, kolumn, schematów, kluczy, indeksów, sekwencji i wyzwalaczy. Sam kod SQL się nie zmienia.
Instrukcje
Opcja Statements określa, jak tworzone są tabele:
- Opcja
Createzapisuje zwykłe instrukcjeCREATE. - Opcja
If not existspomija tabele i indeksy, które już istnieją. Obsługują ją MySQL, MariaDB, PostgreSQL, SQLite i Databricks; MSSQL, Oracle i Snowflake zapisują zamiast niejCreate.- MySQL zapisuje każdą tabelę jako
CREATE TABLE IF NOT EXISTSz jej ograniczeniami unikatowości, indeksami i kluczami obcymi wewnątrz tej instrukcji, a całość umieszcza międzySET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;aSET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;. - MariaDB dodaje
IF NOT EXISTSw każdej instrukcji: wCREATE TABLE, w każdym ograniczeniuUNIQUEiFOREIGN KEYoraz w każdej instrukcjiCREATE INDEX. - PostgreSQL zapisuje
CREATE TABLE IF NOT EXISTSiCREATE INDEX IF NOT EXISTS, a każdy klucz obcy usuwa za pomocąDROP CONSTRAINT IF EXISTS, zanim doda go ponownie. - SQLite zapisuje
CREATE TABLE IF NOT EXISTSiCREATE INDEX IF NOT EXISTS. - Databricks zapisuje
CREATE TABLE IF NOT EXISTS, a każdy klucz obcy usuwa za pomocąDROP CONSTRAINT IF EXISTS, zanim doda go ponownie.
- MySQL zapisuje każdą tabelę jako
- Opcja
Drop & re-createusuwa każdą zapisywaną tabelę przed jej ponownym utworzeniem, z wyjątkiem Snowflake. Obsługuje ją każda baza danych:- MySQL i MariaDB zapisują
DROP TABLE IF EXISTSdla każdej tabeli, między tymi samymi dwoma wierszami, które wyłączają i ponownie włączają sprawdzanie kluczy obcych. - PostgreSQL zapisuje jedną instrukcję
DROP TABLE IF EXISTSwymieniającą wszystkie tabele, która kończy się błędem, jeśli do którejś z nich odwołuje się tabela spoza listy. Przy nagłówkuCREATE + USEtabela, której nazwa nie podaje schematu, jest usuwana z tego schematu, na przykładshop.member. - MSSQL zapisuje jedną transakcję, która wymaga wersji SQL Server 2016 lub nowszej, o czym informuje podpowiedź przycisku
SQL Server 2016+. Usuwa klucze obce należące do zapisywanych tabel, następnie same tabele jedną instrukcjąDROP TABLE IF EXISTS, a w razie błędu wycofuje transakcję. Klucz obcy należący do tabeli spoza listy nadal blokuje usunięcie. - SQLite zapisuje
PRAGMA foreign_keys=OFF;, przez co klucze obce pozostają wyłączone dla tego połączenia, a następnieDROP TABLE IF EXISTSdla każdej tabeli. - Oracle zapisuje
DROP TABLE … CASCADE CONSTRAINTSdla każdej tabeli iDROP SEQUENCEdla każdej sekwencji autoinkrementacji, każdą instrukcję w bloku PL/SQL, który kończy się wierszem/i ignoruje błąd zgłaszany, gdy tabela lub sekwencja nie istnieje. - Databricks zapisuje
DROP TABLE IF EXISTSdla każdej tabeli. - Snowflake niczego nie usuwa i zamiast tego zapisuje
CREATE OR REPLACE TABLE.
- MySQL i MariaDB zapisują
Gdy obowiązuje opcja Drop & re-create, ostrzeżenie w panelu wymienia usuwane przez nią tabele: Drops <tables> before creating them. Their rows are lost., a w przypadku Snowflake Replaces <tables>. Their rows are lost.
Jeśli tabel jest najwyżej pięć, wymieniane są wszystkie z nazwy. Gdy jest ich więcej niż pięć, ostrzeżenie wymienia pierwsze cztery i podaje liczbę pozostałych, na przykład a, b, c, d, and 3 more tables.
Nagłówek
Opcja Header rozpoczyna kod SQL instrukcjami, które tworzą lub wybierają bazę danych albo schemat, w którym kod ten jest wykonywany. Nazwą jest nazwa bazy danych diagramu, wpisana w polu database name na pasku narzędzi, i jest ona ujmowana w cudzysłów wybrany w opcji Bracket.
- MySQL i MariaDB:
USEzapisujeUSE shop;, aCREATE + USEzapisuje przed tą instrukcjąCREATE DATABASE IF NOT EXISTS shop;. - MSSQL:
USEzapisujeUSE shopiGO, aCREATE + USEzapisuje przed nimiIF DB_ID(N'shop') IS NULL CREATE DATABASE shopiGO. - PostgreSQL obsługuje tylko opcję
CREATE + USE, która zapisujeCREATE SCHEMA IF NOT EXISTS shop;iSET search_path TO shop, public;. - Oracle obsługuje tylko opcję
USE, która zapisujeALTER SESSION SET CURRENT_SCHEMA = shop;. ZamiastCREATE + USEużywana jest właśnie ona, więc to ten wiersz Oracle zapisuje przy domyślnym nagłówku karty. - Snowflake i Databricks:
USEzapisujeUSE SCHEMA shop;, aCREATE + USEzapisuje przed tą instrukcjąCREATE SCHEMA IF NOT EXISTS shop;. - SQLite nie obsługuje żadnej z nich i nie zapisuje nagłówka.
Jeśli baza danych obsługuje USE lub CREATE + USE, podpowiedź przycisku podaje, co zapisuje on w tej bazie danych, na przykład CREATE SCHEMA + SET search_path w PostgreSQL.
Nagłówek jest zapisywany tylko wtedy, gdy nazwa bazy danych jest prostym identyfikatorem: pierwszym znakiem jest litera ASCII (A–Z, a–z) lub _, a po nim następują litery ASCII, cyfry lub _.
Przy każdej innej nazwie, także pustej, nagłówek nie jest zapisywany, a instrukcja DROP TABLE w PostgreSQL nie podaje wtedy schematu. Gdy obowiązuje nagłówek inny niż None, informuje o tym komunikat pod opcją Header: Database name "<name>" is not a valid identifier.
Nowy diagram ma pustą nazwę bazy danych, więc dopóki jej nie wpiszesz, panel wyświetla komunikat Database name "" is not a valid identifier.
Nazwy logiczne jako komentarze
Przełącznik Write logical names into empty comments w grupie This window only wpisuje do kodu DDL nazwę logiczną tabeli lub kolumny tam, gdzie jej komentarz jest pusty, w każdej bazie danych.

- Komentarz z tekstem zawsze ma pierwszeństwo: nazwa logiczna nigdy go nie zastępuje ani nie jest do niego dodawana.
- Komentarz składający się tylko z białych znaków jest traktowany jako pusty, więc w jego miejscu wpisywana jest nazwa logiczna. Nazwa logiczna, która jest pusta lub składa się tylko z białych znaków, niczego nie wpisuje, a ta tabela lub kolumna nadal nie otrzymuje komentarza.
- Nazwa logiczna jest zapisywana w tym miejscu i w tej postaci, w jakich baza danych zapisuje komentarz, a znajdujące się w niej znaki cudzysłowu są zapisywane ze znakiem ucieczki w ten sam sposób – zobacz sekcję Komentarze.
Na przykład w MySQL kolumna id z nazwą logiczną Member ID i bez komentarza jest zapisywana z COMMENT 'Member ID', natomiast kolumna email z nazwą logiczną Email i komentarzem Sign-in address zachowuje COMMENT 'Sign-in address'.
Podobnie jak opcje Statements i Header, ten przełącznik należy do okna i jest początkowo wyłączony – zobacz sekcję Panel opcji.
Import nigdy nie odczytuje takiego komentarza z powrotem jako nazwy logicznej – zobacz sekcję Komentarze.
Tabele
Gdy diagram ma co najmniej jedną grupę tabel, widoczną lub ukrytą, w grupie This window only pojawia się opcja Tables z polem wyboru dla każdej pozycji:
- Pole
All, które zaznacza lub odznacza wszystkie pola. Gdy zaznaczone są tylko niektóre, wyświetla stan mieszany. - Po jednym polu na każdą grupę tabel, w kolejności grup w diagramie, z podpisem w postaci nazwy grupy lub
unnameddla grupy bez nazwy, poprzedzonym kropką w kolorze grupy, jeśli grupa ma kolor. - Pole
No groupdla tabel, które nie należą do żadnej grupy.
Gdy wszystkie pola są zaznaczone, karta zapisuje cały diagram.
Gdy zaznaczone są tylko niektóre, zapisuje tabele z zaznaczonych pól wraz z ich indeksami i należącymi do nich kluczami obcymi, w tym takimi, które odwołują się do pominiętej tabeli. Skrypty przed tabelami i po nich są nadal zapisywane, a opcja Drop & re-create, jej ostrzeżenie i komunikat dla Oracle o długich nazwach obejmują tylko te tabele.
Gdy żadne pole nie jest zaznaczone, karta nie zapisuje żadnego kodu, a wskazówka nad kodem brzmi No tables chosen. Check some under Tables. Przycisk Save file zapisuje wtedy pusty plik, a przycisk Copy kopiuje pusty tekst.
Podobnie jak w przypadku opcji Statements i Header, ten wybór należy do okna – zobacz sekcję Panel opcji.
Grupa dodana później jest początkowo zaznaczona tylko wtedy, gdy w tym momencie zaznaczone były wszystkie pola. Usunięcie grupy usuwa jej pole, a usunięcie ostatniej grupy ponownie zaznacza wszystko.
Ten wybór dotyczy tylko tej karty. Nie wpływa na kartę Schema SQL we Właściwościach tabeli ani na metodę getSchemaSQL().
Skrypty przed tabelami i po nich
Pola Before tables i After tables zawierają własny kod SQL, na przykład instrukcje CREATE EXTENSION lub SET przed tabelami albo nadawanie uprawnień, widoki i dane początkowe po nich.
Są zapisywane w dokumencie, jedna para na cały diagram, niezależnie od bazy danych. Każdy z nich trafia do kodu SQL we wpisanej postaci i nigdy nie jest sprawdzany: skrypt przed tabelami – po nagłówku, a przed instrukcjami DROP i tabelami, skrypt po tabelach – na samym końcu.
Podziały wierszy są zapisywane jako LF, a puste wiersze przed skryptem i białe znaki po nim są usuwane.
W MSSQL po skrypcie, którego ostatni wiersz nie jest wierszem GO (ani GO z liczbą), dodawany jest wiersz GO, o czym informuje tekst pod obydwoma polami. W Oracle samodzielnie zakończ blok PL/SQL jego wierszem /.
Pola podświetlają składnię SQL i powiększają się wraz z tekstem.
Zmiana jest stosowana, gdy opuścisz pole, klikając w innym miejscu lub przełączając kartę, i dopiero wtedy zmieniają się kod SQL obok niego oraz dokument. Pole, w które tylko kliknięto, niczego nie zmienia.
Edycja skryptu zmienia diagram jak każda inna zmiana: jest zapisywana w pliku, widzą ją współpracownicy, a każda zastosowana zmiana stanowi jeden krok w historii cofania, który można cofnąć na karcie ERD.
Podczas pisania w polu edytor pozostawia mu obsługę własnych skrótów klawiaturowych, więc Ctrl + Z (Windows/Linux) lub ⌘ + Z (Mac) cofa to, co w nim wpisano, a kopiowanie, wycinanie i wklejanie działają na tekście zamiast na diagramie.
Szybkie wyszukiwanie i wyszukiwanie w Eksploratorze nadal otwierają się za pomocą swoich skrótów, Ctrl + K i Ctrl + F (Windows/Linux) lub ⌘ + K i ⌘ + F (Mac). Ponieważ Ctrl + F lub ⌘ + F przełącza na kartę ERD, stosuje wprowadzoną zmianę, tak jak każde przełączenie karty.
Pole bez fokusu klawiatury odzwierciedla zmianę skryptu wprowadzoną przez współpracownika lub agenta kodującego. Pole, w którym się znajdujesz, pokazuje tę zmianę po jego opuszczeniu, o ile nic w nim nie wpiszesz. Jeśli coś wpiszesz, po opuszczeniu pola stosowany jest twój tekst, który zastępuje ich wersję.
Zapisywanie lub kopiowanie kodu SQL
Polecenie Save file, dostępne u dołu panelu i w menu kontekstowym, zapisuje dokładnie ten kod SQL, który pokazuje karta, z jej bieżącą bazą danych, cudzysłowem, instrukcjami, nagłówkiem, komentarzami z nazwami logicznymi, tabelami i skryptami, jako <database name>-<timestamp>.sql. Plik jest nazywany i zapisywany tak jak każdy inny eksport – zobacz sekcję Eksportowanie.
Polecenie Export ▸ Schema SQL w menu kontekstowym kanwy lub w Szybkim wyszukiwaniu samo niczego nie zapisuje.
Przełącza na tę kartę, otwiera panel opcji, nawet jeśli był zwinięty, i ustawia fokus klawiatury na przycisku Save file, więc naciśnięcie klawisza Enter zapisuje plik.
Przycisk Copy u dołu panelu lub przycisk kopiowania, który pojawia się w prawym górnym rogu kodu po najechaniu na kod wskaźnikiem, kopiuje kod SQL.
Powiadomienie Copied! ze znacznikiem wyboru potwierdza to przez dwie sekundy. Jeśli przeglądarka lub host odmówi dostępu do schowka, zamiast tego przez pięć sekund informuje o tym powiadomienie Couldn't copy to the clipboard ze znakiem ostrzeżenia. Ponowne skopiowanie zastępuje powiadomienie, zamiast dodawać kolejne.
Kod SQL można też zaznaczyć, więc możesz skopiować tylko jego fragment.
Co zawiera kod DDL
Te reguły obowiązują wszędzie, gdzie edytor zapisuje Schemat SQL: na tej karcie i w jej pliku oraz w kodzie SQL, który odczytuje strona osadzająca edytor lub agent kodujący.
Karta Schema SQL we Właściwościach tabeli stosuje je do jednej tabeli, którą pokazuje. Nie zapisuje sekwencji ani wyzwalacza Oracle, a klucze obce zapisuje tylko dla SQLite, w którym znajdują się one wewnątrz instrukcji CREATE TABLE. Nie zapisuje też instrukcji komentarzy, które PostgreSQL, Oracle i MSSQL umieszczają po tabeli, więc w tych trzech bazach danych nie pokazuje komentarzy.
Części występują w tej kolejności, oddzielone jednym pustym wierszem: nagłówek, skrypt przed tabelami, instrukcje DROP, tabele i skrypt po tabelach. Tabele są zapisywane w kolejności nazw.
Dla diagramu bez tabel i bez skryptów nic nie jest zapisywane, nawet jeśli wybrano nagłówek.
Tabele i kolumny są zapisywane pod nazwami fizycznymi niezależnie od tego, co pokazuje Widok nazw. Kolumna powiązana z domeną jest zapisywana z własnym typem danych, który ustala domena – zobacz sekcję Domeny i typy danych.
Autoinkrementacja
Kolumna oznaczona opcją Auto Increment jest zapisywana w sposób właściwy dla każdej bazy danych: AUTO_INCREMENT w MySQL i MariaDB, IDENTITY(1,1) w MSSQL, AUTOINCREMENT w Snowflake i GENERATED ALWAYS AS IDENTITY w PostgreSQL i Databricks.
Dla Oracle zapisywane są sekwencja SEQ_<table> i wyzwalacz SEQ_TRG_<table>, który wypełnia kolumnę wartościami z tej sekwencji. Wyzwalacz kończy się wierszem /, więc SQL*Plus i SQLcl go wykonują.
Jeśli baza danych nie przyjmuje autoinkrementacji dla typu kolumny, klauzula jest pomijana, a wiersz komentarza po tabeli wskazuje tę kolumnę:
- PostgreSQL przyjmuje ją tylko dla typów
smallint,integerlubbigint, pod dowolną z ich nazw:INT,INTEGER,BIGINT,SMALLINT,INT2,INT4lubINT8. Kolumna innego typu nie dostaje ani klauzuli, ani wartości domyślnej, a komentarz brzmi na przykład-- PostgreSQL takes IDENTITY only on smallint, integer or bigint, so member.id is written without it. - Databricks przyjmuje ją tylko dla typów
BIGINTlubLONG. - SQLite przyjmuje
AUTOINCREMENTtylko dla kolumny, która jest jedynym kluczem podstawowym tabeli i ma typ całkowitoliczbowy, taki jakINT,BIGINTlubINT8, z szerokością lub bez niej. Ta kolumna jest zapisywana jakoINTEGER, a klucz jakoPRIMARY KEY (id AUTOINCREMENT). Jedyny klucz innego typu jest zapisywany bez tej klauzuli.
Akcje referencyjne
To, które akcje ON DELETE i ON UPDATE zapisuje każda baza danych, wymieniono w sekcji ON DELETE i ON UPDATE.
Jeśli Snowflake pomija akcję, wskazuje ją komentarz nad instrukcją ALTER TABLE tego klucza obcego, na przykład -- Snowflake creates no foreign key with a referential action other than NO ACTION, so ON DELETE CASCADE is left out.
Nazwy tabel kwalifikowane schematem
Gdy opcja Bracket ma wartość None, nazwa tabeli z kropką, taka jak sales.users, jest odczytywana jako schemat i tabela, podzielona przy ostatniej kropce poza nawiasami kwadratowymi lub cudzysłowami podwójnymi.
- MySQL, MariaDB, MSSQL, Oracle i PostgreSQL tworzą zapisywane przez siebie automatyczne nazwy wyłącznie z części będącej nazwą tabeli:
FK_users_TO_ordersiIDX_userswe wszystkich pięciu,UQ_users_emailwe wszystkich oprócz PostgreSQL orazPK_usersw MSSQL i Oracle, jedynych dwóch spośród nich, które nadają nazwę kluczowi podstawowemu. W tych dwóch[sales].[users]i"sales"."users"również dająPK_users, a[Order]dajePK_Order. - SQLite nie nadaje nazw ograniczeniom, więc jedyną automatyczną nazwą, jaką tworzy, jest nazwa indeksu:
CREATE INDEX sales.IDX_users ON users. - Oracle tworzy indeksy tabeli oraz sekwencję i wyzwalacz kolumny z autoinkrementacją w schemacie tabeli:
sales.IDX_users,sales.SEQ_usersisales.SEQ_TRG_users. - W Oracle i SQLite nazwa indeksu, w której samodzielnie podano schemat, zachowuje go.
- Automatyczna nazwa klucza obcego lub indeksu, która, bez uwzględniania wielkości liter, powtarza wcześniejszą, otrzymuje numer. Gdy tabela
ordersodwołuje się zarówno dosales.users, jak i dohr.Users, drugi klucz ma nazwęFK_Users_TO_orders1.
Przy każdej innej wartości opcji Bracket cała nazwa tabeli jest jednym identyfikatorem, na przykład "PK_sales.users". Snowflake i Databricks zawsze zachowują całą nazwę.
Wiersze Keys na karcie Indeksy pokazują te same nazwy.
Wartości domyślne
Wartość domyślna kolumny jest zapisywana we wpisanej postaci, ale w nawiasach tam, gdzie baza danych odczytuje dane wyrażenie tylko w nawiasach. Wartość domyślna już ujęta w nawiasy pozostaje bez zmian.
- MySQL ujmuje w nawiasy wszystko oprócz literału i bieżącego czasu, na przykład
(uuid()). Ujmuje w nawiasy także każdą wartość domyślną opróczNULLw kolumnie typuBLOB,TEXT,JSON, przestrzennego lubLONG…oraz bieżący czas w każdej kolumnie innego typu niżTIMESTAMPiDATETIME. - MariaDB ujmuje w nawiasy wszystko oprócz literału, bieżącego czasu, wywołania funkcji i nazwy.
- SQLite ujmuje w nawiasy wszystko oprócz literału i nazwy, na przykład
(datetime('now')). - PostgreSQL ujmuje w nawiasy tylko wyrażenie zawierające poza nawiasami słowo takie jak
AT TIME ZONE,AND,OR,IS,IN,LIKE,COLLATElub= ANY, na przykład(now() AT TIME ZONE 'utc'). - MSSQL, Oracle, Snowflake i Databricks zapisują każdą wartość domyślną we wpisanej postaci.
Komentarze
Komentarz tabeli lub kolumny, który nie jest pusty, albo nazwę logiczną, którą przełącznik Write logical names into empty comments wpisuje w jego miejscu, każda baza danych zapisuje tak, jak zapisuje komentarze:
- MySQL i MariaDB zapisują go bezpośrednio w definicji: kolumna kończy się klauzulą
COMMENT 'Member ID', a tabela zamyka się fragmentem) COMMENT 'Members';, także w pakiecieIf not existsdla MySQL. - Snowflake zapisuje komentarz kolumny bezpośrednio w definicji,
COMMENT 'Member ID', a komentarz tabeli w osobnym wierszu po nawiasie zamykającym,COMMENT = 'Members';. - Databricks zapisuje komentarz kolumny bezpośrednio w definicji, a komentarz tabeli jako
COMMENT 'Members';poUSING DELTA. - PostgreSQL zapisuje
COMMENT ON TABLE member IS 'Members';iCOMMENT ON COLUMN member.id IS 'Member ID';tuż po instrukcjiCREATE TABLEtabeli. Oracle zapisuje te same instrukcje po tabeli, jej ograniczeniach unikatowości oraz jej sekwencji i wyzwalaczu autoinkrementacji. - MSSQL zapisuje jedno wywołanie na każdą tabelę i każdą kolumnę, po tabeli i jej ograniczeniach unikatowości, a po każdym z nich następuje
GO:EXECUTE sys.sp_addextendedproperty 'MS_Description', N'Members', 'schema', 'dbo', 'table', 'member', z dodanym'column', 'id'w przypadku kolumny.
Tekst jest literałem znaków narodowych,N'…', więc SQL Server zachowuje tekst spoza strony kodowej bazy danych, na przykład koreański, zamiast zapisywać znaki zapytania.
Gdy opcjaBracketma wartośćNone, tabela o nazwiesales.usersdaje schematsalesi tabelęusers, podobnie jak[sales].[users]i"sales"."users", z których usuwane są nawiasy kwadratowe i cudzysłowy podwójne. Nazwa bez schematu należy do schematudbo. Część przed schematem, jak wshop.sales.users, uruchamia procedurę tej bazy danych,shop.sys.sp_addextendedproperty. Przy każdej innej wartości opcjiBracketcała nazwa jest nazwą tabeli w schemaciedbo. - SQLite nie przechowuje komentarzy, więc zapisuje każdy z nich jako wiersz
--nad opisywanym elementem:-- MembersnadCREATE TABLE memberi-- Member IDnad kolumną.
Znak cudzysłowu wewnątrz komentarza ujętego w cudzysłów jest podwajany, jak w 'it''s' i N'it''s', podobnie jak znak cudzysłowu w nazwach przekazywanych przez wywołania MSSQL. Databricks zamiast tego poprzedza znak cudzysłowu i ukośnik odwrotny ukośnikiem odwrotnym, jak w 'it\'s', czyli w postaci, którą odczytuje każda wersja Spark. Wiersze -- w SQLite nie są ujmowane w cudzysłów, więc zachowują znak cudzysłowu we wpisanej postaci: -- it's.
Poza tym tekst jest zapisywany we wpisanej postaci, łącznie z podziałami wierszy, z wyjątkiem dwóch baz danych:
- Oracle pomija puste wiersze, przy czym wiersz zawierający tylko spacje lub tabulatory liczy się jako pusty, ponieważ SQL*Plus kończy instrukcję na pustym wierszu i pomija jej resztę. Komentarz tabeli składający się z
Members, pustego wiersza iActive onlyjest zapisywany jakoCOMMENT ON TABLE member IS 'MemberszActive only';w następnym wierszu. - SQLite zapisuje każdy ciąg podziałów wierszy jako jedną spację, ponieważ podział wiersza zakończyłby wiersz
--, a resztę wykonałby jako kod SQL. Ten sam komentarz jest zapisywany jako-- Members Active only.
To, jak te komentarze są odczytywane przy imporcie, opisano w sekcji Komentarze.
Edytory tylko do odczytu
W edytorze z atrybutem readonly karta działa dla czytelnika i nic, co na niej zrobi, nie trafia do dokumentu:
DatabaseiBracketnadal zmieniają kod SQL, ale tylko w tym oknie, więc panel podpisuje je równieżThis window only. Wybór nie jest zapisywany w pliku, współdzielony ze współpracownikami ani rejestrowany do cofania, niezależnie od blokad, a zmiana ustawienia, które wybrałeś, wprowadzona przez współpracownika pozostawia na ekranie twój wybór. Karta Code Generator pokazuje ten sam wybór, agetSchemaSQL()wywołane bez bazy danych również go zapisuje. Gdy edytor znów umożliwi zapis, wybrane przez ciebie baza danych i cudzysłów wracają do tego, co edytor pokazywał wcześniej, wraz z każdą zmianą, którą w międzyczasie wprowadził współpracownik – zobacz sekcję Edytory tylko do odczytu w Ustawieniach.Statements,Header,Write logical names into empty commentsiTablesdziałają jak wszędzie, ponieważ należą już do okna.- Oba pola skryptów są tylko do odczytu: pokazują skrypty dokumentu, które kod SQL nadal zapisuje, i nie przyjmują wpisywania.
Save fileiCopyzapisują i kopiują kod SQL wyświetlany na karcie.