以下の表は、複数のリレーショナルデータベース管理システム の一般情報と技術情報を比較したものです。詳細については、各製品の記事をご覧ください。脚注で特に明記されていない限り、比較はアドオン、拡張機能、外部プログラムを含まない安定版に基づいています。
オペレーティングシステムのサポート RDBMSが動作できるオペレーティングシステム。
基本的な特徴 基本的なRDBMS機能がネイティブに実装されているかどうかに関する情報。
注記(1): 現在は読み取り未コミットトランザクション分離のみをサポートしています。バージョン1.9ではシリアライズ可能な分離が追加され、バージョン2.0では完全にACID準拠になります。注(2): MariaDBとMySQLは、デフォルトのInnoDBストレージエンジンを通じてACID準拠を提供します。 [ 72 ] [ 73 ] 注記(3): InnoDB 以外のストレージエンジンでは、MySQL ServerはCREATE TABLE文の FOREIGN KEY およびREFERENCES 構文。 [ 74 ] 「 CHECK 句(8.0.16以降) [ 75 ] は、すべてのストレージエンジンのほとんどのコア機能をサポートしています。」注(4): Unicodeのサポートはバージョン10.0で新しく追加されました。注(5): MySQLはMySQL Workbench を介してGUIインターフェースを提供します。注記(6): OpenEdge SQLデータベースエンジンは参照整合性を使用しますが、OpenEdge ABLデータベースエンジンは使用せず、データベーストリガーによって処理されます。
制限 データサイズ制限に関する情報。
注(1): Firebird 2.x の最大データベースサイズは事実上無制限で、既知の最大データベースサイズは 980 GB 以上です。 [ 81 ] Firebird 1.5.x の最大データベースサイズ:32 TB。注記(2): データ型を使用した場合の制限は10 38 DECIMALです。 [ 82 ] 注(3): InnoDBは8,000バイトに制限されています(VARBINARY、、、またはVARCHARを)。 [ 83 ] BLOBTEXT注(4): InnoDBは1,017列に制限されています。 [ 83 ] 注記(6): VARCHAR (MAX) SQL 2005以降で使用してください。 [ 84 ] 注(7): ページサイズが32KBの場合、およびBLOB/CLOBデータがデータベースファイルに格納されている場合。注 (8): Java 配列のサイズ制限として、配列あたり 2,147,483,648 (2 31 CHAR ) オブジェクトが適用されます。この制限は、名前の文字数、テーブルあたりの行数、テーブルあたりの列数、および/あたりの文字数に適用されますVARCHAR。注(9): 日付データ型がないにもかかわらず、SQLiteには日付と時刻の関数が含まれています[ 85 ] 。これは紀元前4714年11月24日から5352年11月1日までのタイムスタンプに対応しています。注記 (10): Informix DATETIME 型は、YEAR から 1/10000 秒までの範囲のみ調整可能です。DATETIME の日付範囲は 0001-01-01 00:00:00.00000 から 9999-12-31 23:59:59.99999 までです。注記(11): バージョン12c以降。以前のバージョンでは最大 4000 B 。 注(12): 0.5 YB の 制限は、バージョン 15.0 以降で単一の Informix サーバー インスタンスのストレージ容量の制限を指します。Informix バージョン 12.10 以降では、シャーディング技術を使用してテーブルを複数のサーバー インスタンスに分散させることができます。分散 Informix データベースには、テーブルまたはデータベースのサイズの上限はありません。注記(13): Informix DECIMAL型は、 10 の範囲で最大32桁の精度をサポートします。 −130 ~ 10 125. 固定精度と可変精度がサポートされています。注(14): LONGLVARCHAR型は最大4TBの文字列をサポートします。
表とビュー 基本的なテーブルやビュー以外で、ネイティブにサポートされているテーブル やビュー に関する情報。
注(1): サーバーは、公開およびプライベート(セッション用)の一時テーブルに使用できるtempdbを提供します。 [ 86 ] 注記(2): マテリアライズド ビューは Informix ではサポートされていません。この用語は、IBM のドキュメントで、ビューのクエリが複雑すぎる場合にそのクエリを実行するために作成される一時テーブルを指すために使用されていますが、たとえば、その更新方法を定義したり、インデックスを作成したりすることはできません。この用語は Informix パフォーマンス ガイドで定義されています。 [ 87 ] 注(4): マテリアライズドビューは、ストアドプロシージャ とトリガーを使用してエミュレートできます。 [ 88 ]
索引 (基本的なB- / B+ツリー インデックス以外の)どのインデックス がネイティブにサポートされているかに関する情報。
注(1): ユーザーはfreeAdhocUDFライブラリまたは同様の関数を使用する必要があります。 [ 123 ] 注記(2): 式ベースのインデックスを使用することで、ほとんどのデータ型に対して実装できます。注(3): 計算列にインデックスを付けることでエミュレートできます[ 124 ] (簡単に更新できません)または「インデックス付きビュー」を使用することでエミュレートできます[ 125 ] (適切な名前のビューでなければ機能しません[ 126 ] )。注 (4): インメモリ ColumnStore インデックス、ハッシュ結合用の一時ハッシュ インデックス、非クラスタ/クラスタ、およびフィル ファクターに使用されます。注(5): InnoDBは必要に応じて適応型ハッシュインデックス[ 127 ] エントリを自動的に生成します。注記(6): Oracle 8i以降では関数ベースのインデックスを使用して実装できますが、インデックスを使用するにはSQLで関数を使用する必要があります。注(7): PostgreSQLの機能インデックスを使用すると、フィールドの順序を反転できます。注(10): 現時点ではB+ツリーと全文のみ。注(11): R-TreeインデックスはLocator付きのベースエディションで利用できますが、一部の機能にはパーソナルエディションまたは空間オプション付きのエンタープライズエディションが必要です。注(12): FOT(Forest of Trees)インデックスは、複数のBツリーで構成されるBツリーインデックスの一種で、マルチユーザー環境での競合を軽減します。 [ 128 ]
データベース機能 注(1): 11gR2で導入された再帰CTEは、CONNECT BYと呼ばれる同様の構造に取って代わります。
その他の物体 ネイティブでサポートされているその他のオブジェクトに関する情報。
注(1): 関数とプロシージャは 、 SQLやPL/SQL などの手続き型言語で記述された内部ルーチンを指します。外部ルーチン は、C、Java、Cobolなどのホスト言語で記述されたルーチンを指します。「ストアドプロシージャ 」は、これらのルーチンタイプを表す一般的な用語ですが、その定義はデータベースベンダーによって異なります。注(2): Derby、H2、LucidDB、CUBRIDでは、ユーザーはJavaで関数 とプロシージャをコーディングします。 注記(3): ENUMデータ型が存在します。CHECK句は8.0.16以降で適用されます。注記(5): InformixはJava、C、C++で記述された外部関数をサポートしています。
アクセス制御 アクセス制御機能に関する情報。
注記(1): ネットワークトラフィックは安全な方法で送信される可能性があります(平文ではなく、一般的にはSSL暗号化)。オプションがデフォルトか、含まれているオプションか、または追加モジュールとして購入する必要があるかを明確にしてください。注(2): パスワードの最小サイズを設定したり、数字や特殊文字の有無などの複雑さを考慮したりするオプションがあります。注(3): セキュリティアップデートはどのように入手できますか?無料でアクセスできますか?ログインが必要ですか?または料金を支払う必要がありますか?Web/FTPポータルまたはRSSフィードを介して簡単にアクセスできますか、それともオフラインアクセス(メールCD-ROM、電話)のみですか?注(4): データベースプロセスはroot/管理者として実行されますか、それとも権限のないユーザーとして実行されますか?デフォルトの設定は何ですか?注(5): バックアップ(ダンプ/リストア権限のみ)、セキュリティ担当者(監査)、管理者(ユーザーの追加/データベースの作成)などの特別な操作を管理するための別のユーザーはありますか?それはデフォルトですか、それともオプションですか?注記(6): コモン・クライテリア認証製品リスト。 [ 185 ] 注(7): FirebirdSQLにはSYSDBAユーザーとDBオーナーしかいないようです。バックアップオペレーターとセキュリティ管理者のための個別の役割はありません。注(8): ユーザーは専用のバックアップユーザーを定義できますが、デフォルトのインストールでは特に何も定義されていません。 [ 186 ] 注記(9): 認証方法。 [ 187 ] 注記(10): Informix Dynamic ServerはPAMおよびその他の設定可能な認証をサポートしています。デフォルトではOS認証を使用します。注記(11): 認証方法。 [ 188 ] 注記(12): Pervasive AuditMasterを使用する場合。注(13): Polyhedraではユーザーベースのセキュリティはオプションですが、有効にすると監査機能を備えたロールベースのモデルに拡張できます。 [ 189 ]
データベースとスキーマ(用語解説)SQL仕様では「SQLスキーマ」の定義が定められていますが、データベースによって実装方法が異なります。さらに混乱を招くことに、その機能は親データベースの機能と重複する場合があります。SQLスキーマは、データベース内の単なる名前空間です。 この名前空間内の要素は、メンバー 演算子 ドット「. 」を使用して参照されます。 これは、すべての実装に共通する特徴のようです。
真の完全修飾クエリ(データベース、スキーマ、テーブルすべてを含む)の 例は次のとおりです。SELECT * FROM database . schema . table
スキーマとデータベースの両方を使用して、1 つのテーブル「foo」を、同じ名前の別のテーブル「foo」から分離することができます。以下は擬似コードです。
SELECT * FROM database1 . foo (データベースとテーブル間に明示的なスキーマがない場合)SELECT * FROM database2 . foo SELECT * FROM [ database1 .] default . foo vs. (明示的なデータベース接頭辞なし)SELECT * FROM [ database1 .] alternate . foo ここで問題となるのは、以前MySQLを 使用していたユーザーが、1つのプロジェクトに対して複数のデータベースを作成してしまうことです。この点において、MySQLデータベースはPostgreSQLスキーマと機能的に類似しています。PostgreSQLは、MySQLが備えているような既製のクロスデータベース機能(マルチテナンシーを優先)を意図的に欠いているからです。逆に、PostgreSQLは クロステーブル、クロススキーマの実装に関する仕様をより多く適用し、将来のクロスデータベース機能のための余地を残しています。
MySQLは内部的にスキーマ とデータベース CREATE SCHEMAをエイリアス化するため、とCREATE DATABASEが類似しています。したがって、MySQLはクロスデータベース機能を実装し、スキーマ機能を完全に省略し、同様の機能をデータベースの実装に組み込んでいると言えます。要約すると、PostgreSQLはデータベースを厳密に分離することでスキーマとマルチテナンシーを完全にサポートしており、MySQLがデータベースで持つ一部の機能が欠けています。一方、MySQLは標準スキーマのサポートすら試みていません。
Oracle には独自の方式があり、ユーザーの作成はスキーマの作成と同義です。したがって、データベース管理者は PROJECT というユーザーを作成し、次に PROJECT.TABLE というテーブルを作成できます。ユーザーはスキーマ オブジェクトなしで存在できますが、オブジェクトは常に所有者に関連付けられます (ただし、その所有者はデータベースに接続する権限を持っていない場合があります)。「すべて共有」のOracle RAC アーキテクチャでは、同じデータベースを複数のサーバーで同時に開くことができます。これは、異なるサーバーで使用するためにデータをコピーするレプリケーションとは独立しています。Oracle の実装では、「データベース」はデータを含むファイルのセットであり、「インスタンス」はデータベースにアクセスするためのプロセス (およびメモリ) のセットです。
Informixは、MySQLなどのサーバーインスタンス内で複数のデータベースをサポートしています。DDLCREATE SCHEMAステートメントを単一の単位にグループ化する構文をサポートしており、スキーマの一部として作成されたすべてのオブジェクトを単一の所有者として作成できます。Informixは、ANSIモードと呼ばれるデータベースモードをサポートしており、同じ名前でも異なるユーザーが所有するオブジェクトを作成できます。
PostgreSQL やその他のデータベースには、外部スキーマのサポートがあります。これは、 ISO/IEC 9075-9 ( SQL:2008の一部として公開) で定義されているように、他のサーバーからスキーマをインポートする機能です。これは、別のデータベースまたは別のサーバー インスタンスに格納されているデータにアクセスする場合、SQL 仕様に従ってデータベース内の他のスキーマと同じように表示されます。インポートは、外部スキーマ全体として行うことも、その外部スキーマに属する特定のテーブルのみとして行うこともできます。[ 190 ] ISO/IEC 9075-9 のサポートは、スキーマに関する 2 つの競合する哲学の間のギャップを埋めますが、MySQL と Informix はデータベース間の暗黙的な関連付けを維持します。一方、ISO/IEC 9075-9 では、そのようなリンクは明示的である必要があります。
外部リンク SQL標準に準拠した様々なSQL実装の比較。Oracle、Db2、Microsoft SQL Server、MySQL、PostgreSQLが含まれます。(2007年6月8日) SQL92規格 SQL WorkbenchによるDMBSの比較