Schevo ist ein Datenbankmodellierer für PostgreSQL, MySQL, MariaDB und SQL Server, der das Modell in einem Git-freundlichen Format speichert: jede Tabelle in einer eigenen JSON-Datei, mit stabiler Ausgabe, die Sie wie jeden anderen Code prüfen und zusammenführen können.
Erste Schritte
- Importieren Sie Ihr Schema: Datei > SQL importieren… (Ctrl+I) und wählen Sie das Erstellungsskript der Datenbank. Schevo
zeichnet das Diagramm und gruppiert die Tabellen nach Präfix (
cat_,ord_…). - Speichern Sie das Modell (Ctrl+S) in einem Ordner Ihres Repositorys, zum Beispiel
db-model/. Wenn das SQL aus einer Datei stammt, bleibt es mit dem Modell verknüpft und wird bei jedem Speichern neu generiert. - Arbeiten und speichern: Nur die Dateien, die sich ändern, werden neu geschrieben.
Beim ersten Start lädt Schevo einen Beispiel-Onlineshop, damit Sie alles ausprobieren können. Danach öffnet es beim Start das zuletzt verwendete Modell; frühere finden Sie unter Datei > Zuletzt verwendet.
Sie können mehrere Modelle gleichzeitig geöffnet haben. Wenn im Fenster bereits ein Modell geöffnet ist, fragt Schevo beim Öffnen, Erstellen oder Importieren eines weiteren, ob ein neues Fenster oder dieses Fenster verwendet werden soll; ist das Modell bereits in einem anderen Fenster geöffnet, wird dieses Fenster in den Vordergrund geholt. Datei > Fenster schließen (Ctrl+W) schließt nur das aktuelle Fenster, Datei > Beenden schließt alle.
Der Modellordner
db-model/ project.json Name, Standardschema, SQL-Pfad, Zeilenende, Benennungsregeln tables/public.cat_product.json eine Tabelle pro Datei: Spalten, PK, FKs, Indizes, Position und Farbe extra.sql Anweisungen, die nicht gezeichnet werden (Sequenzen, Sichten, Funktionen…), falls vorhanden diagram.json Zonen und Notizen des Diagramms, falls vorhanden
Import aus einer Datenbank
Wenn Sie das Erstellungsskript nicht haben, liest Datei > Aus Datenbank importieren… das Schema direkt aus einer
PostgreSQL-Datenbank (Version 10 oder höher); zu MySQL, MariaDB und SQL Server siehe die jeweiligen Abschnitte. Geben Sie Host, Port, Datenbank, Benutzer und Kennwort ein und aktivieren Sie SSL verwenden, wenn der Server
es verlangt. Verbindung testen prüft die Angaben und listet die Schemas auf, damit Sie auswählen können, welche gelesen werden; wählen Sie keines aus, werden alle
Benutzerschemas gelesen (niemals pg_catalog oder information_schema).
Das Ergebnis ist dasselbe Modell, das Sie beim Import des Erstellungsskripts dieser Datenbank erhalten würden: Tabellen, Spalten, Primärschlüssel, FKs
(mit ihren Aktionen), UNIQUE, CHECK, Indizes und Kommentare. Spalten mit eigener Sequenz werden zu
SERIAL/BIGSERIAL, IDENTITY-Spalten werden zu Identity-Spalten mit ihren Sequenzoptionen. Was nicht gezeichnet wird (Schemas, Erweiterungen, ENUM-Typen,
Domänen, Sequenzen, Funktionen, Sichten, Trigger, Indizes auf Ausdrücke oder partielle Indizes sowie EXCLUDE-Einschränkungen), bleibt
in Projekt > Zusätzliche SQL-Anweisungen… erhalten. Zusammengesetzte Typen und Bereichstypen, Regeln, Richtlinien, Berechtigungen und Kommentare zu anderen
Objekten werden nicht gelesen.
Die Verbindung ist schreibgeschützt und fragt nur den Katalog ab. Schevo merkt sich Host, Port, Datenbank und Benutzer, aber
speichert niemals das Kennwort. PostgreSQL schreibt DEFAULT- und CHECK-Ausdrücke auf seine eigene Art um (zum Beispiel wird BETWEEN
zu >= … AND <= … und IN (…) zu = ANY (ARRAY[…])); Schevo macht die häufigsten
Änderungen im Text rückgängig und behandelt beim Vergleichen und beim Generieren von Migrationen gleichwertige Ausdrücke als gleich, sodass die
Datenbank und das aus ihrem Skript importierte Modell keine Unterschiede zeigen.
Die Datenbank kann auch die andere Version beim Vergleichen und der Ausgangspunkt eines Migrationsskripts sein: Wählen Sie Datenbank und klicken Sie auf Verbinden….
MySQL und MariaDB
Neben PostgreSQL modelliert Schevo Datenbanken unter MySQL 8.0 oder höher und MariaDB 10.6 oder höher. Jedes Modell hat eine Engine, die in der Statusleiste angezeigt wird (ein Klick darauf öffnet die Projekteigenschaften):
- Datei > Neues Modell… fragt nach der Engine des Modells; die zuletzt verwendete ist vorausgewählt.
- Datei > SQL importieren… ermittelt die Engine aus dem Skript selbst (Backticks,
ENGINE=,AUTO_INCREMENT,DELIMITER…). Ist sie nicht eindeutig, wird nachgefragt. Importiert werden handgeschriebene Skripte, reine Schema-Dumps (mysqldump --no-dataodermariadb-dump --no-data, mit ihren/*!…*/-Kommentaren,SET,USEund Platzhalter-Sichten) sowie Exporte, die die Schlüssel nach den Tabellen mitALTER TABLEerstellen. Daten (INSERT…) werden mit einer einzigen Warnung ignoriert. - In Projekt > Projekteigenschaften… lässt sich die Engine frei ändern, solange das Modell keine Tabellen hat; mit Tabellen nur zwischen
MySQL und MariaDB. Das Standardschema heißt hier Datenbank: leer bedeutet „die aktuelle Datenbank“, sodass Tabellen
ohne Schema gespeichert werden (
tables/customer.json) und das generierte SQL in jeder Datenbank funktioniert.
Das Modell behält die MySQL-Besonderheiten bei: UNSIGNED und ZEROFILL im Typ (BIGINT
UNSIGNED), ENUM/SET mit ihren Werten, Zeichensätze und Sortierungen von Tabellen und Spalten,
ON UPDATE CURRENT_TIMESTAMP, generierte Spalten (STORED oder VIRTUAL), Inline-Kommentare, Tabellenoptionen
(ENGINE, ROW_FORMAT, AUTO_INCREMENT=, Partitionen) sowie FULLTEXT-,
SPATIAL-, Präfix- (name(10)) oder USING-Indizes. AUTO_INCREMENT ist eine Identity-Spalte
BY DEFAULT. Typen werden beim Import normalisiert (INTEGER → INT, TINYINT(1) →
BOOLEAN, ohne die veraltete Anzeigebreite von Ganzzahlen), und der PK erhält seinen Namen immer aus der Benennungskonvention des
Projekts, weil MySQL ihn nicht speichert. Eine Indexdefinition akzeptiert spalte(10) DESC.
MySQL-Attribute bearbeiten: In einem MySQL- oder MariaDB-Modell hat der Tabelleneditor (Doppelklick auf eine Tabelle oder eine Spalte) eine
Registerkarte Tabellenoptionen mit der Engine, dem Zeilenformat, dem Standardzeichensatz und der Standardsortierung, dem Anfangswert für
AUTO_INCREMENT, weiteren Optionen und der Partitionierung (PARTITION BY …). Unter jeder Spalte bearbeiten Sie ihren
Zeichensatz, ihre Sortierung, ON UPDATE und unter Generiert den Ausdruck einer generierten Spalte mit
VIRTUAL oder STORED; bei Indizes den Typ FULLTEXT/SPATIAL und die Methode
(USING BTREE oder HASH). Die Auswahllisten schlagen gängige Werte vor und akzeptieren jeden anderen. Ein leeres Feld bedeutet
„was der Server vorgibt“ und wird nicht gespeichert; ebenso wenig InnoDB, die Standard-Engine. Werte werden wie beim Import geschrieben (Zeichensatz
und Sortierung in Kleinbuchstaben, now() als CURRENT_TIMESTAMP). Der PK-Name lässt sich nicht bearbeiten, weil
MySQL ihn nicht speichert. In einem PostgreSQL-Modell zeigt der Editor nichts davon an.
Das generierte SQL hat ein festes Format wie SHOW CREATE TABLE: Schlüssel und CHECKs innerhalb jeder Tabelle, Optionen in der
schließenden Zeile und die FKs am Ende. Routinen und Trigger (Anweisungen mit ; darin) werden zwischen
DELIMITER $$ und DELIMITER ; geschrieben, auch in extra.sql und im Editor für zusätzliche Anweisungen: Das
Skript ist für den Befehlszeilenclient gedacht (mysql datenbank < skript.sql), weil DELIMITER keine
Serveranweisung ist.
Die Validierung ergänzt die MySQL/MariaDB-Regeln: Was der Server ablehnt (nur eine AUTO_INCREMENT-Spalte, und zwar in einem Schlüssel; FKs zwischen
Ganzzahlen unterschiedlicher Größe oder mit unterschiedlichem Vorzeichen; Texte mit unterschiedlichen Sortierungen in einem FK; SET DEFAULT; TEXT oder JSON in einem Schlüssel
ohne Präfix…), ist ein Fehler, und was Probleme verursachen kann (Tabellen, die sich nur in der Groß-/Kleinschreibung unterscheiden, Sortierungen der anderen
Variante, DESC in MariaDB vor 10.8…), ist eine Warnung.
Import aus einer MySQL- oder MariaDB-Datenbank: Wählen Sie in Datei > Aus Datenbank importieren… die Engine (der Port
wechselt auf 3306 und SSL verwenden wird aktiviert); die Datenbank ist optional, und die Liste heißt Datenbanken. Das Modell ist
dasselbe, das ihr Skript ergeben würde: Die Tabellen der Datenbank der Verbindung haben kein Schema, InnoDB und die Sortierung der Datenbank werden nicht
gespeichert, der AUTO_INCREMENT-Zähler wird nicht gelesen, und Sichten, Routinen, Trigger und Ereignisse werden ohne
DEFINER beibehalten. Wenn MySQL 8 das Kennwort ohne SSL ablehnt, aktivieren Sie SSL: Schevo lädt den öffentlichen Schlüssel des Servers nicht herunter.
Der Treiber ist eine separate Datei, lib/mariadb-java-client.jar (LGPL), die mit beiden Engines verbindet; fehlt sie,
meldet Schevo das. Wie bei PostgreSQL schreibt der Server Ausdrücke um (Backticks, Klammern, curdate()…): Vergleiche
und Migrationen vergleichen sie in kanonischer Form.
Migrationsskript: MySQL und MariaDB haben kein transaktionales DDL, daher hat das Skript kein BEGIN/COMMIT
(die Kopfzeile erinnert daran: Erstellen Sie eine Sicherung und testen Sie es zuerst mit einer anderen Datenbank). Spaltenänderungen verwenden MODIFY COLUMN mit der
vollständigen Definition; FKs werden gelöscht, bevor sich ihre Spalten oder der zugrunde liegende Index ändern, und am Ende wieder hinzugefügt; der PK
ändert sich in einer einzigen Anweisung. Umbenennungen verwenden RENAME COLUMN und RENAME TABLE; FKs, deren Name sich ändert, werden
gelöscht und erneut hinzugefügt (MySQL hat kein RENAME CONSTRAINT). Sie können zwischen MySQL und MariaDB migrieren, aber nicht von oder nach
PostgreSQL; ein Vergleich zwischen Engines ist möglich. Beim Vergleich eines MySQL-Modells mit dem mitgelieferten Beispiel wird die frühere Version
des MySQL-Shops verwendet.
Die Beispiele des MySQL-Shops befinden sich im Ordner examples/mysql des Quellcodes. MySQL und MariaDB sind
eingetragene Marken ihrer jeweiligen Inhaber.
SQL Server
Schevo modelliert auch Datenbanken unter SQL Server 2017 oder höher und Azure SQL Database. Wie in PostgreSQL haben Tabellen immer
ein Schema (standardmäßig dbo, tables/dbo.customer.json). Es wird wie die anderen Engines beim
Erstellen eines Modells oder in Projekt > Projekteigenschaften… gewählt, und Datei > SQL importieren… erkennt es selbstständig
(GO-Zeilen, eckige Klammern, IDENTITY(1, 1), NVARCHAR…). In der Befehlszeile:
import --dialect sqlserver (oder mssql).
- Importiert werden handgeschriebene Skripte (ohne
GOoder;: Jede Anweisung endet dort, wo die nächste beginnt, mitIF OBJECT_ID(…) IS NOT NULL DROP TABLE, doppelten Anführungszeichen oder eckigen Klammern) sowie die von den Verwaltungswerkzeugen der Engine generierten Skripte (WITH CHECK ADD CONSTRAINT,ADD CONSTRAINT … DEFAULT ((0)) FOR, Standard-Indexoptionen,ON [PRIMARY]), Letztere ohne jede Warnung. Daten werden mit einer einzigen Warnung ignoriert; Sichten, Prozeduren, Funktionen und Trigger werden unverändert beibehalten. - Besonderheiten von SQL Server:
IDENTITY(startwert, inkrement)(eine Identity ALWAYS; die Schnellbearbeitung mitidentityerstellt sie so),(MAX)im Typ (NVARCHAR(MAX);notes nvarchar(max)in der Schnellbearbeitung und LängeMAXim Editor), berechnete SpaltenAS (ausdruck) [PERSISTED], die keinen eigenen Typ haben und im Diagramm als= ausdruckerscheinen,COLLATEpro Spalte,ROWVERSION(TIMESTAMPist sein altes Synonym, kein Datum), gruppierte und nicht gruppierte Indizes (PKNONCLUSTERED,CREATE CLUSTERED INDEX),INCLUDEund gefilterte Indizes (WHERE … IS NOT NULL). Kommentare sind die erweiterten EigenschaftenMS_Description. Der Tabelleneditor behält all das beim Übernehmen bei. - Jede Einschränkung hat einen Namen, auch DEFAULTs. Gibt das Skript keinen an, verwendet Schevo einen festen (
<tabelle>_pk, die FK-Konvention,<tabelle>_<spalte>_uk,<tabelle>_<spalte>_ck,<tabelle>_<spalte>_df) statt des zufälligen, den die Engine erfinden würde, und das generierte SQL schreibt ihn immer. Von der Engine erfundene Namen (PK__customer__3B75D760) werden beibehalten und erzeugen eine Warnung mit dem Vorschlag, sie umzubenennen.
Das generierte SQL beginnt mit SET ANSI_NULLS ON und SET QUOTED_IDENTIFIER ON, schreibt jede Tabelle mit
ihren Indizes und Kommentaren in einen Batch, der mit GO endet, die FKs am Ende, NULL oder NOT NULL bei
jeder Spalte und mit dem Schema qualifizierte Namen (eckige Klammern nur bei Bedarf). GO ist kein T-SQL, sondern ein Clientbefehl:
Das Skript ist für den Befehlszeilenclient der Engine (mit -b, das beim ersten Fehler anhält) oder den Abfrage-Editor eines beliebigen Tools gedacht.
extra.sql und der Editor für zusätzliche Anweisungen setzen ebenfalls nach jeder Anweisung ein GO.
Die Validierung ergänzt die SQL-Server-Regeln: ein gruppierter Index pro Tabelle, Typen, die nicht indiziert werden können, FKs mit genau gleichen
Spalten (Typ, Länge und Sortierung) sowie Kaskadenpfade: Die Engine lehnt einen FK ab, der zwei Pfade mit
ON DELETE CASCADE/SET NULL zu einer Tabelle oder einen Zyklus ergibt, daher ist das ein Fehler (setzen Sie bei einem
davon NO ACTION). Ein UNIQUE auf einer Spalte, die NULL erlaubt, ist eine Warnung, weil SQL Server nur ein NULL zulässt: Verwenden Sie einen gefilterten eindeutigen Index.
Tabelleneditor: In einem SQL-Server-Modell zeigt er zusätzlich das Kästchen NONCLUSTERED des PK; pro Spalte die Sortierung, den
DEFAULT-Namen (leer = der implizite <tabelle>_<spalte>_df) und die berechnete Spalte (Ausdruck und
PERSISTED; sie hat keinen Typ); pro Index CLUSTERED, INCLUDE und den Filter WHERE; sowie
die Registerkarte Tabellenoptionen mit der Speicherung (ON dateigruppe) und WITH (…).
Migrationsskript: Das DDL von SQL Server ist transaktional, und das gesamte Skript läuft in einer Transaktion mit
SET XACT_ABORT ON; jede Anweisung steht in einem eigenen Batch, dem IF @@TRANCOUNT = 0 SET NOEXEC ON vorangeht, sodass
bei einem Fehler alles zurückgesetzt und der Rest (auch das COMMIT) nicht mehr ausgeführt wird. Vor einem
ALTER COLUMN werden die Indizes, Schlüssel, CHECKs, DEFAULTs, FKs und berechneten Spalten, die die Spalte verwenden, gelöscht und anschließend
neu erstellt (bei großen Tabellen kann das eine Weile dauern; das Verbreitern eines VARCHAR/NVARCHAR, das nicht im PK ist,
berührt die Indizes nicht). Für das Hinzufügen oder Entfernen von IDENTITY oder das Umwandeln einer Spalte in eine berechnete gibt es kein
ALTER: Das Skript kennzeichnet es mit dem Kommentar „NICHT MIGRIERT“, und die Tabelle muss manuell neu aufgebaut werden. Übernommene Umbenennungen verwenden
sp_rename (auch für PK, FKs und DEFAULTs, deren Name sich mit der Tabelle oder Spalte ändert). Neue Spalten werden am Ende
der Tabelle angefügt. Einschränkungen mit von der Engine generierten Namen werden beim Vergleichen und Migrieren nach ihrem Inhalt zugeordnet.
Laufende Datenbank: Datei > Aus Datenbank importieren… mit der Engine SQL Server (Port 1433) liest den Katalog
(sys.*) mit einem SQL-Server-Benutzer und -Kennwort (die Windows-Authentifizierung wird nicht verwendet). Der Server kann als
server\instanz angegeben werden (dann wird der Port nicht verwendet). Das Kästchen Verbindung verschlüsseln (standardmäßig aktiviert) verschlüsselt und
vertraut dem Serverzertifikat, wie bei Entwicklungsservern; ohne es wird die Verbindung nicht verschlüsselt. Der Benutzer benötigt die
Berechtigung VIEW DEFINITION: Ohne sie blendet SQL Server einen Teil des Schemas ohne Fehlermeldung aus (Schevo warnt).
Systemversionierte, speicheroptimierte und Graphtabellen werden nicht gelesen. In der Befehlszeile enthält die URL ; und muss
in Anführungszeichen stehen:
schevo-cli import --db "jdbc:sqlserver://server:1433;databaseName=shop;encrypt=true;trustServerCertificate=true" model --user u,
mit dem Kennwort in SQLCMDPASSWORD. Vergleichen und Migrieren akzeptieren die Datenbank und das mitgelieferte Beispiel für SQL Server.
Die Beispiele des SQL-Server-Shops befinden sich im Ordner examples/sqlserver des Quellcodes. SQL Server ist eine
eingetragene Marke ihres Inhabers.
Das Fenster
- Tabellenliste (links): Tippen Sie, um zu filtern; ein Klick bringt Sie zur Tabelle, ein Doppelklick bearbeitet sie.
- Diagramm (Mitte): Tabellen mit ihrem PK oben, Beziehungen als Linien (durchgezogen, wenn der FK zum PK der untergeordneten Tabelle gehört, sonst gestrichelt) und der Krähenfuß auf der Seite der untergeordneten Tabelle.
- Validierungsbereich (unten): Fehler und Warnungen des Modells, die beim Bearbeiten aktualisiert werden. Ein Klick bringt Sie zur Tabelle, ein Doppelklick öffnet sie. Er lässt sich minimieren, maximieren oder schließen (Ansicht > Validierungsbereich, Ctrl+Umschalt+V).
- Statusleiste: das Ergebnis der letzten Aktion, die Anzahl der Validierungsmeldungen, die Engine des Modells und während der Testphase die verbleibenden Tage.
Suchen (Ctrl+F) durchsucht Tabellen, Spalten, Beziehungen, Indizes und Kommentare im gesamten Modell. Alle Tastenkombinationen finden Sie unter Hilfe > Tastenkombinationen (Ctrl+F1).
Tabellen und Spalten
Bearbeiten > Neue Tabelle… (Ctrl+T) oder ein Doppelklick auf eine Tabelle öffnet den Editor: Schema, Name, Farbe, Kommentar,
Spalten (Typ, Länge, Nachkommastellen, NOT NULL, Standardwert, Kommentar und ob sie zum PK gehört), Indizes sowie UNIQUE- und CHECK-Einschränkungen.
Identity lässt die Datenbank die Spalte füllen: ALWAYS (immer) oder BY DEFAULT (nur wenn das
INSERT keinen Wert angibt); sie wird als GENERATED … AS IDENTITY generiert, die Spalte wird NOT NULL und muss
einen Ganzzahltyp und keinen Standardwert haben. Der Import von SQL oder einer Datenbank behält ihre Optionen bei (START WITH,
INCREMENT BY…). Neben der Farbe sehen Sie die Farben, die bereits von anderen Tabellen und Zonen verwendet werden, um sie mit einem Klick wiederzuverwenden (auch in
Bearbeiten > Farbe ändern…, Ctrl+K).
Im Diagramm wird jeder Spaltenname halbfett und sein Typ grau angezeigt. Ein Klick auf eine Spalte markiert sie; ist die Spalte an
Beziehungen beteiligt (sie ist ein FK, oder andere Tabellen verweisen auf sie), heben sich diese Beziehungen von den übrigen Beziehungen der Tabelle ab, und die
entsprechende Spalte in der anderen Tabelle wird markiert. Ein Doppelklick öffnet den Editor mit dieser Spalte ausgewählt.
Typen mit einer sehr langen Werteliste (ENUM und SET in MySQL/MariaDB) werden im Diagramm abgekürzt, z. B.
enum('pending','paid','picking',…); wenn Sie mit der Maus über die Zeile fahren, wird der vollständige Typ angezeigt, der auch im Editor steht.
- Wenn Sie den Typ einer Spalte ändern, auf die FKs verweisen (zum Beispiel den PK), wird die Änderung in die Spalten der untergeordneten Tabellen und von dort in die nächste Ebene kopiert, sodass beide Seiten jedes FK denselben Typ behalten.
- Das Umbenennen einer Tabelle aktualisiert die FKs, die auf sie verweisen, sowie die PK- und FK-Namen, die der Konvention folgten.
- Ctrl+C, Ctrl+V und Ctrl+D kopieren, fügen ein und duplizieren Tabellen (auch zwischen zwei Schevo-Fenstern).
Kopien erhalten das Suffix
_copia. - Entf löscht die Auswahl und fragt, ob auch die FK-Spalten gelöscht werden sollen, die ohne Beziehung zurückbleiben würden.
- Alles lässt sich mit Ctrl+Z rückgängig machen und mit Ctrl+Y wiederholen.
Beziehungen
Bearbeiten > Neue Beziehung… (Ctrl+R): Wählen Sie die übergeordnete Tabelle (die referenzierte) und die untergeordnete (die mit
dem FK). Die Spalten der untergeordneten Tabelle werden aus dem PK der übergeordneten vorgeschlagen; geben Sie einen neuen Namen ein, um sie zu erstellen. Sie können ON DELETE,
ON UPDATE festlegen, ob sie identifizierend ist (die Spalten werden Teil des PK der untergeordneten Tabelle) und ob sie NULL erlaubt.
- Wenn Sie eine Beziehung auswählen, werden ihre Spalten in beiden Tabellen hervorgehoben und Ziehpunkte angezeigt: Die Enden lassen sich an jede Seite der Tabelle verschieben, und das mittlere Quadrat verschiebt das mittlere Segment. Rechtsklick > Automatische Linienführung wiederherstellen hebt die manuelle Linienführung auf.
- Mit einem Rechtsklick auf eine Tabelle oder eine Beziehung springen Sie zur übergeordneten oder untergeordneten Tabelle.
Schnellbearbeitung
Mit der Maus über dem Diagramm:
| Taste oder Geste | Wirkung |
|---|---|
| T | Erstellt eine Tabelle an der Mausposition; geben Sie ihren Namen ein und drücken Sie die Eingabetaste. |
| C | Fügt der ausgewählten Tabelle Spalten hinzu, eine pro Zeile: name [typ] [not null] [pk] [identity [always]], zum
Beispiel amount numeric(10,2) not null oder id bigint identity pk. Die Eingabetaste fügt hinzu, Esc beendet. |
| N | Erstellt eine Notiz an der Mausposition. |
| Doppelklick auf den Titel | Benennt die Tabelle direkt um. |
| Alt + Ziehen | Von der untergeordneten zur übergeordneten Tabelle: Öffnet den Beziehungseditor mit beiden bereits ausgewählt. |
Diagramm, Zonen und Notizen
- Ziehen auf freier Fläche verschiebt das Diagramm; Umschalt + Ziehen wählt mehrere Tabellen aus; Ctrl + Mausrad zoomt um den Cursor (von 10 % bis 400 %); Ctrl+9 passt es an das Fenster an.
- Wenn Sie eine Tabelle auswählen, werden ihre Beziehungen und Nachbarn hervorgehoben und der Rest abgeblendet (Ansicht > Beziehungen und Nachbarn der Auswahl hervorheben).
- Übersichtskarte (Ctrl+M), um sich in großen Diagrammen zu bewegen, und Kompaktmodus (Ctrl+Umschalt+K), der nur die PK- und FK-Spalten zeigt.
- Zonen: farbige Rechtecke mit Titel, die Tabellen gruppieren (Diagramm > Neue Zone oder Rechtsklick). Das Ziehen am Titel verschiebt die Zone mit ihren Tabellen, die Ecke ändert ihre Größe, und ein Doppelklick auf den Titel benennt sie um. Ihr Name erscheint auch auf der Übersichtskarte.
- Notizen: freier Text im Diagramm. Doppelklick zum Bearbeiten und Ctrl+Eingabe zum Abschließen.
- Diagramm > Links ausrichten und Oben ausrichten richten die ausgewählten Tabellen aus.
- Diagramm > Automatisch anordnen… ordnet alle Tabellen nach Präfix neu an, mit den übergeordneten links.
Validierung und Benennungsregeln
Das Modell wird fortlaufend validiert. Zu den Fehlern gehören FKs, die auf nicht vorhandene Tabellen oder Spalten verweisen, PK-Spalten, die
NULL erlauben, doppelte Namen, SET NULL auf NOT-NULL-Spalten und Standardwerte, die nicht zum Typ passen.
Zu den Warnungen gehören unterschiedliche Typen auf beiden Seiten eines FK, ON DELETE CASCADE-Zyklen, reservierte Wörter und Verstöße gegen
Benennungsregeln. Sie können mit Fehlern speichern, aber Schevo weist Sie vorher darauf hin.
Projekt > Benennungsregeln… legt die Konventionen für PKs, FKs, UNIQUE-Einschränkungen und Indizes mit den Platzhaltern
{table}, {parent}, {child}, {column} und {columns} fest (standardmäßig
{table}_pk und {parent}_{child}_fk), sowie einen regulären Ausdruck für Spalten, die in allen Tabellen denselben Typ haben
müssen (standardmäßig .*_id). Lassen Sie ein Feld leer, um diese Regel zu überspringen.
Arbeiten mit Git
- Übertragen Sie den ersten Commit (Import und Speichern) separat: Das SQL wird alphabetisch sortiert, und die Änderung ist groß, obwohl das Schema dasselbe ist. Spätere Commits zeigen nur echte Änderungen.
- Committen Sie den Modellordner und das SQL zusammen.
- Da jede Tabelle in einer eigenen Datei liegt und die Ausgabe immer gleich ist, geraten zwei Personen, die verschiedene Tabellen ändern, nie in Konflikt,
und das Verschieben einer Tabelle ändert nur ihre Zeilen
x/y. - Wenn ein Merge Konflikte hat, lösen Sie sie in den JSON-Dateien. Beim Öffnen des Modells zeigt Schevo Datei und Zeile verbliebener
<<<<<<<-Markierungen an. Lösen Sie SQL-Konflikte nicht manuell: Speichern Sie das Modell (oder führen Sieschevo-cli generateaus), und es wird neu generiert.
Änderungen von außen (git pull)
Schevo überwacht den Ordner des geöffneten Modells. Ändert er sich außerhalb der Anwendung (ein git pull, ein Branchwechsel,
ein anderer Editor):
- Ohne nicht gespeicherte Änderungen wird das Modell von selbst neu geladen, wobei Zoom, Position und Auswahl erhalten bleiben;
- mit nicht gespeicherten Änderungen erscheint über dem Diagramm ein Hinweis mit Neu laden, das Ihre Änderungen verwirft und die Dateien vom Datenträger lädt;
- haben die Dateien nicht aufgelöste Konflikte, gibt der Hinweis an, wie viele Probleme es gibt (Details anzeigen nennt Datei und Zeile), und das geöffnete Modell bleibt unverändert; sobald sie gelöst sind, wird es von selbst neu geladen;
- ändert sich nur die SQL-Datei, bietet der Hinweis Unterschiede anzeigen an.
Datei > Vom Datenträger neu laden (F5) liest das Modell jederzeit erneut ein.
Generiertes SQL
Beim Speichern wird das verknüpfte SQL neu generiert (Sie können es in Projekt > Projekteigenschaften… ändern, zusammen mit dem Standardschema und dem Zeilenende). Datei > SQL generieren… (Ctrl+G) zeigt zunächst eine Vorschau des Skripts mit den Unterschieden zur aktuellen Datei: hinzugefügte Zeilen in Grün und entfernte in Rot, mit einer Zählung und der Option Nur Änderungen. Von dort schreibt Speichern es in die verknüpfte Datei, ohne das Modell zu speichern (und fragt nach dem Speicherort, wenn es keine gibt), Speichern unter… schreibt es in eine andere Datei, und Kopieren legt es in die Zwischenablage. SQL exportieren als… schreibt es direkt in eine andere Datei.
Das Format ist fest: Tabellen in alphabetischer Reihenfolge mit ihren PK-, UNIQUE- und CHECK-Einschränkungen, dann ihre Indizes und alle FKs am
Ende als ALTER TABLE. Anweisungen, die Schevo nicht zeichnet (Sequenzen, Typen, Domänen, Erweiterungen, Sichten, Funktionen,
Trigger…), werden unverändert beibehalten und in Projekt > Zusätzliche SQL-Anweisungen… bearbeitet.
Migrationsskripte
Datei > Migrationsskript (ALTER)… (Ctrl+Umschalt+M) generiert die Anweisungen, die eine vorhandene Datenbank
von einer früheren Version des Modells auf die aktuelle bringen. Die Ausgangsversion kann eine Git-Revision (HEAD,
origin/develop, ein Tag…), die zuletzt gespeicherte Version, ein anderes Modell oder SQL-Skript oder das aktuelle Schema einer
Datenbank (Datenbank > Verbinden…) sein; Letzteres ergibt genau das, was noch auf sie angewendet werden muss.
Umbenennungen. Der Vergleich zweier Versionen kann nicht erkennen, ob eine Spalte umbenannt oder gelöscht und eine andere hinzugefügt wurde, und Löschen
und Hinzufügen verliert ihre Daten. Daher sucht Schevo nach möglichen Umbenennungen und listet sie über dem Skript auf: eine gelöschte und eine
hinzugefügte Tabelle mit denselben Spalten oder eine gelöschte und eine hinzugefügte Spalte desselben Typs. Eindeutige Übereinstimmungen sind markiert, zweifelhafte
nicht. Markierte Umbenennungen werden als RENAME geschrieben (einschließlich der PKs und FKs, deren Namen sich mit der Tabelle ändern), und die
Daten bleiben erhalten; nicht markierte bleiben Löschen und Hinzufügen und werden in einem Kommentar am Ende des Skripts aufgeführt.
Prüfen Sie das Skript immer vor der Ausführung: Eine Umbenennung, die Sie nicht markieren, geht verloren (Löschen und Hinzufügen), und Typänderungen können fehlschlagen, wenn sich die vorhandenen Daten nicht konvertieren lassen.
Versionen vergleichen
Datei > Mit anderer Version vergleichen… (Ctrl+Umschalt+C) markiert im Diagramm neue Tabellen (grün), geänderte Tabellen (gelb, mit
hervorgehobenen geänderten Spalten) und entfernte Tabellen (rot gestrichelt). Liste der Änderungen zeigt jeden Unterschied im Detail und
bringt Sie zur Tabelle. Positionen und Farben zählen nicht als Änderungen, ebenso wenig DEFAULT- und CHECK-Ausdrücke, die auf eine andere
gleichwertige Weise geschrieben sind (z. B. x BETWEEN 0 AND 4 und (x >= 0) AND (x <= 4)); sie erzeugen auch in
Migrationsskripten keine Anweisungen. Sie können mit einer Git-Revision, der zuletzt gespeicherten Version,
einem anderen Modell oder SQL-Skript oder einer laufenden Datenbank (Datenbank > Verbinden…) vergleichen, zum Beispiel um zu sehen, was
der Produktionsdatenbank fehlt. Ein mitgeliefertes Beispiel lässt Sie es ausprobieren.
Export und Datenwörterbuch
- Datei > PNG-Bild / SVG / PDF exportieren: das gesamte Diagramm, immer im hellen Design.
- Datei > Datenwörterbuch exportieren (HTML): eine einzige Datei mit dem Diagramm, einem durchsuchbaren Verzeichnis und für jede Tabelle ihren Spalten, Schlüsseln, Indizes, Einschränkungen, Kommentaren und verknüpften Beziehungen.
Befehlszeile und CI
schevo-cli wird zusammen mit der Anwendung installiert:
| Befehl | Wirkung |
|---|---|
import <skript.sql> <ordner> | Erstellt ein Modell aus einem SQL-Skript. |
import --db <jdbc-url> <ordner> [--user u] [--db-schema a,b] | Erstellt ein Modell aus einer
Datenbank, z. B. jdbc:postgresql://host:5432/shop (mit ?sslmode=require für SSL),
jdbc:mysql://host:3306/shop?sslMode=trust, jdbc:mariadb://host:3306/shop oder "jdbc:sqlserver://host:1433;databaseName=shop;encrypt=true;trustServerCertificate=true" (in Anführungszeichen). Das Kennwort wird aus der
Variablen PGPASSWORD (PostgreSQL), MYSQL_PWD (MySQL und MariaDB) oder SQLCMDPASSWORD (SQL Server)
gelesen oder in der Konsole abgefragt; es wird niemals
als Argument übergeben. |
generate <ordner> [-o datei.sql] | Generiert das SQL (standardmäßig das mit dem Modell verknüpfte). |
validate <ordner> | Validiert. Gibt 1 zurück, wenn es Fehler gibt, und 2, wenn das Modell nicht gelesen werden kann. |
check <ordner> [skript.sql] | Validiert und prüft, ob das SQL mit dem Modell synchron ist. |
migrate <ordner> --git <revision> | --from <ordner|sql> | --from-db <jdbc-url> [-o datei] | Migrationsskript. --rename schema.tabelle=neu oder --rename schema.tabelle.spalte=neu (wiederholbar)
wendet Umbenennungen an (in MySQL und MariaDB tabelle=neu und tabelle.spalte=neu); --detect-renames
wendet die eindeutig erkannten an. Zwischen verschiedenen Engines gibt es 2 zurück. |
doc <ordner> [-o datei.html] | HTML-Datenwörterbuch. |
license [--activate <schlüssel|datei>] | Zeigt die Lizenz an oder installiert sie. |
validate und check benötigen keine Lizenz, sodass Sie sie auf jedem Rechner für kontinuierliche Integration verwenden können.
Pre-Commit-Hook, damit das Modell nie ohne sein SQL übertragen wird:
#!/bin/sh
schevo-cli check db-model || { echo "Ausführen: schevo-cli generate db-model"; exit 1; }
Lizenz
Schevo enthält eine 30-tägige Testphase mit allen Funktionen. Danach läuft es ohne Lizenz im schreibgeschützten Modus: Sie können Ihre Modelle öffnen, durchsuchen, darin suchen, vergleichen und als Bilder exportieren, aber nicht bearbeiten oder speichern und weder SQL noch Migrationen oder das Datenwörterbuch generieren. Ihre Dateien werden niemals unzugänglich.
Geben Sie Ihren Schlüssel unter Hilfe > Lizenz… oder mit schevo-cli license --activate <schlüssel> ein. Der Schlüssel wird
ohne Internetverbindung geprüft. Eine Dauerlizenz funktioniert unbegrenzt mit den Versionen, die während ihres Update-Zeitraums veröffentlicht wurden; ein
Abonnement funktioniert bis zu seinem Ablaufdatum.
Das Ablaufdatum eines Abonnements enthält bereits eine Kulanzfrist von 14 Tagen nach dem bezahlten Zeitraum. In diesen letzten 14 Tagen können Sie wie gewohnt weiterarbeiten, aber die Statusleiste zeigt die verbleibenden Tage an, und beim Start (höchstens einmal am Tag) erinnert Sie ein Fenster daran, das Abonnement zu verlängern, bevor Schevo in den schreibgeschützten Modus wechselt. Dort öffnet Neuen Schlüssel eingeben… das Fenster Hilfe > Lizenz…, um den verlängerten Schlüssel zu aktivieren.
Updates
Hilfe > Nach Updates suchen… fragt die Schevo-Website nach der neuesten Version und teilt Ihnen mit, ob Sie auf dem neuesten Stand sind. Gibt es eine neue, werden ihr Veröffentlichungsdatum und die Neuerungen angezeigt, und Herunterladen öffnet die Downloadseite in Ihrem Browser. Schevo installiert nie etwas selbstständig.
Standardmäßig sucht Schevo auch beim Start, höchstens einmal täglich und im Hintergrund. Gibt es eine neue Version, erscheint ein Hinweis über dem Diagramm; schlägt die Suche fehl (zum Beispiel ohne Internet), wird nichts angezeigt. Zum Deaktivieren entfernen Sie das Häkchen bei Hilfe > Automatisch nach Updates suchen.
Wenn Sie eine bestimmte Version nicht installieren möchten, klicken Sie im Hinweis auf Diese Version überspringen: Sie werden beim Start nicht mehr darauf hingewiesen, wohl aber auf die nächste. Hilfe > Nach Updates suchen… zeigt sie weiterhin an (mit dem Hinweis, dass Sie sie übersprungen haben), falls Sie es sich anders überlegen und sie herunterladen möchten.
Die Suche lädt nur eine kleine öffentliche Datei von der Website herunter: Sie sendet weder Ihre Version noch Daten über Sie oder Ihre Modelle. Der Versionsvergleich findet auf Ihrem Computer statt.
Sprache, Design und Einstellungen
- Ansicht > Sprache: Spanisch, Englisch, Deutsch oder Französisch (wird beim nächsten Start übernommen). Standardmäßig wird die Systemsprache verwendet.
- Ansicht > Dunkler Modus (Ctrl+Umschalt+D).
- Schevo merkt sich das letzte Modell, den letzten Ordner, das Design, den Kompaktmodus, die Übersichtskarte und die Größe des Validierungsbereichs.
Wiederherstellung und Fehlerbehebung
- Solange es nicht gespeicherte Änderungen gibt, wird alle 2 Minuten eine Wiederherstellungskopie erstellt. Wird Schevo unerwartet beendet, bietet es beim nächsten Öffnen an, sie wiederherzustellen.
- Tritt ein unerwarteter Fehler auf, kopiert die Schaltfläche Bericht kopieren die technischen Details, damit Sie sie an den Support senden können.
- Das Anwendungsprotokoll befindet sich unter Windows in
%LOCALAPPDATA%\Schevo\logsund unter Linux in~/.schevo/logs(Hilfe > Über Schevo > Protokollordner öffnen).