「ヌルとバッグを廃止せよ」—Relの設計者がSQLの根本欠陥に挑む
Time to Move On: Querying Without Nulls and Bags

SQLは宣言的で最適化可能な言語として成功したが、ヌルとバッグ(重複行)という設計上の欠陥を抱えている。著者らは、リレーショナルプログラミング言語Relの開発経験から、完全正規化された関係に基づく言語が実装・展開可能であると主張する。ヌルとバッグを正当化する理由は精査すると消え去り、これらを排除することで新たな機会が生まれると論じる。
我々は、ヌルとバッグを正当化する理由は、より詳しく検討すると蒸発してしまうと主張する。
HNでの議論
18- mamcx
良い点もあるが、私がRDBMSを構築するチームにいた時に気づいた大きな問題が2つあると思う。
* またしてもnullの最善の解決策である代数的データ型を無視している。これがあれば多くの問題は自動的に解決する。
* バッグに対する反論:
論文の最良のアイデアは、RDBMSが実際には内部的に異なるデータ構造と時間表現を使用しており、それはユーザーには関係ないという点だ。正しい。
そして、バッグをユーザーに提示すべきではないという結論に飛躍するが、表示する必要があることは認めている。
これは間違いであり、常に見落とされている主な理由は、2つの同一の値が存在することは間違いだと仮定していることだ。
「ジョン、ジョン」という2人の別々の人物がいるかもしれないが、現時点では区別する情報がなく、IDを追加しても役に立たない。それでも、このデータはそのまま正しい。
言語はこれに対処できるようにしなければならない。配列言語、手続き型、関数型、命令型、宣言型などができるのに、リレーショナルだけができないと主張するのは馬鹿げている。
言語が純粋性のために意図的に制限されていると言うのは、確かに一部のケースでは理想的だが、その純粋性はエンジンやコンパイラが追跡すべきものであり、私のデータを歪めるべきではない。
そして、バッグを持つことのパフォーマンスが無視されるところは簡単に反論できる:DBMSを実装してプロファイリングしてみればいい。
追伸:セットが多くの利点をもたらすのは事実で、場合によっては理想的だ。しかし、現実世界に直面するとすぐに、両方が必要だとわかる。Bツリーだけでは不十分で、ハッシュベースのインデックスが必要になるのと同じだ。
- bbkane
不公平かもしれないが、要旨を読んだ後の最初の感想は「ああ、またか」だった。
SQLを修正すると主張する言語はいくつかあるが、私の知る限り(反例があれば是非知りたい)、適切な後継者と呼ばれるほど広く採用されたものはない。
推測できる理由:
- SQLは50年にわたって定着している。すべてのRDBMSがSQLを話す!多くの監視システムもSQLを話す!後継言語には、既存のシステムと一緒に使えるように、優れた相互運用性のストーリーが必要だ。
- SQLは日常的なタスクには十分だ。そして最近では、再帰クエリやウィンドウ関数で迷子になる頃には、LLMに助けを求めることができる。後継言語は、IDEサポートや開発者/エージェント体験の他の部分で勝てるかもしれない。
後継言語はまた、SQLの一部(通常はクエリだけで、INSERTやUPDATEは含まない)しか置き換えない傾向がある。PRQLはそうだと思う(これも間違っているなら是非訂正してほしい)。そうなると、開発者は2つの言語を学ばなければならないのか?
つまり、後継言語はSQLの意味論的な問題を修正するだけでは成功できず、大規模なエコシステム(そしておそらく政治的な)ステップアップも提供しなければならないということだ。この要旨にはそのようなものは見当たらず、私の興奮を殺いだ。
- esafak
彼らの提案:Rel: A Programming Language for Relational Data