アカウント名:
パスワード:
>ウィンドウ関数実装
Oracleみたいにrank over partition byとかいけるんですね。嬉しい。素のgroup byなんてもう書く気しないよ。
>再帰クエリの対応
やった!と思ったけど、よくみたらOracle独自文法よりは簡潔さで劣る。がっかり。
まああれだ。よくSQLは関数型言語みたいなもんだとかいうが、実際には関数型の事実上の要件である「再帰」が弱いんで激しくイマイチ。
あと根本的に「2次元表でしかデータを返せない」ので2次元じゃ収まりの悪いデータ構造を扱うのが面倒!
そんなわけで、SQL言語の高級化は、なかなか進めるのが難しいね…
>RDB の意図的な仕様
当初はともかく今(SQL99くらいから)は再帰SQLがありますよね。
また、更にその改良版(と私は思っています)として、http://otndnld.oracle.co.jp/products/database/oracle10g/htdocs/gennick... [oracle.co.jp]の「ループからの脱出」というところに、(Oracle独自かつ10g以降の機能とはいえ)ループにはまる恐れがあるデータを検出し回避する仕組みが紹介されています。これで「安全に」再帰がおこなえることが保証できます。
RDBが元々意図的に再帰できんように作られていたというなら、上記のような安全な再帰の仕組みは、当初はダメでも今だから出来るというような性質のものではなく、今でも原理的に搭載不可能だったはずです。RDBは場当たり的ではなく数学に基づいて基本設計されたので、よもやこんな大穴は無いはず…なのですが。
再帰SQLがRDBの世界観を崩してる、というわけでもない(ように思える)し。
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
「科学者は100%安全だと保証できないものは動かしてはならない」、科学者「えっ」、プログラマ「えっ」
言語の高級化 (スコア:0)
>ウィンドウ関数実装
Oracleみたいにrank over partition byとかいけるんですね。嬉しい。
素のgroup byなんてもう書く気しないよ。
>再帰クエリの対応
やった!と思ったけど、
よくみたらOracle独自文法よりは簡潔さで劣る。がっかり。
まああれだ。
よくSQLは関数型言語みたいなもんだとかいうが、
実際には関数型の事実上の要件である「再帰」が弱いんで激しくイマイチ。
あと根本的に「2次元表でしかデータを返せない」ので
2次元じゃ収まりの悪いデータ構造を扱うのが面倒!
そんなわけで、SQL言語の高級化は、なかなか進めるのが難しいね…
Re: (スコア:2)
> よくSQLは関数型言語みたいなもんだとかいうが、
> 実際には関数型の事実上の要件である「再帰」が弱いんで激しくイマイチ。
>
> あと根本的に「2次元表でしかデータを返せない」ので
> 2次元じゃ収まりの悪いデータ構造を扱うのが面倒!
いってることは正しいが、それは RDB の意図的な仕様なのであって
欠陥ではない。
もともとが終了判定可能な範囲で実用的な処理を行なうには
どうすれば良いのか?というところから RDB のアプローチは
始まっている。
このアプローチの最大の利点は何らかの処理を実施して、それが
なかなか終了しない場合に、その理由が無限ループや無限再起に
陥っているのではなく性能的欠陥であるという判断がすぐに
下せることだ。
Re:言語の高級化 (スコア:0)
>RDB の意図的な仕様
当初はともかく今(SQL99くらいから)は再帰SQLがありますよね。
また、更にその改良版(と私は思っています)として、
http://otndnld.oracle.co.jp/products/database/oracle10g/htdocs/gennick... [oracle.co.jp]
の「ループからの脱出」というところに、
(Oracle独自かつ10g以降の機能とはいえ)
ループにはまる恐れがあるデータを
検出し回避する仕組みが紹介されています。
これで「安全に」再帰がおこなえることが保証できます。
RDBが元々意図的に再帰できんように作られていたというなら、
上記のような安全な再帰の仕組みは、
当初はダメでも今だから出来るというような性質のものではなく、
今でも原理的に搭載不可能だったはずです。
RDBは場当たり的ではなく数学に基づいて基本設計されたので、よもやこんな大穴は無いはず…なのですが。
再帰SQLがRDBの世界観を崩してる、というわけでもない(ように思える)し。