「ヌルとバッグを廃止せよ」—Relの設計者がSQLの根本欠陥に挑む

Time to Move On: Querying Without Nulls and Bags

「ヌルとバッグを廃止せよ」—Relの設計者がSQLの根本欠陥に挑む

SQLは宣言的で最適化可能な言語として成功したが、ヌルとバッグ(重複行)という設計上の欠陥を抱えている。著者らは、リレーショナルプログラミング言語Relの開発経験から、完全正規化された関係に基づく言語が実装・展開可能であると主張する。ヌルとバッグを正当化する理由は精査すると消え去り、これらを排除することで新たな機会が生まれると論じる。

我々は、ヌルとバッグを正当化する理由は、より詳しく検討すると蒸発してしまうと主張する。
  1. mamcx

    良い点もあるが、私がRDBMSを構築するチームにいた時に気づいた大きな問題が2つあると思う。

    * またしてもnullの最善の解決策である代数的データ型を無視している。これがあれば多くの問題は自動的に解決する。

    * バッグに対する反論:

    論文の最良のアイデアは、RDBMSが実際には内部的に異なるデータ構造と時間表現を使用しており、それはユーザーには関係ないという点だ。正しい。

    そして、バッグをユーザーに提示すべきではないという結論に飛躍するが、表示する必要があることは認めている。

    これは間違いであり、常に見落とされている主な理由は、2つの同一の値が存在することは間違いだと仮定していることだ。

    「ジョン、ジョン」という2人の別々の人物がいるかもしれないが、現時点では区別する情報がなく、IDを追加しても役に立たない。それでも、このデータはそのまま正しい。

    言語はこれに対処できるようにしなければならない。配列言語、手続き型、関数型、命令型、宣言型などができるのに、リレーショナルだけができないと主張するのは馬鹿げている。

    言語が純粋性のために意図的に制限されていると言うのは、確かに一部のケースでは理想的だが、その純粋性はエンジンやコンパイラが追跡すべきものであり、私のデータを歪めるべきではない。

    そして、バッグを持つことのパフォーマンスが無視されるところは簡単に反論できる:DBMSを実装してプロファイリングしてみればいい。

    追伸:セットが多くの利点をもたらすのは事実で、場合によっては理想的だ。しかし、現実世界に直面するとすぐに、両方が必要だとわかる。Bツリーだけでは不十分で、ハッシュベースのインデックスが必要になるのと同じだ。

  2. bbkane

    不公平かもしれないが、要旨を読んだ後の最初の感想は「ああ、またか」だった。

    SQLを修正すると主張する言語はいくつかあるが、私の知る限り(反例があれば是非知りたい)、適切な後継者と呼ばれるほど広く採用されたものはない。

    推測できる理由:

    - SQLは50年にわたって定着している。すべてのRDBMSがSQLを話す!多くの監視システムもSQLを話す!後継言語には、既存のシステムと一緒に使えるように、優れた相互運用性のストーリーが必要だ。

    - SQLは日常的なタスクには十分だ。そして最近では、再帰クエリやウィンドウ関数で迷子になる頃には、LLMに助けを求めることができる。後継言語は、IDEサポートや開発者/エージェント体験の他の部分で勝てるかもしれない。

    後継言語はまた、SQLの一部(通常はクエリだけで、INSERTやUPDATEは含まない)しか置き換えない傾向がある。PRQLはそうだと思う(これも間違っているなら是非訂正してほしい)。そうなると、開発者は2つの言語を学ばなければならないのか?

    つまり、後継言語はSQLの意味論的な問題を修正するだけでは成功できず、大規模なエコシステム(そしておそらく政治的な)ステップアップも提供しなければならないということだ。この要旨にはそのようなものは見当たらず、私の興奮を殺いだ。

  3. esafak

    彼らの提案:Rel: A Programming Language for Relational Data

    https://dl.acm.org/doi/10.1145/3722212.3724450

    https://docs.relational.ai/build/tutorials/meet-pyrel/

この日のほかの記事

2026-08-13