PGSQLを使用して、以下のインデックスを追加してみます。
CREATE UNIQUE INDEX fk_client ON user_client (fk_client) WHERE fk_client NOT IN(SELECT fk_client FROM legal_entity);
しかし...インデックスの作成でサブクエリを実行することが許可されているため、それは不可能です。
次のエラーが発生します。
ERROR: cannot use subquery in index predicate
この問題を解決する方法はありますか?
上記のモデルは、ケースの状況を表しています。
- クライアントは普通の人でも会社でも構いません
- 普通の人の場合、彼女は「legal_entity」テーブルにFKを持ちません。
- 普通の人の場合、彼女は「user_client」テーブルに1つのレコードのみを含める必要があります。
インデックス付きではありませんが、この問題を解決する方法はありますか?...
スクリプトはテーブルを生成します:
-- user is a special word, then renamed to users
CREATE TABLE users (
id_user INT,
name VARCHAR(50) NOT NULL,
CONSTRAINT user_pkey PRIMARY KEY (id_user)
);
CREATE TABLE client (
id_client INT,
CONSTRAINT client_pkey PRIMARY KEY (id_client)
);
CREATE TABLE legal_entity (
fk_client INT,
federal_id VARCHAR(14) NOT NULL,
CONSTRAINT legal_entity_pkey PRIMARY KEY (fk_client),
CONSTRAINT legal_entity_fkey FOREIGN KEY (fk_client) REFERENCES client (id_client)
);
CREATE TABLE user_client (
fk_client INT,
fk_user INT,
CONSTRAINT user_client_pkey PRIMARY KEY (fk_client, fk_user),
CONSTRAINT user_client_fkey_1 FOREIGN KEY (fk_client) REFERENCES client (id_client),
CONSTRAINT user_client_fkey_2 FOREIGN KEY (fk_user) REFERENCES users (id_user)
);