質問

SQL には ANSI 標準が存在するにもかかわらず、SQL ディストリビューションがこれほど非標準なのはなぜですか?SQL データベースの動作方法には本当に多くの意味のある違いがあるのでしょうか、それとも私が使用している 2 つのデータベースだけなのでしょうか。MS-SQLとPostgreSQL?なぜこのような違いが生じるのでしょうか?

役に立ちましたか?

解決

それは「ステルスロックイン」の一種です。ジョエルはここで詳しく説明しています。

企業は実装時に自社のビジネス機能を非標準の機能やサポートされていない奇妙な機能に結びつけることになり、これによりベンダーから競合他社に移行する能力が制限されます。

一方で、これはかなり近視眼的です。なぜなら、脳が半分しかない人は、プロプライエタリな部分を抽象化したり、ロックインがあまりにもひどい場合には完全に回避したりする傾向があるからです。

他のヒント

ANSI 規格では、限られたコマンドとデータ型のセットのみが指定されています。これらを超えると、実装者は独立します。また、列の自動インクリメントなど、いくつかの非常に重要な概念がまったく指定されていません。SQLite は最初の非 null 整数を選択するだけです。MySQL は必要とします。 AUTO INCREMENT, PostgreSQLではシーケンスなどを使用します。それは混乱しています、そしてそれは OSS データベースの中だけのものです。Oracle、Microsoft、IBM に、難しい部分の機能について共同で決定してもらうようにしてください。

まず、非互換性という点では、データベースはブラウザやオペレーティング システムと同じではないと思います。数時間のトレーニングを受ければ、誰でも SQL データベースで選択、挿入、削除、更新を始めることができます。一方で、すべてのブラウザーで同じように表示される HTML を作成したり、複数の OS 用のシステム コードを作成したりすることは困難です。一般に、SQL の違いはパフォーマンスまたはかなり難解な機能に関連しています。主な例外は日付形式と関数のようです。

第 2 に、データベース開発者は通常、自社の製品を他の開発者と差別化する機能を追加することに意欲的です。Oracle、MS SQL Server、MySQL などの製品は、実際には相互受粉することはほとんどない広大なエコシステムです。私の職場では Oracle と MySQL を使用していますが、必要に応じて、または希望に応じて、おそらく 100% Oracle に約 1 日で切り替えることができます。そのため、Oracle が各リリースで提供するきらびやかなおもちゃにはとても関心がありますが、使用している MySQL のバージョンさえ知りません。IBM、Microsoft、PostgreSQL などは、私たちの知る限り存在しないも同然です。データベースの世界では、顧客やユーザーを獲得し維持するための機能を備えていることが、互換性よりもはるかに重要です。(これは、「ロックイン」の答えを前向きに解釈したものだと思います。)

第三に、企業ごとに SQL を異なる方法で実装する正当な理由があります。たとえば、Oracle には、非常に高速でスケーラブルな一貫した読み取りを可能にするマルチバージョン システムがあります。他のデータベースにはその機能がありませんが、通常は行の挿入やトランザクションのロールバックが高速になります。これがこれらのシステムの根本的な違いです。一方が他方より優れているわけではなく(少なくとも一般的な場合)、異なるだけです。データベース エンジン上の SQL がその長所を利用し、その短所を最小限に抑えようとしても驚くには当たりません。実際、これを行わないのは開発者にとって無責任です。

ジョン:この標準は、実際には、ID 列、シーケンス、トリガー、ルーチン、更新/挿入など、多くの主題をカバーしています。しかし、もちろん、これらの標準コンポーネントの多くは、最初の実装よりも後に導入された可能性があります。これが、一般に SQL 標準への準拠性がやや低い理由である可能性があります。

ニール:実際、SQL 標準が実装よりも進んでいる領域があります。たとえば、CREATE ASSERTION があれば便利ですが、私の知る限り、アサーションを実装している DBMS はまだありません。

個人的には、一部の ISO 標準 (SQL 標準など) の閉鎖的な性質が問題の一部であると考えています。標準がオンラインですぐに入手できない場合、その標準は実装者や計画者に知られる可能性が低く、何を求めればよいのかわからないため、コンプライアンスを要求する顧客が少なすぎます。

1800 が言うように、それは確かに効果的なロックインです。ただし、データベース ベンダーに公平を期すために、SQL 標準は常に現在のデータベースの機能セットに追いつくよう努めています。現在私たちが持っているデータベースのほとんどは、かなり古い系統のものです。Microsoft SQL Server をそのルーツまでたどると、70 年代に作成された最初のリレーショナル データベースの 1 つである Ingres が見つかると思います。Postgres は元々、Ingres の後継として 80 年代に同じ人々によって書かれました。Oracle ははるか昔に遡りますが、MySQL がどこから来たのかはわかりません。

データベースの非移植性は確かに最悪ですが、さらに悪いことになる可能性があります。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top