Questa pagina descrive Calíope 1.8, la versione che sto costruendo adesso. La 1.7 è sull'App Store per Mac, iPad, iPhone, Apple Watch, Apple TV e Apple Vision Pro. Il changelog dice in quale versione è arrivata ogni funzione.

Aggiunge a ogni argomento un pulsante «Apri in Calíope». Funziona solo con l'app installata.

Costruttore di tabelle

Costruttore di tabelle

Crea o modifica tabelle con interfaccia visuale senza scrivere DDL manualmente.

Dove si trova: Cataloghi › menu contestuale › Nuova tabella / Progetta tabella

Il Costruttore di tabelle si apre da Cataloghi: premi Nuova tabella nella barra degli strumenti oppure apri il menu contestuale di una tabella esistente — clic destro su macOS, tocca e tieni premuto su iPad — e scegli Progetta tabella. Cataloghi si apre in modalità di sola lettura, quindi prima va disattivata. È disponibile su macOS, iPad, iPhone e Apple Vision Pro e su tutte e quattro si apre come un tab persistente del workspace: puoi passare a un altro tab (per esempio Cataloghi per consultare un'altra tabella) e tornare senza perdere il lavoro. Ogni tabella si apre in un tab proprio.

L'editor ha i suoi tab: Colonne, Indici, Chiavi esterne —dove il motore le ha— e Opzioni. Sotto, l'Anteprima SQL mostra il CREATE TABLE —o, per una tabella esistente, l'ALTER TABLE— che producono le tue modifiche, e segue ogni cambiamento; Copia lo mette negli appunti. Quando hai finito, premi Crea tabella (o Applica le modifiche per una tabella esistente) per eseguirlo sul server. Ripristina scarta ciò che hai cambiato: torna ai valori predefiniti per una tabella nuova, o alla definizione del server per una esistente.

Parole chiave: tabella, creare tabella, modificare tabella, DDL, costruttore, table builder, iPad

Definire le colonne

Aggiungi, modifica e riordina le colonne della tabella.

Dove si trova: Costruttore di tabelle › Tab Colonne

Nel tab Colonne, premi + per aggiungere una colonna; i pulsanti accanto duplicano la colonna selezionata, la spostano su o giù e la eliminano. Premi una colonna dell'elenco per modificarla qui sotto: il nome, il tipo di dato —l'elenco è quello del motore del server—, la lunghezza quando il tipo la prevede (per esempio 500 per VARCHAR), e i vincoli Consente NULL, Chiave primaria (PRIMARY KEY) e Unico (UNIQUE), più quelli che solo alcuni tipi prevedono. Compaiono solo quelli che il tipo scelto supporta, e segnare una colonna come chiave primaria disattiva NULL.

MySQLMariaDBAuroraTiDB

Nei tipi interi, Incremento automatico (AUTO_INCREMENT) numera le righe da solo e Senza segno (UNSIGNED) esclude i valori negativi.

TiDB

Su una chiave primaria BIGINT, ID casuale (AUTO_RANDOM) genera valori sparsi invece che consecutivi, così gli inserimenti non si accumulano in una sola regione. Si sceglie quando si crea la colonna: TiDB non permette di aggiungerlo né di toglierlo dopo, quindi in una tabella esistente la casella appare spuntata e disattivata. Non ci sono tipi spaziali.

SQL ServerPostgreSQL

Nei tipi interi, Incremento automatico (IDENTITY) numera le righe da solo. Non c'è Senza segno.

Il valore predefinito può essere nessuno, un valore letterale, NULL, CURRENT_TIMESTAMP o un'espressione. Ogni colonna può anche avere un commento.

MySQLMariaDBAuroraTiDB

Le colonne di testo possono avere un proprio set di caratteri e una propria collazione; se non si toccano, ereditano quelli della tabella.

SQL Server

Le colonne di testo (nvarchar, nchar, varchar, char) offrono Collazione, con quelle della lingua della collation del database —le Latin1_General_… per un database Latin1_General_100_CI_AS_SC_UTF8, non le 5.500 del server—; vuota, la colonna eredita quella del database. Non c’è un set di caratteri a parte: deriva dalla collation.

PostgreSQL

I tipi di testo (varchar, char e text) prendono una Collazione per colonna, tra quelle che il server ha per la codifica del database; il set di caratteri è di tutto il database e non si sceglie.

SQL Server

Il commento si scrive come proprietà estesa MS_Description.

PostgreSQL

Il commento si scrive con COMMENT ON COLUMN.

Una colonna che esisteva già conserva il suo nome originale, così rinominarla diventa una ridenominazione nell'ALTER TABLE invece di eliminare la colonna e aggiungerne una nuova.

SQL ServerPostgreSQL

Una colonna nuova va sempre in fondo alla tabella: il motore non ha AFTER. Spostare su o giù una colonna nuova non cambia nulla sul server, e l'anteprima SQL lo dice in un commento.

Oracle

Su NUMBER, Identità (IDENTITY) numera le righe da solo (GENERATED BY DEFAULT AS IDENTITY). Non c'è Senza segno. La lunghezza di VARCHAR2 e CHAR si conta in caratteri: 50 dà VARCHAR2(50 CHAR); per contarla in byte, scrivi 50 BYTE. NUMBER prende precisione e scala nello stesso campo (10,2), e TIMESTAMP quella delle frazioni di secondo (6). Il costruttore non offre set di caratteri né collazione per colonna, e il commento si scrive con COMMENT ON COLUMN. Una colonna nuova va sempre in fondo alla tabella. Su una tabella esistente, l'ALTER TABLE dice solo ciò che hai cambiato in ogni colonna; un'identità si può togliere ma non aggiungere a una colonna che esiste già, e l'anteprima SQL lo dice in un commento.

Parole chiave: colonna, tipo di dato, INT, VARCHAR, PRIMARY KEY, AUTO_INCREMENT, nullable

Indici e chiavi univoche

Gestisci gli indici della tabella: INDEX e UNIQUE, e FULLTEXT e SPATIAL dove il motore li ha.

Dove si trova: Costruttore di tabelle › Tab Indici

Nel tab Indici, premi + per aggiungere un indice. Dagli un nome e scegli il tipo; l'elenco offre solo i tipi che ha il motore del server: INDEX (normale) e UNIQUE (senza duplicati).

MySQLMariaDBAurora

Inoltre FULLTEXT (ricerca full-text in colonne CHAR/VARCHAR/TEXT) e SPATIAL (dati geospaziali).

TiDB

Il costruttore non ha FULLTEXT né SPATIAL: TiDB accetta il primo con un avviso e non lo crea, e non ha tipi spaziali.

SQL Server

C’è SPATIAL: con una colonna geometry si scrive il riquadro che delimita i suoi dati (xmin, ymin, xmax, ymax), perché il piano non ha bordi; con una geography si lascia vuoto. La tabella deve avere una chiave primaria. FULLTEXT non si offre: serve il componente Full-Text Search del server.

PostgreSQL

Inoltre FULLTEXT —un indice gin su to_tsvector('simple', …) delle colonne scelte— e SPATIAL —un indice gist, sulla geometria del nucleo o su geometry di PostGIS.

Spunta le colonne che lo compongono: l'ordine in cui le spunti è l'ordine dell'indice, e il numero accanto lo indica. Un indice può abbracciare più colonne (indice composto).

Fai clic destro su un indice dell'elenco (su iPad, tienilo premuto) per modificarlo o eliminarlo. Modificarne uno che esisteva già lo elimina e lo ricrea.

La chiave primaria si definisce per colonna dal tab Colonne (Chiave primaria (PRIMARY KEY)); non appare qui come indice separato.

ClickHouse

Con ClickHouse i tipi sono Indice di salto e, se il server crea indici di testo, FULLTEXT: se ne scelgono il tipo (minmax, set(100) o bloom_filter; per il testo, ngrambf_v1, che conserva frammenti di tre lettere e serve a LIKE '%x%', e tokenbf_v1, che conserva parole e serve a hasToken; e text se il server crea indici di testo) e la granularità, e scarta blocchi di dati invece di cercare una riga. Non c'è UNIQUE. Si aggiunge e si toglie anche su una tabella esistente, con ALTER TABLE … ADD INDEX e DROP INDEX. FULLTEXT scrive lo stesso indice di salto di tipo text(tokenizer = 'splitByNonAlpha'), che divide il testo in parole e serve a hasToken; non c'è indice spaziale.

Oracle

FULLTEXT e SPATIAL sono indici di dominio su una colonna (CTXSYS.CONTEXT e MDSYS.SPATIAL_INDEX_V2), e quello spaziale registra prima la sua riga di metadati. Un indice UNIQUE si crea come vincolo UNIQUE, ed eliminarlo elimina il vincolo insieme al suo indice.

Apple Vision Pro: il menu contestuale si apre guardando la riga e pizzicando senza lasciare.

Parole chiave: indice, index, UNIQUE, FULLTEXT, SPATIAL, composto, prestazioni

Chiavi esterne

Definisci relazioni di integrità referenziale tra tabelle.

Dove si trova: Costruttore di tabelle › Tab Chiavi esterne

Nel tab Chiavi esterne, premi + per aggiungere una FK. Dalle un nome, scegli la colonna locale, il database —lo stesso, a meno che tu ne scelga un altro— e la tabella di riferimento, e scrivi la colonna referenziata.

Scegli le azioni ON DELETE e ON UPDATE: RESTRICT (errore se viola l'integrità), CASCADE (propaga il cambiamento), SET NULL (imposta NULL nella FK) o NO ACTION.

MySQLMariaDBAurora

NO ACTION equivale a RESTRICT. Entrambe le tabelle devono usare il motore di archiviazione InnoDB.

TiDB

NO ACTION equivale a RESTRICT. TiDB applica le chiavi esterne dalla 6.6 (tidb_enable_foreign_key, attiva per impostazione predefinita): eliminare una riga padre che ha ancora figlie fallisce con l’errore 1451.

SQL Server

Non c'è RESTRICT: il costruttore scrive NO ACTION, che in questo motore fa lo stesso. Una chiave esterna non può puntare a un altro database, e l'anteprima SQL lo dice in un commento.

Fai clic destro su una chiave dell'elenco (su iPad, tienila premuta) per modificarla o eliminarla; modificarne una che esisteva già la elimina e la ricrea. Il costruttore genera il CONSTRAINT con nome esplicito, per poterlo eliminare in seguito con quel nome.

ClickHouse

Con ClickHouse non c'è la scheda Chiavi esterne: il motore non le ha.

Oracle

Oracle ha solo ON DELETE CASCADE e ON DELETE SET NULL: con RESTRICT o NO ACTION il costruttore non scrive la clausola, che è ciò che il motore fa per impostazione predefinita. ON UPDATE non esiste, e la scheda non lo propone. Una chiave esterna può puntare a una tabella di un altro schema se hai il privilegio REFERENCES su di essa.

Apple Vision Pro: il menu contestuale si apre guardando la riga e pizzicando senza lasciare.

Parole chiave: FK, foreign key, chiave esterna, CASCADE, RESTRICT, integrità referenziale

Opzioni della tabella

Ciò che appartiene alla tabella intera: il suo commento e, dove il motore li ha, motore di archiviazione, formato di riga, set di caratteri e collazione.

Dove si trova: Costruttore di tabelle › Tab Opzioni

Il tab Opzioni raccoglie ciò che appartiene alla tabella intera.

MySQLMariaDBAurora

Il Motore (ENGINE) di archiviazione, il Formato di riga (ROW_FORMAT), il Set di caratteri e la Collazione della tabella —cambiare il set di caratteri sceglie la prima collazione di quel set— e il Commento della tabella. Le colonne di testo lasciate su «(eredita tabella)» prendono il set di caratteri della tabella.

MySQLMariaDBAurora

Il formato di riga si sceglie quando si crea la tabella: per una tabella esistente il tab non lo offre, perché il costruttore non lo modifica. Gli elenchi di set di caratteri e collazioni li fornisce il server; quello dei motori di archiviazione è fisso, con InnoDB per primo.

TiDB

Il Set di caratteri e la Collazione della tabella, e il Commento della tabella. Non ci sono Motore (ENGINE) né Formato di riga (ROW_FORMAT): TiDB li accetta e non ne fa nulla.

SQL ServerPostgreSQL

Il motore non ha motore di archiviazione, formato di riga né set di caratteri per tabella, quindi il tab contiene solo il Commento della tabella.

SQL Server

Il commento si scrive come proprietà estesa MS_Description.

PostgreSQL

Il commento si scrive con COMMENT ON TABLE.

ClickHouse

Con ClickHouse, quando crei la tabella, la scheda ha la sezione Chiavi con ORDER BY, PARTITION BY, PRIMARY KEY, TTL e SETTINGS, secondo il motore scelto: la famiglia MergeTree le ha, Memory o Log no. Con ORDER BY vuoto si usano le colonne segnate come chiave primaria; senza nessuna delle due, Crea tabella si spegne e il piè di pagina dice perché. Quando modifichi una tabella esistente la sezione non compare, perché il motore e le chiavi non si cambiano dopo. Una nota alla fine dice ciò che il motore non ha: chiavi esterne, autoincremento, indici univoci e set di caratteri.

Oracle

Il motore non ha motore di archiviazione, formato di riga né set di caratteri per tabella, quindi il tab contiene solo il Commento della tabella, scritto con COMMENT ON TABLE.

Parole chiave: opzioni, ENGINE, InnoDB, ROW_FORMAT, set di caratteri, collazione, commento