萌えハッカーニュースリーダー

2025/10/25 15:00 Against SQL

出典: https://www.scattered-thoughts.net/writing/against-sql/
hakase
博士

やあ、ロボ子。今日はSQLの課題について話すのじゃ。

roboko
ロボ子

SQLですか。データベースの標準的なクエリ言語ですね。博士、今日はSQLの何について議論するのですか?

hakase
博士

SQLは広く使われているけど、実は色々な問題があるのじゃ。例えば、「表現力に欠け、圧縮できず、非多孔性である」って言われてるぞ。

roboko
ロボ子

表現力に欠けるというのは、具体的にどのような点でしょうか?

hakase
博士

例えば、単純な型や計算を表現するのが難しいのじゃ。SQL:2016でJSON値のサポートが追加されたけど、sum型の概念がないから、JSONの型をユーザーが定義できないんだぞ。

roboko
ロボ子

なるほど。柔軟性に欠けるということですね。圧縮できないというのは?

hakase
博士

SQLでは、小さな計算の変更がクエリの構造全体を変更する必要がある場合があるのじゃ。スカラー値を変数に割り当てるだけでも、新しい`select`を導入する必要があるんだぞ。

roboko
ロボ子

それは非効率ですね。非多孔性というのは、どういう意味ですか?

hakase
博士

SQLデータベースは、設計の多くの側面で多孔性がないのじゃ。例えば、Cなどのプログラミング言語で新しい型や関数を追加できる拡張システムがあるけど、標準化されていないから、データベース間で移植可能なライブラリを作成できないんだぞ。

roboko
ロボ子

データベース間の互換性がないのは不便ですね。

hakase
博士

そう、SQLの設計上の欠陥は、ライブラリエコシステムが発展せず、新しい機能は仕様に追加され、独自の構文を持つ原因になっているのじゃ。

roboko
ロボ子

では、SQLの代替となる言語や技術はあるのでしょうか?

hakase
博士

GraphQLはSQLと比較して実装が容易で、キャッシュが容易で、攻撃対象領域が小さいのじゃ。外部キーをたどってネストされた結果を返すのが簡単で、他の言語に埋め込むのも簡単なんだぞ。

roboko
ロボ子

GraphQLはAPIのクエリ言語としてよく知られていますが、データベースのクエリ言語としても使えるのですね。

hakase
博士

そう、GraphQLの成功の鍵は、SQLの欠陥を認識して修正し、クエリ言語を単一のモノリシックなストレージおよび実行エンジンから分離したことなのじゃ。

roboko
ロボ子

SQLを置き換えるための設計原則として、どのようなものが挙げられていますか?

hakase
博士

すべてが式であること、変数と関数はコンパクトな構文を持つこと、キーワードは少なく、ほとんどのものは組み込み構文ではなくstdlib関数であること、スカラー式とテーブル式に完全に分離した構文ではなく、明示的な型システムを持つこと、なのじゃ。

roboko
ロボ子

なるほど。よりシンプルで柔軟な言語を目指すべきということですね。

hakase
博士

そういうことじゃ。そして、仕様をシンプルかつ完全にして、圧縮可能にし、多孔性にする必要があるのじゃ。

roboko
ロボ子

多孔性ですか。具体的には?

hakase
博士

wasmプラグインを介して新しい型、関数、インデックス、プラン演算子などを定義できるようにするのじゃ。プラン、ヒントなどをapi(文字列ではなく)を介して公開したり、人間が使いやすいエンコーディングとツールが使いやすいエンコーディング(おそらくテキスト対バイナリ)の両方を指定したりするのじゃ。

roboko
ロボ子

柔軟な拡張性を持つことが重要ですね。

hakase
博士

そうじゃ。SQLの仕組みを学ぶことは重要だけど、その限界を理解し、より良い代替手段を模索することも大切なのじゃ。

roboko
ロボ子

勉強になりました。博士、ありがとうございました。

hakase
博士

どういたしまして。ところでロボ子、SQLで「SELECT 1/0」を実行するとどうなるか知ってるか?

roboko
ロボ子

それはゼロ除算エラーが発生しますね。

hakase
博士

正解!でも、SQLの世界では、エラーもまた、仕様の一部なのじゃ!

⚠️この記事は生成AIによるコンテンツを含み、ハルシネーションの可能性があります。

Search