5

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

4

5 に答える 5

8

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

于 2008-09-01T04:15:44.357 に答える
5

これは「ステルスロックイン」の一形態です。Joelはここで非常に詳細に説明します。

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

一方で、脳の半分を持っている人は誰でも独自の部分を抽象化する傾向があるか、それがひどくなりすぎるとロックインを完全に回避する傾向があるため、それはかなり近視眼的です。

于 2008-09-01T04:17:30.653 に答える
5

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

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

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

于 2008-09-04T00:37:54.620 に答える
4

John: この標準は、ID 列、シーケンス、トリガー、ルーチン、アップサートなど、実際には多くの主題をカバーしています。これが、SQL 標準への準拠が一般的にやや低い理由である可能性があります。

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

個人的には、一部の ISO 標準 (SQL 標準など) の閉鎖的な性質が問題の一部であると考えています。彼らは何を求めたらよいかわからないからです。

于 2008-09-03T23:28:53.193 に答える
2

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

データベースの非移植性は最悪ですが、さらに悪化する可能性があります。

于 2008-09-01T12:20:04.893 に答える