Sprytne Okazje — promocje, kody rabatowe i wyprzedaże

Generator schematu bazy danych

Wiele tabel, klucze obce i indeksy w jednym skrypcie SQL dla MySQL, MariaDB lub PostgreSQL

Bezpieczne (SSL)
Przetwarzanie Lokalne
100% Darmowe
Instrukcja
  • 1
    Wprowadź dane
    Wpisz treść, wklej tekst lub załaduj plik z dysku.
  • 2
    Kliknij przycisk
    Narzędzie natychmiast przetworzy Twoje dane w przeglądarce.
  • 3
    Pobierz wynik
    Skopiuj gotowy tekst lub zapisz plik na urządzeniu.
function runTool() {
  return "Wynik gotowy w 0.1s";
}

Format: tabela: kolumna:typ|modyfikatory, kolumna:typ|modyfikatory. Kolumny oddzielaj przecinkiem i spacją. Lista typów i modyfikatorów jest w ściądze pod wynikiem. Ctrl+Enter generuje schemat.

Schemat SQL gotowy

2 tabele OK

Łącznie 10 kolumn. Kod dla MySQL i MariaDB (InnoDB, utf8mb4): wklej go w phpMyAdmin, Adminer lub konsolę mysql.

Kolumny

10

Klucze obce

1

ALTER TABLE … FOREIGN KEY

Indeksy

0

poza pk i unique

Ostrzeżenia

0
OK

schemat bez zastrzeżeń

Kod SQL · MySQL / MariaDB

CREATE TABLE `users` ( `id` BIGINT NOT NULL AUTO_INCREMENT, `name` VARCHAR(255) NOT NULL, `email` VARCHAR(255) NOT NULL UNIQUE, `password` VARCHAR(255) NOT NULL, `created_at` TIMESTAMP, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; CREATE TABLE `orders` ( `id` BIGINT NOT NULL AUTO_INCREMENT, `user_id` BIGINT, `total` DECIMAL(12,2) NOT NULL, `status` VARCHAR(20) DEFAULT 'pending', `created_at` TIMESTAMP, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; -- Klucze obce ALTER TABLE `orders` ADD CONSTRAINT `fk_orders_user_id` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE;
647 znaków · 77 słów · 21 linii
Plik zaimportujesz w phpMyAdmin (Import), Adminerze albo poleceniem konsoli.
Tabele i powiązania w schemacie
TabelaKolumnyKlucz głównyPowiązania (klucze obce)
users 5 id —
orders 5 id user_id → users.id

Ściąga: typy kolumn w MySQL i PostgreSQL

Co generator wstawia dla każdego typu
Wpisz w poluMySQL / MariaDBPostgreSQL
bigint BIGINT BIGINT
int INT INTEGER
smallint SMALLINT SMALLINT
tinyint TINYINT SMALLINT
boolean TINYINT(1) BOOLEAN
decimal|12,2 DECIMAL(12,2) NUMERIC(12,2)
string|255 VARCHAR(255) VARCHAR(255)
char|2 CHAR(2) CHAR(2)
uuid CHAR(36) UUID
text TEXT TEXT
longtext LONGTEXT TEXT
timestamp TIMESTAMP TIMESTAMP
datetime DATETIME TIMESTAMP
date DATE DATE
time TIME TIME
json JSON JSONB
float FLOAT REAL
double DOUBLE DOUBLE PRECISION

Modyfikatory kolumn

Modyfikatory łączysz pionową kreską, np. email:string|255|unique|notnull
ModyfikatorCo robiPrzykład
pk Klucz główny (NOT NULL). Pojedyncza kolumna całkowita bez fk dostaje autonumerację. Kilka kolumn z pk = klucz złożony. id:bigint|pk
auto Autonumeracja: AUTO_INCREMENT w MySQL, IDENTITY w PostgreSQL. Tylko typy całkowite. nr:int|auto|unique
notnull Wartość wymagana (NOT NULL). name:string|255|notnull
unique Wartości nie mogą się powtarzać (UNIQUE). email:string|255|unique
index Zwykły indeks przyspieszający wyszukiwanie. status:string|20|index
default:wartość Wartość domyślna: tekst, liczba, null, true/false (boolean), now (bieżący czas). status:string|20|default:new
fk:tabela.kolumna Klucz obcy do innej tabeli; samo fk:tabela oznacza kolumnę id. user_id:bigint|fk:users.id
liczba albo liczba,liczba Długość VARCHAR/CHAR albo precyzja i skala DECIMAL. price:decimal|10,2

Klucze obce i ON DELETE

CASCADE usuwa wiersze zależne razem z rekordem nadrzędnym: skasowanie użytkownika skasuje też jego zamówienia. RESTRICT i NO ACTION blokują usunięcie, dopóki istnieją powiązane wiersze. SET NULL zeruje kolumnę klucza obcego, więc ta kolumna nie może mieć notnull. Typ kolumny klucza obcego musi być zgodny z kolumną, do której się odwołuje (np. BIGINT i BIGINT).

Kiedy dodać indeks

Indeks przyspiesza wyszukiwanie, sortowanie i złączenia po kolumnie (WHERE, ORDER BY, JOIN), ale spowalnia zapis i zajmuje miejsce. Dodawaj index do kolumn, po których filtrujesz. Klucz główny i unique mają indeks z definicji. InnoDB sam tworzy indeks dla klucza obcego, PostgreSQL nie, dlatego w tym dialekcie generator dodaje go za Ciebie.

Kodowanie utf8mb4

utf8mb4 zapisuje wszystkie znaki Unicode, także emoji. W MySQL utf8 to alias utf8mb3 (do 3 bajtów na znak), który emoji nie zapisze, a latin1 nie obejmuje liter takich jak ą, ę czy ł. W PostgreSQL kodowanie ustala się dla całej bazy, dlatego przy tym dialekcie opcja znika.

Kolejność tabel i importu

Generator najpierw tworzy wszystkie tabele, potem indeksy, a na końcu dodaje klucze obce przez ALTER TABLE. Dzięki temu kolejność wierszy w polu nie ma znaczenia, a tabela może wskazywać tabelę zdefiniowaną niżej. Nazwy tabel i kolumn mogą zawierać tylko litery bez polskich znaków, cyfry i podkreślnik.

Oceń to narzędzie:

Powiązane narzędzia

Inne narzędzia, które mogą Ci się przydać

Generator schematu bazy danych

Opisz strukturę w prostym formacie tekstowym, a generator schematu bazy danych przygotuje kompletny skrypt DDL: instrukcje CREATE TABLE, indeksy i klucze obce. Kod wygenerujesz dla MySQL i MariaDB albo dla PostgreSQL, a potem skopiujesz go lub pobierzesz jako plik schemat.sql.

Format

Jedna tabela zajmuje jeden wiersz:

tabela: kolumna:typ|modyfikatory, kolumna2:typ|modyfikatory

Przykład:

users: id:bigint|pk|auto, email:string|255|unique|notnull
orders: id:bigint|pk|auto, user_id:bigint|fk:users.id, total:decimal|12,2

Kolumny oddzielasz przecinkiem i spacją, a typ od modyfikatorów pionową kreską. Wiersze zaczynające się od #, -- lub // są komentarzami i zostają pominięte. Nazwy tabel i kolumn mogą zawierać tylko litery bez polskich znaków, cyfry i podkreślnik; inne znaki generator usuwa i zgłasza ostrzeżenie. Jednorazowo przetworzysz do 100 tabel i 20 000 znaków definicji. Na start masz trzy gotowe przykłady: blog, sklep oraz projekty z zadaniami.

Modyfikatory

ModyfikatorEfekt
pkklucz główny (zawsze NOT NULL); pk przy kilku kolumnach tworzy klucz złożony
autoautonumeracja: AUTO_INCREMENT w MySQL, GENERATED BY DEFAULT AS IDENTITY w PostgreSQL; tylko typy całkowite
notnullNOT NULL
nullkolumna dopuszcza NULL (tak jest też bez modyfikatora)
uniqueUNIQUE w definicji kolumny
indexosobna instrukcja CREATE INDEX o nazwie idx_tabela_kolumna
default:wartośćwartość domyślna: liczba, tekst, null, true/false dla boolean, now dla timestamp i datetime
fk:tabela.kolumnaklucz obcy z akcją ON DELETE wybraną w opcjach; samo fk:tabela wskazuje kolumnę id
255 albo 12,2długość VARCHAR i CHAR albo precyzja i skala DECIMAL

Typy

bigint, int (integer), smallint, tinyint, decimal (numeric), string (varchar), char, uuid, text, longtext, boolean (bool), timestamp, datetime, date, time, json, float, double. Bez podanej długości string daje VARCHAR(255), char – CHAR(1), a decimal – DECIMAL(12,2). Nieznany typ zamienia się na VARCHAR(255) i trafia na listę ostrzeżeń.

Jak działa generator schematu bazy danych

Narzędzie czyta tekst linia po linii. Każda linia to jedna tabela: nazwa stoi przed pierwszym dwukropkiem, a po nim lista kolumn. Separatorem kolumn jest przecinek, po którym stoi spacja, dlatego zapis decimal|12,2 bez spacji pozostaje jedną kolumną i daje DECIMAL(12,2).

Typy są tłumaczone na składnię wybranej bazy. W MySQL boolean staje się TINYINT(1), uuid – CHAR(36), a json – JSON. W PostgreSQL te same zapisy dają BOOLEAN, UUID i JSONB, decimal zamienia się na NUMERIC, a nazwy są ujmowane w cudzysłowy zamiast odwrotnych apostrofów. Pojedyncza kolumna całkowita z pk, która nie jest kluczem obcym, dostaje autonumerację nawet bez modyfikatora auto. Jeśli tabela nie ma żadnego pk, a ma kolumnę id, kluczem głównym zostaje id.

Skrypt powstaje w trzech blokach. Najpierw idą wszystkie instrukcje CREATE TABLE, potem indeksy, a na końcu klucze obce dopisywane przez ALTER TABLE ADD CONSTRAINT. Definicja może więc odwoływać się do tabeli, która w polu stoi niżej, i nie trzeba ręcznie sortować wierszy. W MySQL każda tabela dostaje wybrany silnik (InnoDB lub MyISAM) i kodowanie (utf8mb4, utf8 lub latin1). Indeksy i klucze obce możesz wyłączyć osobnymi polami wyboru.

Pod wynikiem widać liczbę tabel, kolumn, kluczy obcych i indeksów, tabelę powiązań oraz listę ostrzeżeń. Generator zgłasza między innymi klucz obcy do nieistniejącej tabeli lub kolumny, różne typy po obu stronach relacji, ON DELETE SET NULL na kolumnie z notnull, MyISAM z kluczami obcymi i kodowanie bez pełnego Unicode.

Przykład: domyślny schemat krok po kroku

  1. Po wejściu na stronę w polu jest przykład z dwiema tabelami. users ma kolumny id, name, email, password i created_at, a orders – id, user_id, total, status i created_at.
  2. Parser wyodrębnia dziesięć definicji kolumn, ponieważ 5 + 5 = 10.
  3. Typy zostają zamienione: bigint na BIGINT, string|255 na VARCHAR(255), string|20 na VARCHAR(20), decimal|12,2 na DECIMAL(12,2), a timestamp na TIMESTAMP.
  4. Obie kolumny id dostają NOT NULL i AUTO_INCREMENT oraz linię PRIMARY KEY. Kolumna email otrzymuje NOT NULL UNIQUE, status – DEFAULT 'pending', a NOT NULL pojawia się też przy name, password i total.
  5. Klucz obcy orders.user_id → users.id trafia na koniec skryptu jako instrukcja ALTER TABLE z ograniczeniem fk_orders_user_id.
  6. Wynik dla MySQL: 2 tabele, 10 kolumn, 1 klucz obcy, 0 indeksów i brak ostrzeżeń. Po przełączeniu na PostgreSQL licznik indeksów pokaże 1, bo generator doda CREATE INDEX na orders.user_id.

Fragment wyniku dla MySQL z domyślnymi opcjami:

CREATE TABLE `orders` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`user_id` BIGINT,
`total` DECIMAL(12,2) NOT NULL,
`status` VARCHAR(20) DEFAULT 'pending',
`created_at` TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

ALTER TABLE `orders` ADD CONSTRAINT `fk_orders_user_id` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE;

Mapowanie zapisu na obiekty w bazie

Zapis w narzędziuMySQL / MariaDBPostgreSQLKiedy używać
string|255VARCHAR(255)VARCHAR(255)Teksty o znanej, ograniczonej długości
textTEXTTEXTDłuższe opisy bez sztywnego limitu znaków
bigint|pk|autoBIGINT NOT NULL AUTO_INCREMENTBIGINT NOT NULL GENERATED BY DEFAULT AS IDENTITYKlucz główny rosnący automatycznie
decimal|12,2DECIMAL(12,2)NUMERIC(12,2)Kwoty: 10 cyfr przed przecinkiem i 2 po
booleanTINYINT(1)BOOLEANFlagi tak lub nie
uuidCHAR(36)UUIDIdentyfikatory generowane poza bazą
jsonJSONJSONBDane o zmiennej strukturze
timestamp|default:nowTIMESTAMP DEFAULT CURRENT_TIMESTAMPTIMESTAMP DEFAULT CURRENT_TIMESTAMPZnacznik czasu utworzenia rekordu
fk:users.idALTER TABLE … FOREIGN KEY … REFERENCES `users` (`id`)ALTER TABLE … FOREIGN KEY … REFERENCES "users" ("id")Powiązanie z rekordem nadrzędnym
uniqueUNIQUEUNIQUEWartości, które nie mogą się powtarzać

Praktyczne wskazówki

  • Podawaj długość przy string. Zapis string|20 mówi wprost, ile znaków przewidujesz; bez liczby generator wstawi VARCHAR(255).
  • Kolumna klucza obcego musi mieć ten sam typ co kolumna docelowa, np. BIGINT i BIGINT. Przy niezgodności baza odrzuci ALTER TABLE, a generator ostrzega o tym przed importem.
  • Modyfikator index przy kolumnie z unique albo przy pierwszej kolumnie klucza głównego nic nie zmienia: obie mają indeks z definicji, więc generator go pomija.
  • Kolumna z fk bez notnull dopuszcza rekord bez powiązania. Dodaj notnull, gdy relacja jest obowiązkowa, ale nie łącz go z ON DELETE SET NULL.
  • Index dodawaj do kolumn, po których filtrujesz lub sortujesz, np. status czy due_date. InnoDB sam zakłada indeks na kolumnie klucza obcego, PostgreSQL nie, dlatego w tym dialekcie generator dopisuje go za Ciebie.
  • Trzymaj definicję w kontroli wersji. Kilka linii opisu struktury łatwiej przejrzeć niż ręcznie pisane instrukcje rozsiane po migracjach.

Czego narzędzie nie uwzględnia

  • Skrypt tworzy nowe tabele. Nie zmieni działającej tabeli ani nie przeniesie danych; zmiany w istniejącej bazie przygotujesz w generatorze SQL ALTER TABLE.
  • Akcja ON DELETE (CASCADE, RESTRICT, SET NULL lub NO ACTION) jest wspólna dla wszystkich kluczy obcych w skrypcie, a klauzula ON UPDATE nie jest dodawana.
  • Klucz złożony da się zapisać tylko jako klucz główny. Klucze obce, unique i indeksy dotyczą zawsze jednej kolumny.
  • Brakuje typów enum i blob, atrybutu UNSIGNED, kolacji i komentarzy kolumn. Takie elementy trzeba dopisać ręcznie w gotowym pliku.
  • Generator nie sprawdza rozmiaru wiersza ani długości indeksu, a zbyt długie nazwy skraca do 64 znaków w MySQL i 63 w PostgreSQL. Wynik najlepiej uruchomić najpierw na kopii bazy.

Najczęstsze pytania

Czy wygenerowany skrypt mogę od razu uruchomić w MySQL?

Tak, jeśli lista ostrzeżeń jest pusta. Kod wklejasz w phpMyAdmin, Adminer lub konsolę mysql albo importujesz pobrany plik schemat.sql; tabele, indeksy i klucze obce są ułożone w kolejności, która wykona się bez błędów.

Czy generator obsługuje PostgreSQL?

Tak. Po wybraniu PostgreSQL autonumeracja to GENERATED BY DEFAULT AS IDENTITY, json staje się JSONB, a kolumny kluczy obcych dostają osobne indeksy. Opcje silnika i kodowania znikają, bo w PostgreSQL kodowanie ustala się dla całej bazy.

Jak zapisać klucz obcy do innej tabeli?

Modyfikatorem fk:tabela.kolumna, na przykład fk:users.id; samo fk:users również wskaże kolumnę id. Zachowanie przy usuwaniu rekordu nadrzędnego wybierasz w polu ON DELETE.

Czy kolejność tabel ma znaczenie?

Nie. Klucze obce są dodawane na końcu skryptu, więc tabela może wskazywać tabelę zdefiniowaną niżej.

Jak zrobić tabelę łączącą relację wiele do wielu?

Dodaj pk i fk do obu kolumn, np. project_user: project_id:bigint|pk|fk:projects.id, user_id:bigint|pk|fk:users.id. Powstanie złożony klucz główny bez autonumeracji; gotowy wzór jest w przykładzie „Projekty i zadania”.

Dlaczego przecinek w decimal|12,2 nie rozbija definicji kolumny?

Kolumny rozdziela przecinek ze spacją, a w 12,2 spacji nie ma. Jeśli napiszesz 12, 2, generator potraktuje „2” jako nową kolumnę.

Zainstaluj Webp.pl Miej narzędzia we własnej kieszeni!