Postgresqlでは少なくともtable inheritanceでこれを行うことができます。
この特定のクライアントに対して、必要な制約を含む継承テーブルを定義できます。
次の例を考えてみます。この場合
psql=> CREATE TABLE a(client INT NOT NULL, id SERIAL, foo TEXT);
CREATE TABLE
psql=> CREATE TABLE b(foo TEXT NOT NULL, CHECK (CLIENT=1)) INHERITS (a);
NOTICE: moving and merging column "foo" with inherited definition
DETAIL: User-specified column moved to the position of the inherited column.
CREATE TABLE
psql=> INSERT INTO b(client,foo) VALUES (1,'a');
INSERT 0 1
psql=> INSERT INTO b(client,foo) VALUES (1,NULL);
ERROR: null value in column "foo" violates not-null constraint
DETAIL: Failing row contains (1, 2, null).
テーブル「b」は 'から継承するが、非NULL制約を含む列「FOO」の異なる定義を有します。また、チェック制約を使用して、クライアント1のレコードのみがこのテーブルに入ることを確認しました。
これを行うには、アプリケーションを更新してクライアントレコードを正しい表に挿入するか、自動的にそれを実行するトリガーを作成する必要があります。それを行う方法の例は、partitioningのマニュアルのセクションで与えられています。
あなたのアプリケーションは、親テーブル(私の例では 'a')に対してクエリを行い、すべてのクライアント(子テーブル内のすべてを含む)のレコードを取得できます。
ユーザーがDBに書き込む関数を使用している場合、データが 'IS NULL'と入力されているかどうかを確認するサブ関数を書くことができます –
3つの異なるデータベースにはどのようなコードが必要ですか? –
@GordonLinoff私たちはSQL Serverを持つ顧客とOracleを持つ顧客があります。 PostgreSQLを使用して顧客を獲得した場合に備えてpostgresqlが必要でした。これら3つのデータベースのみをサポートしています。 – Luke101