SQLにANSI標準が存在するにもかかわらず、SQLディストリビューションが非標準であるのはなぜですか?実際にSQLデータベースの仕組みに意味のある違いがあるのでしょうか、それともMS-SQLとPostgreSQLの2つのデータベースだけですか?これらの違いはなぜ生じるのですか?SQLの相違の理由
答えて
「ステルスロックイン」の一種です。ジョエルはここで非常に詳細に入る:
- http://www.joelonsoftware.com/articles/fog0000000056.html
- http://www.joelonsoftware.com/articles/fog0000000052.html
企業はそれらの実装における非標準または奇妙なサポートされていない機能に彼らのビジネス機能を結ぶ結局、これは離れて移動する能力を制限しますベンダーから競合他社へ
一方、半分の脳を持つ人は、あまりにも面倒なことがあれば、専有部分を抽象化したり、ロックインを完全に避けたりする傾向があるため、かなり近視眼的です。
ANSI標準では、コマンドとデータ型のセットが限られています。一度それを越えれば、実装者はそれ自身でいる。また、列の自動インクリメントなど、非常に重要な概念はまったく指定されていません。 SQLiteは最初の非ヌル整数を選択し、MySQLはAUTO INCREMENT
を必要とし、PostgreSQLはシーケンスなどを使用します。これは混乱しており、それはOSSデータベース間だけです! Oracle、Microsoft、およびIBMに、厄介な機能をまとめて決定させてください。
1800には確かに効果的なロックインがあります。しかし、データベースベンダーにとって公平であることから、SQL標準は常に現在のデータベースの機能セットに追いついています。私たちが今日持っているほとんどのデータベースはかなり古代の系譜です。 Microsoft SQL Serverを元に戻すと、70年代に書かれた最初のリレーショナルデータベースの1つであるIngresが見つかると思います。そして、PostgresはもともとIngresの後継者として80年代の同じ人たちによって書かれました。 Oracleは戻ってきて、MySQLがどこに入ったのか分かりません。
データベースの移植性は損なわれますが、それはさらに悪化する可能性があります。
ジョン:実際には、標準では、アイデンティティ列、シーケンス、トリガー、ルーチン、アップなどを含む多くのサブジェクトが対象です。もちろん、これらの標準コンポーネントの多くは最初の実装より遅れて実装されている可能性があります。これがSQL標準への準拠性がやや低い理由です。
Neall:SQLスタンダードが実際に実装されている領域が実際にあります。たとえば、CREATE ASSERTIONを使用するとよいでしょうが、私が知る限り、DBMSはまだアサーションを実装していません。
個人的には、(SQL標準のような)いくつかのISO規格の閉鎖性が問題の一部であると私は信じています。標準がオンラインで容易に入手できない場合、実装者/何を求めているのか分からないためにコンプライアンスを求めている顧客はほとんどありません。
まず、私は、たとえば、ブラウザやオペレーティングシステムのようなデータベースが、非互換性の点ではありません。数時間のトレーニングを受ける人は、SQLデータベースの選択、挿入、削除、更新を開始できます。一方、すべてのブラウザで同じようにレンダリングするHTMLを書くことや、複数のOSのシステムコードを書くことは難しいです。一般に、SQLの違いは、パフォーマンスやかなり難解な機能に関連しています。主な例外は日付形式と関数のようです。
第2に、データベース開発者は、一般に、他の人と製品を差別化する機能を追加するよう動機づけられます。 Oracle、MS SQL Server、MySQLなどの製品は、実際には相互に受粉することはめったにない広大なエコシステムです。私の職場では、OracleとMySQLを使用していますが、必要に応じて約1日で100%Oracleに切り替えることができます。だから私はOracleが各リリースで私たちに与える光沢のあるおもちゃを気にしますが、使用しているMySQLのバージョンはわかりません。 IBM、Microsoft、PostgreSQL、その他は、私たちが懸念している限り存在しないかもしれません。顧客やユーザーを獲得して維持する機能を持つことは、データベース世界での互換性よりもはるかに重要です。
第3に、異なる企業がSQLを別々に実装する正当な理由があります。たとえば、Oracleには、非常に高速かつスケーラブルな一貫性のある読み取りを可能にするマルチバージョン管理システムがあります。他のデータベースにはその機能がありませんが、通常は行の挿入とトランザクションのロールバックが高速です。これはこれらのシステムの基本的な違いです。他のものよりも優れているわけではありません(少なくとも一般的な場合)。データベースエンジンのSQL ontopがその強みを利用し、弱点を最小限に抑えようとすると、驚くべきことではありません。実際、開発者がこれをやっていないのは無責任なことでしょう。
- 1. SQLのdatetimeカラムの相違
- 2. MySQLとSQLの相違
- 3. Prem-SQLとAzure SQLの相違点
- 4. SQL * PlusとSQLローダーの相違点
- 5. 次のコードと、この型キャストが使用される理由の相違点
- 6. SQLの2つのクエリの相違点
- 7. SQLでの列一致データの相違
- 8. localhostと(LocalDb)/ MSSQLLocalDB間のSqlの相違
- 9. バージョン管理のXcodeストーリーボードの相違点
- 10. サブセットの処理 - 配列の相違
- 11. ユニークキーとコンポジットプライマリキーの相違点SQLサーバー
- 12. プロパティの相違代理人とイベント
- 13. IE標準、相違点および相違点の相違点
- 14. スカラーSQL関数とSQLiteの集約SQL関数の相違
- 15. Microsoft AzureポータルのSQLデータベースとSQL Serverの相違
- 16. FilestreamとBLOBのSQL Server(Transact-SQL)の相違
- 17. ロケールによる違いの理由
- 18. 論理SQLと物理SQLの違いは何ですか?
- 19. ブーストバインドリターンタイプの相違
- 20. SQLクエリの順序が間違っている、わからない理由
- 21. 以下の2つのコードの相違点と2つの異なる出力を表示した理由は?
- 22. Visual StudioとSQL Server管理スタジオでSQLデータベースを作成することの相違点
- 23. opencvの色相範囲が0-180°の理由
- 24. SQL Server 2000の2つのデータセットの相違
- 25. 相違
- 26. 相違
- 27. 相違
- 28. 球面の相違
- 29. イメージコンストラクタの相違点
- 30. ベクトルの相違_including_NA
もう1つの理由は、標準ではないのに商品に追加された機能や後で追加された機能と組み合わされて、後で削除することが非常に難しい異なる実装となる後方互換性です(SQL Serverの「CROSS APPLY」 (標準に近い)DB2とPostgresの 'LATERAL'、Oracleの' CONNECT BY'は数年前に再帰的なCTE、さまざまなdbmsの 'LIMIT' /' TOP'/'FETCH FIRST'を追加しました。 –