このページはCalíope 1.7を紹介しています。私がいま作っているバージョンです。1.6は、Mac、iPad、iPhone、Apple Watch、Apple TV、Apple Vision Pro向けにApp Storeで公開中です。それぞれの機能がどのバージョンで入ったかは変更履歴に書いてあります。

すべてのトピックに「Calíopeで開く」ボタンを追加します。アプリがインストールされている場合にのみ機能します。

テーブルビルダー

テーブルビルダー

DDLを手で書かずに、ビジュアルなインターフェイスでテーブルを作成または変更します。

場所: カタログ › 右クリック › 新規テーブル / テーブルを設計

「テーブルビルダー」は「カタログ」から開きます:ツールバーの「新規テーブル」をクリックするか、既存のテーブルを右クリックして「テーブルを設計」を選びます。カタログは読み出し専用モードで開くので、先にそれをオフにしてください。macOS、iPad、iPhone、Apple Vision Proで使え、4つすべてで永続的なワークスペースタブとして開きます:別のタブ(たとえば別のテーブルを確かめるためのカタログ)に切り替えても、作業を失わずに戻ってこられます。テーブルごとに専用のタブが開きます。

エディタにはタブがあります:「列」、「インデックス」、「外部キー」(エンジンにある場合)、「オプション」。その下の「SQLプレビュー」には、変更から生まれるCREATE TABLE(既存のテーブルならALTER TABLE)が表示され、編集のたびに追従します。「コピー」でクリップボードに入ります。終わったら「テーブルを作成」(既存のテーブルなら「変更を適用」)をクリックすると、サーバで実行されます。「リセット」は変更を破棄します:新規テーブルならデフォルトに、既存のテーブルならサーバ上の定義に戻ります。

キーワード: テーブル、テーブルを作成、テーブルを編集、DDL、ビルダー、テーブルビルダー、iPad

列の定義

テーブルの列を追加、編集、並べ替えます。

場所: テーブルビルダー › 「列」タブ

「列」タブで「+」をクリックすると列が追加されます。その横のボタンで、選択した列を複製し、上下に移動し、削除できます。リストの列をクリックすると、その下で編集できます:名前、データ型(リストはサーバのエンジンのもの)、型が長さを取る場合はその長さ(例:VARCHARなら500)、そして制約の「NULLを許可」、「主キー (PRIMARY KEY)」、「一意 (UNIQUE)」と、一部の型だけが持つ制約です。選んだ型が対応するものだけが表示され、列を主キーにするとNULLはオフになります。

MySQLMariaDBAuroraTiDB

整数型では、「自動増分 (AUTO_INCREMENT)」が行に自動で番号を振り、「符号なし (UNSIGNED)」が負の値を除外します。

TiDB

BIGINTの主キーでは、「ランダムID (AUTO_RANDOM)」が連続した値ではなく散らばった値を生成するので、挿入が1つのリージョンに集中しません。これは列を作成するときに選びます:TiDBでは後から追加も削除もできないため、既存のテーブルではチェックボックスがオンのまま無効になって表示されます。空間型はありません。

SQL ServerPostgreSQL

整数型では、「自動増分 (IDENTITY)」が行に自動で番号を振ります。「符号なし」はありません。

「デフォルト値」は、なし、リテラル値、NULL、CURRENT_TIMESTAMP、または式にできます。各列にはコメントも付けられます。

MySQLMariaDBAuroraTiDB

テキスト列は独自の文字セットと照合順序を持てます。そのままにしておくと、テーブルのものを継承します。

SQL ServerPostgreSQL

ビルダーには列ごとの文字セットや照合順序はありません。

SQL Server

コメントは拡張プロパティMS_Descriptionとして書き込まれます。

PostgreSQL

コメントはCOMMENT ON COLUMNで書き込まれます。

既存の列は元の名前を保つので、名前を変えると、列を削除して新しい列を追加するのではなく、ALTER TABLEでの名前の変更になります。

SQL ServerPostgreSQL

新しい列は常にテーブルの末尾に入ります:エンジンにAFTERがないからです。新しい列を上下に移動してもサーバ上では何も変わらず、SQLプレビューがコメントでそう伝えます。

Oracle

NUMBERでは、「アイデンティティ (IDENTITY)」が行に自動で番号を振ります(GENERATED BY DEFAULT AS IDENTITY)。「符号なし」はありません。VARCHAR2とCHARの長さは文字数で数えます:50はVARCHAR2(50 CHAR)です。バイトで数えるには50 BYTEと入力します。NUMBERは精度とスケールを同じ欄に取り(10,2)、TIMESTAMPは小数秒の精度を取ります(6)。ビルダーには列ごとの文字セットや照合順序はなく、コメントはCOMMENT ON COLUMNで書き込まれます。新しい列は常にテーブルの末尾に入ります。既存のテーブルでは、ALTER TABLEは各列で変更したものだけを記述します。アイデンティティは削除できますが、既存の列に追加することはできず、SQLプレビューがコメントでそう伝えます。

キーワード: 列、データ型、INT、VARCHAR、PRIMARY KEY、AUTO_INCREMENT、NULL許容

インデックスと一意キー

テーブルのインデックスを管理します:INDEXとUNIQUE、そしてエンジンにあればFULLTEXTとSPATIAL。

場所: テーブルビルダー › 「インデックス」タブ

「インデックス」タブで「+」をクリックするとインデックスが追加されます。名前を付けて種類を選びます。リストにはサーバのエンジンにある種類だけが表示されます:INDEX(標準)とUNIQUE(重複なし)。

MySQLMariaDBAurora

さらにFULLTEXT(CHAR/VARCHAR/TEXT列の全文検索)とSPATIAL(地理空間データ)もあります。

TiDB

ビルダーにはFULLTEXTもSPATIALもありません:TiDBは前者を警告付きで受け付けますが作成せず、空間型はありません。

SQL ServerPostgreSQL

ビルダーにはFULLTEXTもSPATIALもありません。

インデックスが対象にする列にチェックを入れます:チェックを入れた順番がインデックスの順番になり、各列の横の番号がそれを示します。インデックスは複数の列にまたがることができます(複合インデックス)。

リストのインデックスを右クリックすると(iPadでは長押し)、編集または削除できます。既存のインデックスを編集すると、それを削除して作成し直します。

主キーは「列」タブで列ごとに定義します(「主キー (PRIMARY KEY)」)。ここに別のインデックスとしては表示されません。

ClickHouse

ClickHouseでは、種類は「スキップインデックス」だけです:その種類(minmax、set(100)、bloom_filter)と粒度を選び、行を探すのではなくデータのブロックをスキップします。UNIQUEはありません。既存のテーブルでもALTER TABLE … ADD INDEXとDROP INDEXで追加と削除ができます。

Oracle

ビルダーにはFULLTEXTもSPATIALもありません。UNIQUEインデックスはUNIQUE制約として作成され、削除するとその制約がインデックスと一緒に削除されます。

Apple Vision Pro:行を見てピンチしたまま保持すると、コンテキストメニューが開きます。

キーワード: インデックス、UNIQUE、FULLTEXT、SPATIAL、複合、パフォーマンス

外部キー

テーブル間の参照整合性の関係を定義します。

場所: テーブルビルダー › 「外部キー」タブ

「外部キー」タブで「+」をクリックすると外部キーが追加されます。名前を付け、ローカル列、データベース(別のものを選ばなければ同じもの)、参照先テーブルを選び、参照先の列を入力します。

「ON DELETE」と「ON UPDATE」の動作を選びます:RESTRICT(整合性が破られるとエラー)、CASCADE(変更を伝播)、SET NULL(外部キーをNULLにする)、またはNO ACTION。

MySQLMariaDBAurora

NO ACTIONはRESTRICTと同じです。両方のテーブルがInnoDBストレージエンジンを使っている必要があります。

TiDB

NO ACTIONはRESTRICTと同じです。TiDBは6.6から外部キーを強制します(tidb_enable_foreign_key、デフォルトでオン):子がまだある親の行を削除するとエラー1451で失敗します。

SQL Server

RESTRICTはありません:ビルダーはNO ACTIONを書き、このエンジンではそれが同じ働きをします。外部キーは別のデータベースを指せず、SQLプレビューがコメントでそう伝えます。

リストのキーを右クリックすると(iPadでは長押し)、編集または削除できます。既存のキーを編集すると、それを削除して作成し直します。ビルダーは明示的な名前を付けたCONSTRAINTを生成するので、後でその名前で削除できます。

ClickHouse

ClickHouseには「外部キー」タブがありません:エンジンにないからです。

Oracle

OracleにあるのはON DELETE CASCADEとON DELETE SET NULLだけです:RESTRICTやNO ACTIONでは、ビルダーは句を書きません。それがエンジンのデフォルトの動作です。ON UPDATEは存在せず、タブにも表示されません。外部キーは、そのテーブルに対するREFERENCES権限があれば、別のスキーマのテーブルを指せます。

Apple Vision Pro:行を見てピンチしたまま保持すると、コンテキストメニューが開きます。

キーワード: FK、外部キー、CASCADE、RESTRICT、参照整合性

テーブルのオプション

テーブル全体に属するもの:コメントと、エンジンにあればストレージエンジン、行フォーマット、文字セット、照合順序。

場所: テーブルビルダー › 「オプション」タブ

「オプション」タブには、テーブル全体に属するものがあります。

MySQLMariaDBAurora

ストレージの「エンジン (ENGINE)」、「行フォーマット (ROW_FORMAT)」、テーブルの「文字セット」と「照合順序」(文字セットを変えると、そのセットの最初の照合順序が選ばれます)、そして「テーブルのコメント」です。「(テーブルを継承)」のままのテキスト列は、テーブルの文字セットを使います。

MySQLMariaDBAurora

行フォーマットはテーブルを作成するときに選びます:既存のテーブルではタブに表示されません。ビルダーがそれを変更しないからです。文字セットと照合順序のリストはサーバから取得し、ストレージエンジンのリストは固定で、InnoDBが先頭です。

TiDB

テーブルの「文字セット」と「照合順序」、そして「テーブルのコメント」です。「エンジン (ENGINE)」と「行フォーマット (ROW_FORMAT)」はありません:TiDBはそれらを受け付けますが、何もしません。

SQL ServerPostgreSQL

このエンジンにはテーブルごとのストレージエンジン、行フォーマット、文字セットがないので、タブにあるのは「テーブルのコメント」だけです。

SQL Server

コメントは拡張プロパティMS_Descriptionとして書き込まれます。

PostgreSQL

コメントはCOMMENT ON TABLEで書き込まれます。

ClickHouse

ClickHouseでは、テーブルを作成するとき、タブに「キー」セクションがあり、選んだエンジンに応じてORDER BY、PARTITION BY、PRIMARY KEY、TTL、SETTINGSが入ります:MergeTreeファミリーにはそれらがあり、MemoryやLogにはありません。ORDER BYが空なら、主キーとしてマークした列が使われます。どちらもなければ「テーブルを作成」がオフになり、フッタにその理由が表示されます。既存のテーブルを編集するときはこのセクションは表示されません。エンジンとキーは後から変更できないからです。最後の注記が、エンジンにないものを伝えます:外部キー、自動増分、一意インデックス、文字セットです。

Oracle

このエンジンにはテーブルごとのストレージエンジン、行フォーマット、文字セットがないので、タブにあるのはCOMMENT ON TABLEで書き込まれる「テーブルのコメント」だけです。

キーワード: オプション、ENGINE、InnoDB、ROW_FORMAT、文字セット、照合順序、コメント