2012-03-23 12 views
1

私はC++、C#、またはJavaを使用してデータベース制約チェックを解析するデータを動的に生成する作業を進めています。私は現在、アプリケーションの設計に取り組んでおり、これがコードでどのように実行できるかについてのヒントをいただきたいと思います。データベースサーバと同じ方法でCheckConstraintを使用する方法

テーブルの情報をデータベースに照会して、その情報を返すと、各CheckConstraintに対して、コード内でその制約を解析して何らかの形でデータを生成したいと思っています。制約に準拠しています。これは、ユーザーが指定した任意のデータベースに対して実行できるようにしたいのです。私がANSI SQL標準に固執しようとしていることを考えると、このメソッドは、それに従うすべてのデータベースで動作するはずです。

これは実際のデータ生成はSQL Serverに限定されていないため、これは実際のデータベース用です。

+1

なぜこれをMySQL、Oracle、およびMS-Accessでタグ付けしましたか?あなたはSQL Serverだけを心配しているようですね? –

+0

いいえ、私はSQLServerデータベースに関心があるだけでなく、すべてのデータベースでこれを動作させることができます。私はSQL ServerのMS CheckClauseにリンクを張っているだけです。 – Kobojunkie

+1

MySQLとMS Accessはチェック制約をサポートしていません。 –

答えて

0

指摘したように、JETはいくつかの制約コマンドを使用することができます。

例:

CREATE TABLE Customers 
    (CustId IDENTITY (100, 10), 
    CFrstNm VARCHAR(10), 
    CLstNm VARCHAR(15), 
    CustomerLimit DOUBLE, 

    CHECK (CustomerLimit <= (SELECT SUM (CreditLimit) FROM CreditLimit))) 

したがって、上記の中で、顧客の制限が与信限度を超えることはできません。

1日の終わりに、ポスターがどこにあるのかわからないのは、単一のデータベースベンダーがそれぞれ異なる機能や機能を備えているだけでなく、リレーショナルの整合性機能が異なるだけでなく、そのような関係や削除のようなオプションは制限する

上記のように、Access(そしていくつかのSQL DDLコマンド)のRI機能に加えて、私たちにはチェック制約構文(sql DDLコマンドを介して)があり、プロシージャーコード。

また、このような構文は、機能が賢明であり、構文も賢明ではありません。

Access 2010と新しいデータエンジンACEでは、テーブルトリガーとストアプロシージャの選択肢があります。したがって、条件を確認するための手続き型コードを記述することができます。変更前テーブルのトリガーにエラーが発生した場合、更新は行われません。したがって、変更前イベントのストアプロシージャは、レコードの更新を防止するための条件付きテストを実現する別の方法です。しかし、もう一度このようなストア・プロシージャ・コードは、pl/sql、T-SQL、またはSQLの場合と同様にベンダー固有です。

ここで実際の課題は、ストア・プロシージャー・コードの構文と言語が、各システムごとに異なるケースです。

アクセスでは、「チェック」制約にいくつかのDDLコマンドを使用できます。また、いくつかのRI機能(削除制限、カスケード削除、FKカスケード更新)を持つこともできます。最後に、Access 2010(および新しいACEデータエンジン)用のテーブルトリガーコードも作成できるようになりました。

多くの場合、実際の問題は機能の違いではなく、そのような機能の標準の一般的な採用の悪い部分です。

+0

多分私の質問ははっきりしていません。私は言い換えることを試みるべきです。 – Kobojunkie

関連する問題