Diese Seite beschreibt Calíope 1.5, die Version, die ich gerade baue. Die 1.4 ist im App Store für Mac, iPad, iPhone, Apple Watch, Apple TV und Apple Vision Pro. Das Changelog sagt, in welcher Version jede Funktion kam.
Fügt jedem Thema einen Button „In Calíope öffnen“ hinzu. Funktioniert nur mit installierter App.
Visualisiere die Beziehungen zwischen den Tabellen einer Datenbank.
Wo es zu finden ist: Workspace › Werkzeuge › ER
Öffne das ER-Diagramm in der Navigationsleiste des Workspace. Wähle die Datenbank in der oberen Auswahl aus, und Calíope lädt die Tabellen mit ihren Spalten und den vorhandenen Fremdschlüssel-Beziehungen.
Das Diagramm zeigt die Tabellen als Knoten mit Spalten und Datentyp. Die Linien zwischen den Tabellen stellen die auf dem Server erkannten FKs dar.
SQL Server
In SQL Server ist jedes Schema ein eigener Eintrag in der Auswahl (demo.dbo, demo.rrhh). Um einen Fremdschlüssel zu sehen, der von einem Schema ins andere geht, füge das andere mit + DB hinzu: Die Linie zwischen beiden wird bernsteinfarben gezeichnet, wie zwischen zwei Datenbanken.
Stichwörter: ER, entity relationship, diagramm, FK, foreign key, fremdschlüssel, beziehungen
Zoome heran, heraus und verschiebe die Ansicht des Diagramms.
Wo es zu finden ist: ER-Diagramm › Canvas
Vergrößern und verkleinern — unter macOS das Mausrad, eine Zwei-Finger-Pinch-Geste auf dem Trackpad oder die Schaltflächen der Leiste; auf dem iPad die Pinch-Geste oder dieselben Schaltflächen. Zwischen − und + steht der Prozentwert, der die aktuelle Skalierung angibt; die Tastenkürzel sind ⌘−, ⌘+ und ⌘0. Die Grenzen sind auf allen dreien gleich: 18 % bis 400 %, und die Schaltfläche wird am Anschlag deaktiviert.
Canvas verschieben — zieh über eine leere Fläche, auf allen dreien. Über einem Knoten verschiebt das Ziehen die Tabelle.
Zurück zum Gesamtbild — die Schaltfläche An Fenster anpassen (⌘0) rahmt alle Tabellen ein. Das Diagramm passt sich außerdem beim Öffnen und beim Ändern der Fenstergröße von selbst wieder ein.
Die Schaltfläche Automatisches Layout ordnet die Knoten neu an, um Überlappungen zu minimieren.
Zeichne eine neue Fremdschlüssel-Beziehung zwischen zwei Tabellen.
Wo es zu finden ist: ER-Diagramm › Rechtsklick › FK-Beziehung erstellen
Öffne das Kontextmenü einer Tabelle — Rechtsklick unter macOS, gedrückt halten auf dem iPad — und wähle Neue FK-Beziehung…. Es öffnet sich ein Dialog, um die Quelltabelle und -spalte sowie die Zieltabelle und -spalte auszuwählen. Bei der Bestätigung führt Calíope das ALTER TABLE … ADD FOREIGN KEY auf dem Server aus.
Nur unter macOS, zusätzlich: Halt ⌃ (Control) gedrückt und zieh von einer Tabelle zur Zieltabelle; während der Geste wird eine Gummibandlinie gezeichnet, und beim Loslassen öffnet sich derselbe Dialog. Auf dem iPad gibt es diese Geste nicht — der Fremdschlüssel wird über das Kontextmenü erstellt.
Stichwörter: FK, foreign key, fremdschlüssel, beziehung erstellen, ALTER TABLE
Behalte die Anordnung, die du dem Diagramm gegeben hast — eine pro Datenbank.
Wo es zu finden ist: ER-Diagramm › Layout speichern
Klick auf Layout speichern in der Symbolleiste des ER-Diagramms. Wohin du jede Tabelle gezogen hast, wird pro Datenbank gespeichert, sodass jedes Diagramm seine eigene Anordnung behält.
Wenn du das Diagramm dieser Datenbank das nächste Mal öffnest, stehen die Tabellen wieder dort, wo du sie gelassen hast. Eine Tabelle ohne gespeicherte Position — die einer zweiten Datenbank, die du gerade mit + DB hinzugefügt hast, oder eine seither angelegte — wird in einem Raster neben den anderen angeordnet, nie darüber.
In der Symbolleiste des ER-Diagramms bietet die Schaltfläche Exportieren zwei Formate an: PNG (ein Bild, fertig zum Einfügen in ein Dokument oder einen Chat) und PDF (fertig für Druck oder Präsentation). Jedes davon bietet drei Größen, und die Datei wird an dem Ort gespeichert, den du im Systemdialog auswählst.
Dieselben Formate stehen im Kontextmenü der Arbeitsfläche, und unter macOS lässt sich das Diagramm auch mit ⌘P drucken.
Sieh dir die vollständige Struktur einer Tabelle direkt im Diagramm an.
Wo es zu finden ist: ER-Diagramm › Rechtsklick › Tabellenstruktur bearbeiten
Öffne das Kontextmenü eines Tabellenknotens im Diagramm — Rechtsklick unter macOS, gedrückt halten auf dem iPad — und wähle Tabellenstruktur bearbeiten. Es öffnet sich ein Panel mit dem vollständigen CREATE TABLE der ausgewählten Tabelle.
Stichwörter: DDL, CREATE TABLE, struktur, tabelle anzeigen, show create
Vergleicht zwei Datenbanken auf demselben Server – Tabellen, Views, Routinen, Trigger und Events – und erzeugt das Migrationsskript.
Wo es zu finden ist: Workspace › Werkzeuge › Schemas vergleichen
Das Werkzeug zum Vergleichen von Schemas (Schema Diff) analysiert zwei Datenbanken auf demselben Server und zeigt genau, was sich bei Tabellen, Views, Prozeduren, Funktionen und Triggern geändert hat.
MySQLMariaDBAurora
Unter MySQL und MariaDB vergleicht es auch die Events.
SQL Server
Unter SQL Server ist jede Seite ein Schema einer Datenbank (demo.dbo), und die beiden dürfen in verschiedenen Datenbanken desselben Servers liegen.
PostgreSQL
Unter PostgreSQL ist jede Seite ein Schema der verbundenen Datenbank (demo, ventas).
Schema Diff öffnen:
Klicke in der Seitenleiste auf Schemas vergleichen (Symbol mit gegenläufigen Pfeilen). Es öffnet sich in einem neuen Tab.
Grundlegende Verwendung:
1. Wähle in der oberen Leiste Quelle und Ziel. Das Skript ändert die Quelle, bis sie dem Ziel entspricht: Was nur das Ziel hat, wird in der Quelle angelegt, und was nur die Quelle hat, wird gelöscht.
2. Klicke auf Vergleichen. Calíope liest die Definition jedes Objekts auf beiden Seiten, so wie der Server selbst sie schreibt.
3. Schalte Nur Änderungen ein, um Übereinstimmendes auszublenden.
4. Der Bericht ist nach Objekttyp gruppiert. Klappe eine Zeile auf: Bei einer geänderten Tabelle steht Änderung für Änderung die vorhandene und die künftige Definition; bei einer geänderten View oder Routine stehen beide vollständigen Definitionen nebeneinander; bei einem neuen oder gelöschten Objekt sein DDL.
5. Klicke auf SQL kopieren für das ganze Skript oder auf die Kopieren-Schaltfläche einer Zeile für nur dieses Objekt.
6. Führe es im SQL-Editor mit Skript ausführen aus. Mit eingeschaltetem Safe Mode hält er das Skript an, bevor es den Server erreicht. Vergleiche danach erneut: Beide Seiten sollten identisch sein.
MySQLMariaDBAurora
Die Definitionen sind das SHOW CREATE … jedes Objekts, und der Editor versteht die DELIMITER-Blöcke, in denen Routinen und Trigger kommen.
SQL Server
Die Definitionen stammen aus dem Katalog (sys.sql_modules für Views, Routinen und Trigger). Jede View, Routine und jeder Trigger kommt in ein eigenes EXEC … sp_executesql, weil T-SQL sie allein im Batch verlangt; deshalb läuft das Skript ohne GO-Zeilen.
PostgreSQL
Die Definitionen sind die, die der Server mit pg_get_viewdef, pg_get_functiondef und pg_get_triggerdef schreibt.
Was für Tabellen erzeugt wird:
MySQLMariaDBAurora
- Ein vollständiges CREATE TABLE IF NOT EXISTS für die in der Quelle fehlenden, mit Spalten, Indizes und Optionen.
- DROP TABLE IF EXISTS für die überzähligen.
- ALTER TABLE mit ADD/DROP/MODIFY COLUMN — Typ, Nullbarkeit, Standardwert, Kommentar, Zeichensatz und der Ausdruck einer generierten Spalte bleiben erhalten.
- Hinzufügen und Entfernen von Primärschlüssel, Indizes und CHECK-Bedingungen sowie Änderungen an Tabellenoptionen (ENGINE, DEFAULT CHARSET, COLLATE, ROW_FORMAT, COMMENT).
SQL Server
- IF OBJECT_ID(…) IS NULL CREATE TABLE für die in der Quelle fehlenden, mit Spalten, Schlüsseln und Bedingungen, und ein CREATE INDEX für jeden Index.
- DROP TABLE IF EXISTS für die überzähligen.
- ALTER TABLE mit ADD, ALTER COLUMN und DROP COLUMN; bevor eine Spalte entfernt wird, entfernt das Skript die Standardwert-Bedingung, die an ihr hängt.
- Hinzufügen und Entfernen von Primärschlüssel, Indizes und CHECK-Bedingungen.
PostgreSQL
- CREATE TABLE IF NOT EXISTS für die in der Quelle fehlenden, mit Spalten und Bedingungen, und ein CREATE INDEX für jeden Index.
- DROP TABLE IF EXISTS für die überzähligen.
- ALTER TABLE mit ADD COLUMN, DROP COLUMN und ALTER COLUMN … TYPE, SET/DROP NOT NULL und SET/DROP DEFAULT.
- Hinzufügen und Entfernen von Primärschlüssel, Indizes und CHECK-Bedingungen sowie der Tabellenkommentar (COMMENT ON TABLE).
Was für alles Übrige erzeugt wird:
Eine View oder eine Routine lässt sich nicht stückweise reparieren: Weicht ihre Definition ab, baut das Skript sie mit der des Ziels neu und schreibt dabei die Verweise auf das Quellschema um, damit sie an die richtige Stelle zeigt.
MySQLMariaDBAurora
Neu gebaut wird mit DROP + CREATE.
SQL Server
Neu gebaut wird mit CREATE OR ALTER, das Views, Prozeduren, Funktionen und Trigger annehmen.
PostgreSQL
Neu gebaut wird mit CREATE OR REPLACE; ein Trigger oder eine materialisierte View, die es nicht haben, werden gelöscht und neu angelegt.
Reihenfolge des Skripts:
Zuerst die Tabellen; dann die Fremdschlüssel in einem eigenen Block, denn beim Anlegen mehrerer Tabellen beachtet die alphabetische Reihenfolge die Abhängigkeiten nicht; danach die übrigen Objekte nach Typ, innerhalb jedes Typs nach Abhängigkeiten sortiert — eine View, die auf einer anderen aufbaut, kommt nach dieser.
MySQLMariaDBAuroraSQL Server
Vor dem ersten Objekt, das keine Tabelle ist, setzt das Skript die aktive Datenbank mit einem USE.
PostgreSQL
Vor den Tabellen kommen die eigenen Typen des Schemas, mit denen ihre Spalten deklariert sind.
Absichtlich ignoriert:
MySQLMariaDBAurora
Der AUTO_INCREMENT-Zähler, der mit jedem Insert wächst und zwischen zwei Kopien nie übereinstimmt.
SQL ServerPostgreSQL
Der aktuelle Wert einer Identitätsspalte, der mit jedem Insert wächst und zwischen zwei Kopien nie übereinstimmt.
Was nicht abgedeckt ist:
Spalten einer bestehenden Tabelle werden nicht umsortiert, und eine umbenannte Spalte erscheint als Löschung plus Neuanlage. Views, Routinen und Trigger werden textuell verglichen: Schon eine andere Formatierung zählt als Unterschied.
MySQLMariaDBAurora
Eine geänderte Partitionierung wird erkannt und als Hinweis vermerkt, aber nie in SQL übersetzt: Neu zu partitionieren schreibt die ganze Tabelle neu. Auch ein anderer DEFINER zählt als Unterschied, und unter MariaDB ist das DDL eines Triggers der wörtliche Text, mit dem er geschrieben wurde. Ein Event mit anderer Startzeit unterscheidet sich ebenfalls, denn diese Zeit gehört zu seiner Definition.
PostgreSQL
Eigene Typen — ENUM, Domänen, zusammengesetzte Typen — werden wie eine View verglichen, in einer eigenen Gruppe Typen. Das Skript legt die fehlenden vor den Tabellen an, die sie nutzen, und löscht die, die nur die Quelle hat, ganz am Ende. Ein ENUM, das nur am Ende Werte hinzubekommen hat, wird mit ALTER TYPE … ADD VALUE aktualisiert; jede andere Änderung eines Typs bleibt als Hinweis im Skript und ist von Hand zu machen, denn einen benutzten Typ neu anzulegen heißt, jede Spalte neu zu schreiben, die ihn nutzt. Die Typen einer Erweiterung, etwa die von PostGIS, bleiben außen vor: Sie kommen mit ihrem CREATE EXTENSION.
Prüfe das Skript immer, bevor du es in der Produktion ausführst.
Typischer Anwendungsfall:
Vor einem Deployment die Produktion (Quelle) mit dem Entwicklungsschema (Ziel) vergleichen: Das Skript bringt die Produktion auf den Stand, den die Entwicklung schon hat, ohne es von Hand zu schreiben.
Verfügbar unter macOS, iPad und iPhone.
Stichwörter: Schema Diff, vergleichen, Schema, ALTER TABLE, Migration, Unterschiede, ADD COLUMN, DROP COLUMN, MODIFY COLUMN, SHOW CREATE TABLE, CREATE TABLE, Indizes, Fremdschlüssel, Partitionierung, nur Änderungen
Füge eine zweite Datenbank zum Canvas des ER-Diagramms hinzu, um Beziehungen zwischen Datenbanken zu visualisieren.
Wo es zu finden ist: ER-Diagramm › + DB
Das ER-Diagramm kann Tabellen aus zwei Datenbanken gleichzeitig im selben Canvas anzeigen, einschließlich der Fremdschlüssel, die von einer Datenbank in eine andere übergreifen.
Wie du eine zweite Datenbank hinzufügst:
1. Wähl bei geöffnetem ER-Diagramm die Haupt-DB im linken Auswahlmenü der Werkzeugleiste.
2. Klick auf den Button + DB in der Werkzeugleiste, um eine zweite Datenbank hinzuzufügen.
3. Wähl die zweite DB im neuen Auswahlmenü, das erscheint.
4. Der Canvas aktualisiert sich automatisch und zeigt die Tabellen beider Datenbanken.
Farbkodierung:
- Blaue Kopfzeile — Tabellen der Haupt-DB.
- Blaugrüne Kopfzeile (Teal) — Tabellen der zweiten DB.
- Orangefarbene Pfeile — Fremdschlüssel-Beziehungen, die von einer Datenbank in eine andere übergreifen.
- Normale Pfeile — Beziehungen innerhalb derselben Datenbank.
Voraussetzung für Cross-Database-Beziehungen:
Die Fremdschlüssel müssen im information_schema deklariert sein. MySQL/MariaDB registriert die FKs in information_schema.KEY_COLUMN_USAGE. Wenn die Beziehungen zwischen Datenbanken nicht erscheinen, prüfe, ob die FKs formal auf dem Server existieren (nicht nur Namenskonventionen sind).
Navigation und Export:
Alle Funktionen des normalen ER-Diagramms gelten auch für den Multi-Datenbank-Canvas: Zoom, Pan, Auto-Layout, Layout speichern, PNG/PDF exportieren und DDL von Tabellen ansehen. Sieh dir die Themen zu ER-Diagramm für mehr Details an.