サーバー制約の処理
大抵のリレーショナル データベース管理システムは、データの整合性を保持するために、それらテーブルに対する制約を実装しています。制約は、テーブルおよび列におけるデータ値を統制、または、異なるテーブル上にある列の間でのデータ関連を統制するためのルールです。たとえば、大抵の SQL-92 準拠のリレーショナル データベースは、次の制約をサポートしています:
- NOT NULL - 列に渡される値に、必ず値が入っていることを保証する
- NOT NULL UNIQUE - 列値が値を持ち、かつ、その値が他のレコードのその列にある他の値と重複していないことを保証する
- CHECK - 列に渡された値が、特定の範囲内に収まっているか、許容される値のうちのいずれかであることを保証する
- CONSTRAINT - 複数の列に適用される、テーブル全体をチェックする制約
- PRIMARY KEY - インデックス付けのために、テーブルの主キーとして 1 つまたは複数の列を設計する
- FOREIGN KEY - 他のテーブルを参照するあるテーブル内の 1 つまたは複数の列を設計する
メモ: このリストは、お互いが排他的なものではありません。お使いのデータベース サーバーにおいて、これらの制約の一部またはすべてを、データベースの一部または全体においてサポートすることができますし、さらに補足的な制約をサポートすることも可能です。サポートされている制約の詳細については、お使いのサーバーのドキュメントをを参照してください。
データベース サーバー制約は、従来のデスクトップ データベース アプリケーションが管理するデータ チェックの多くと、明らかに重複しています。多層データベース アプリケーションでは、アプリケーション サーバーまたはクライアント アプリケーションのコードにおいて、同じ制約を記述しなくても、サーバー制約を利用することができます。
プロバイダがBDE 対応データセットを利用している場合、Constraints プロパティを利用することで、サーバー制約を複製し、クライアント データセットとの間でやり取りするデータに適用することができます。Constraints が True(デフォルト)の場合、ソース データセットに格納されているサーバー制約は、データ パケットに含まれ、データの更新を試みるクライアントに影響を与えます。
警告: プロバイダは、クライアント データセットへ制約情報を渡す前に、データベース サーバーからその制約を受け取らなければなりません。
クライアント データセットに送るデータに、サーバー制約を適用したくない場合もあるでしょう。たとえば、クライアント データセットがパケット内のデータを受け取り、さらにレコードをフェッチする前に、レコードのローカル更新を許可する場合、一時的に不完全なデータセットが発生することにより発生する可能性のある、サーバー制約を無効にしておく必要があります。プロバイダからクライアント データセットへの制約のレプリケーションを抑制するには、Constraints を False に設定します。クライアント データセットは、メソッド DisableConstraints および EnableConstraints を使用して、制約を有効/無効にできることを覚えておいてください。クライアント データセットからの制約の有効化/無効化の詳細については、「サーバーからの制約の処理」を参照してください。