Diese Seite beschreibt Calíope 1.8, die Version, die ich gerade baue. Die 1.7 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.
Erstelle oder ändere Tabellen mit einer visuellen Oberfläche, ohne DDL manuell zu schreiben.
Wo es zu finden ist: Kataloge › Kontextmenü › Neue Tabelle / Tabelle entwerfen
Der Tabellen-Builder wird über Kataloge geöffnet: Klick in der Symbolleiste auf Neue Tabelle oder öffne das Kontextmenü einer bestehenden Tabelle — Rechtsklick unter macOS, gedrückt halten auf dem iPad — und wähle Tabelle entwerfen. Kataloge öffnet sich im Nur-Lesen-Modus, schalte ihn also zuerst aus. Er ist auf macOS, iPad, iPhone und Apple Vision Pro verfügbar und öffnet sich auf allen vieren als persistenter Tab des Workspace: Du kannst zu einem anderen Tab wechseln (zum Beispiel Kataloge, um eine andere Tabelle nachzuschlagen) und zurückkehren, ohne die Arbeit zu verlieren. Jede Tabelle öffnet sich in einem eigenen Tab.
Der Editor hat seine Tabs: Spalten, Indizes, Fremdschlüssel —wo die Engine sie hat— und Optionen. Darunter zeigt die SQL-Vorschau das CREATE TABLE —oder, bei einer bestehenden Tabelle, das ALTER TABLE—, das deine Änderungen ergeben, und folgt jeder Bearbeitung; Kopieren legt es in die Zwischenablage. Wenn du fertig bist, drück auf Tabelle erstellen (oder Änderungen anwenden bei einer bestehenden Tabelle), um es auf dem Server auszuführen. Zurücksetzen verwirft deine Änderungen: zurück zu den Standardwerten bei einer neuen Tabelle oder zur Definition des Servers bei einer bestehenden.
Füge Spalten der Tabelle hinzu, bearbeite und ordne sie neu.
Wo es zu finden ist: Tabellen-Builder › Tab Spalten
Drück im Tab Spalten auf +, um eine Spalte hinzuzufügen; die Schaltflächen daneben duplizieren die ausgewählte Spalte, verschieben sie nach oben oder unten und löschen sie. Drück auf eine Spalte in der Liste, um sie darunter zu bearbeiten: den Namen, den Datentyp —die Liste ist die der Engine des Servers—, die Länge, wenn der Typ eine hat (zum Beispiel 500 für VARCHAR), und die Einschränkungen Erlaubt NULL, Primärschlüssel (PRIMARY KEY) und Eindeutig (UNIQUE), dazu die, die nur manche Typen haben. Es erscheinen nur die, die der gewählte Typ unterstützt, und eine Spalte als Primärschlüssel zu markieren schaltet NULL aus.
MySQLMariaDBAuroraTiDB
Bei Ganzzahltypen nummeriert Auto-Increment (AUTO_INCREMENT) die Zeilen selbst, und Vorzeichenlos (UNSIGNED) lässt negative Werte weg.
TiDB
Bei einem BIGINT-Primärschlüssel erzeugt Zufällige ID (AUTO_RANDOM) verteilte statt fortlaufender Werte, damit sich die Einfügungen nicht in einer einzigen Region stauen. Es wird beim Anlegen der Spalte gewählt: TiDB lässt es später weder hinzufügen noch entfernen, deshalb erscheint das Kästchen bei einer bestehenden Tabelle angehakt und deaktiviert. Räumliche Typen gibt es nicht.
SQL ServerPostgreSQL
Bei Ganzzahltypen nummeriert Auto-Increment (IDENTITY) die Zeilen selbst. Vorzeichenlos gibt es nicht.
Der Standardwert kann keiner sein, ein literaler Wert, NULL, CURRENT_TIMESTAMP oder ein Ausdruck. Jede Spalte kann außerdem einen Kommentar tragen.
MySQLMariaDBAuroraTiDB
Textspalten können einen eigenen Zeichensatz und eine eigene Kollation haben; lässt man sie unverändert, erben sie die der Tabelle.
SQL Server
Textspalten (nvarchar, nchar, varchar, char) bieten Kollation an, mit denen in der Sprache der Datenbanksortierung —die Latin1_General_… bei einer Datenbank mit Latin1_General_100_CI_AS_SC_UTF8, nicht die 5.500 des Servers—; leer übernimmt die Spalte die der Datenbank. Einen eigenen Zeichensatz gibt es nicht: Er ergibt sich aus der Sortierung.
PostgreSQL
Texttypen (varchar, char und text) bekommen eine Kollation pro Spalte, aus denen, die der Server für die Kodierung der Datenbank hat; der Zeichensatz gehört der ganzen Datenbank und wird nicht gewählt.
SQL Server
Der Kommentar wird als erweiterte Eigenschaft MS_Description geschrieben.
PostgreSQL
Der Kommentar wird mit COMMENT ON COLUMN geschrieben.
Eine Spalte, die schon existierte, behält ihren ursprünglichen Namen: Sie umzubenennen wird im ALTER TABLE zu einer Umbenennung, statt die Spalte zu löschen und eine neue anzulegen.
SQL ServerPostgreSQL
Eine neue Spalte kommt immer ans Ende der Tabelle: Die Engine hat kein AFTER. Eine neue Spalte nach oben oder unten zu verschieben ändert auf dem Server nichts, und die SQL-Vorschau sagt das in einem Kommentar.
Oracle
Bei NUMBER nummeriert Identität (IDENTITY) die Zeilen selbst (GENERATED BY DEFAULT AS IDENTITY). Vorzeichenlos gibt es nicht. Die Länge von VARCHAR2 und CHAR zählt Zeichen: 50 ergibt VARCHAR2(50 CHAR); um Bytes zu zählen, schreib 50 BYTE. NUMBER nimmt Genauigkeit und Skala im selben Feld (10,2), TIMESTAMP die Genauigkeit der Sekundenbruchteile (6). Der Builder bietet keinen Zeichensatz und keine Kollation pro Spalte an, und der Kommentar wird mit COMMENT ON COLUMN geschrieben. Eine neue Spalte kommt immer ans Ende der Tabelle. Bei einer bestehenden Tabelle sagt das ALTER TABLE nur, was du an jeder Spalte geändert hast; eine Identität lässt sich entfernen, aber einer bestehenden Spalte nicht hinzufügen, und die SQL-Vorschau sagt das in einem Kommentar.
Verwalte die Indizes der Tabelle: INDEX und UNIQUE, und FULLTEXT und SPATIAL, wo die Engine sie hat.
Wo es zu finden ist: Tabellen-Builder › Tab Indizes
Drück im Tab Indizes auf +, um einen Index hinzuzufügen. Gib ihm einen Namen und wähle den Typ; die Liste bietet nur die Typen an, die die Engine des Servers hat: INDEX (normal) und UNIQUE (ohne Duplikate).
MySQLMariaDBAurora
Außerdem FULLTEXT (Volltextsuche in CHAR/VARCHAR/TEXT-Spalten) und SPATIAL (Geodaten).
TiDB
Der Builder hat weder FULLTEXT noch SPATIAL: TiDB nimmt das erste mit einer Warnung an und legt es nicht an, und räumliche Typen gibt es nicht.
SQL Server
SPATIAL gibt es: Bei einer geometry-Spalte schreibst du die Box, die ihre Daten begrenzt (xmin, ymin, xmax, ymax), weil die Ebene keine Ränder hat; bei einer geography-Spalte bleibt sie leer. Die Tabelle braucht einen Primärschlüssel. FULLTEXT wird nicht angeboten: Dafür braucht der Server die Komponente Full-Text Search.
PostgreSQL
Außerdem FULLTEXT —ein gin-Index über to_tsvector('simple', …) der gewählten Spalten— und SPATIAL —ein gist-Index über die Geometrie des Kerns oder geometry von PostGIS.
Hake die Spalten an, aus denen er besteht: Die Reihenfolge, in der du sie anhakst, ist die Reihenfolge des Index, und die Zahl daneben zeigt sie an. Ein Index kann mehrere Spalten umfassen (zusammengesetzter Index).
Klick mit der rechten Maustaste auf einen Index in der Liste (auf dem iPad: lange drücken), um ihn zu bearbeiten oder zu löschen. Einen bereits vorhandenen zu bearbeiten löscht ihn und legt ihn neu an.
Der Primärschlüssel wird pro Spalte im Tab Spalten definiert (Primärschlüssel (PRIMARY KEY)); er erscheint hier nicht als separater Index.
ClickHouse
Mit ClickHouse sind die Typen Skip-Index und, wenn der Server Textindizes anlegt, FULLTEXT: Du wählst seinen Typ (minmax, set(100) oder bloom_filter; für Text ngrambf_v1, das Bruchstücke aus drei Buchstaben speichert und LIKE '%x%' dient, und tokenbf_v1, das Wörter speichert und hasToken dient; und text, wenn der Server Textindizes anlegt) und seine Granularität, und er überspringt Datenblöcke, statt eine Zeile zu suchen. Es gibt kein UNIQUE. Er lässt sich auch bei einer bestehenden Tabelle hinzufügen und entfernen, mit ALTER TABLE … ADD INDEX und DROP INDEX. FULLTEXT schreibt denselben Skip-Index vom Typ text(tokenizer = 'splitByNonAlpha'), der den Text in Wörter zerlegt und hasToken dient; einen räumlichen Index gibt es nicht.
Oracle
FULLTEXT und SPATIAL sind Domänenindizes auf einer Spalte (CTXSYS.CONTEXT und MDSYS.SPATIAL_INDEX_V2), und der räumliche legt zuerst seine Metadatenzeile an. Ein UNIQUE-Index wird als UNIQUE-Constraint angelegt, und beim Löschen fällt der Constraint mitsamt seinem Index weg.
Apple Vision Pro: Das Kontextmenü öffnet sich, wenn du die Zeile ansiehst und Daumen und Zeigefinger zusammengeführt hältst.
Definiere Beziehungen zur referentiellen Integrität zwischen Tabellen.
Wo es zu finden ist: Tabellen-Builder › Tab Fremdschlüssel
Drück im Tab Fremdschlüssel auf +, um einen FK hinzuzufügen. Gib ihm einen Namen, wähle die lokale Spalte, die Datenbank —dieselbe, sofern du keine andere wählst— und die referenzierte Tabelle, und gib die referenzierte Spalte ein.
Wähle die Aktionen ON DELETE und ON UPDATE: RESTRICT (Fehler bei Verletzung der Integrität), CASCADE (propagiert die Änderung), SET NULL (setzt NULL im FK) oder NO ACTION.
MySQLMariaDBAurora
NO ACTION entspricht RESTRICT. Beide Tabellen müssen die Speicher-Engine InnoDB verwenden.
TiDB
NO ACTION entspricht RESTRICT. TiDB setzt Fremdschlüssel seit 6.6 durch (tidb_enable_foreign_key, standardmäßig an): Eine Elternzeile zu löschen, die noch Kinder hat, schlägt mit dem Fehler 1451 fehl.
SQL Server
RESTRICT gibt es nicht: Der Builder schreibt NO ACTION, das in dieser Engine dasselbe tut. Ein Fremdschlüssel kann nicht auf eine andere Datenbank zeigen, und die SQL-Vorschau sagt das in einem Kommentar.
Klick mit der rechten Maustaste auf einen Schlüssel in der Liste (auf dem iPad: lange drücken), um ihn zu bearbeiten oder zu löschen; einen bereits vorhandenen zu bearbeiten löscht ihn und legt ihn neu an. Der Builder erzeugt das CONSTRAINT mit explizitem Namen, damit es sich später über diesen Namen entfernen lässt.
ClickHouse
Mit ClickHouse gibt es keinen Tab Fremdschlüssel: Die Engine hat keine.
Oracle
Oracle kennt nur ON DELETE CASCADE und ON DELETE SET NULL: Bei RESTRICT oder NO ACTION schreibt der Builder keine Klausel, und das ist das Standardverhalten der Engine. ON UPDATE gibt es nicht, und der Tab bietet es nicht an. Ein Fremdschlüssel kann auf eine Tabelle in einem anderen Schema zeigen, wenn du das Recht REFERENCES darauf hast.
Apple Vision Pro: Das Kontextmenü öffnet sich, wenn du die Zeile ansiehst und Daumen und Zeigefinger zusammengeführt hältst.
Was zur ganzen Tabelle gehört: ihr Kommentar und, wo die Engine sie hat, Speicher-Engine, Zeilenformat, Zeichensatz und Kollation.
Wo es zu finden ist: Tabellen-Builder › Tab Optionen
Der Tab Optionen enthält, was zur ganzen Tabelle gehört.
MySQLMariaDBAurora
Die Speicher-Engine (ENGINE), das Zeilenformat (ROW_FORMAT), Zeichensatz und Kollation der Tabelle —ein anderer Zeichensatz wählt die erste Kollation dieses Zeichensatzes— und den Tabellen-Kommentar. Textspalten, die auf „(erbt von Tabelle)“ bleiben, übernehmen den Zeichensatz der Tabelle.
MySQLMariaDBAurora
Das Zeilenformat wird beim Erstellen der Tabelle gewählt: Bei einer bestehenden Tabelle bietet der Tab es nicht an, weil der Builder es nicht ändert. Die Listen der Zeichensätze und Kollationen kommen vom Server; die der Speicher-Engines ist fest, mit InnoDB an erster Stelle.
TiDB
Zeichensatz und Kollation der Tabelle und den Tabellen-Kommentar. Es gibt weder Engine (ENGINE) noch Zeilenformat (ROW_FORMAT): TiDB nimmt sie an und macht nichts damit.
SQL ServerPostgreSQL
Die Engine hat weder Speicher-Engine noch Zeilenformat noch Zeichensatz pro Tabelle, deshalb enthält der Tab nur den Tabellen-Kommentar.
SQL Server
Der Kommentar wird als erweiterte Eigenschaft MS_Description geschrieben.
PostgreSQL
Der Kommentar wird mit COMMENT ON TABLE geschrieben.
ClickHouse
Mit ClickHouse hat der Tab beim Anlegen der Tabelle den Abschnitt Schlüssel mit ORDER BY, PARTITION BY, PRIMARY KEY, TTL und SETTINGS, je nach gewählter Engine: Die MergeTree-Familie hat sie, Memory oder Log nicht. Bleibt ORDER BY leer, werden die als Primärschlüssel markierten Spalten genommen; ohne beides schaltet sich Tabelle erstellen ab, und die Fußzeile sagt, warum. Beim Bearbeiten einer bestehenden Tabelle erscheint der Abschnitt nicht, weil sich Engine und Schlüssel danach nicht mehr ändern lassen. Ein Hinweis am Ende sagt, was die Engine nicht hat: Fremdschlüssel, Autoinkrement, eindeutige Indizes und Zeichensatz.
Oracle
Die Engine hat weder Speicher-Engine noch Zeilenformat noch Zeichensatz pro Tabelle, deshalb enthält der Tab nur den Tabellen-Kommentar, der mit COMMENT ON TABLE geschrieben wird.