Benutzerhandbuch

Dasselbe Handbuch, das sich in Schevo mit F1 öffnet: Datenmodellierung, Versionskontrolle mit Git, Migrationen und Befehlszeile.

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

  1. 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_…).
  2. 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.
  3. 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-data oder mariadb-dump --no-data, mit ihren /*!…*/-Kommentaren, SET, USE und Platzhalter-Sichten) sowie Exporte, die die Schlüssel nach den Tabellen mit ALTER TABLE erstellen. 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 GO oder ;: Jede Anweisung endet dort, wo die nächste beginnt, mit IF 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 mit identity erstellt sie so), (MAX) im Typ (NVARCHAR(MAX); notes nvarchar(max) in der Schnellbearbeitung und Länge MAX im Editor), berechnete Spalten AS (ausdruck) [PERSISTED], die keinen eigenen Typ haben und im Diagramm als = ausdruck erscheinen, COLLATE pro Spalte, ROWVERSION (TIMESTAMP ist sein altes Synonym, kein Datum), gruppierte und nicht gruppierte Indizes (PK NONCLUSTERED, CREATE CLUSTERED INDEX), INCLUDE und gefilterte Indizes (WHERE … IS NOT NULL). Kommentare sind die erweiterten Eigenschaften MS_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 GesteWirkung
TErstellt eine Tabelle an der Mausposition; geben Sie ihren Namen ein und drücken Sie die Eingabetaste.
CFü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.
NErstellt eine Notiz an der Mausposition.
Doppelklick auf den TitelBenennt die Tabelle direkt um.
Alt + ZiehenVon 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

  1. Ü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.
  2. Committen Sie den Modellordner und das SQL zusammen.
  3. 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.
  4. 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 Sie schevo-cli generate aus), 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:

BefehlWirkung
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\logs und unter Linux in ~/.schevo/logs (Hilfe > Über Schevo > Protokollordner öffnen).