【发布时间】:2012-08-01 19:22:04
【问题描述】:
我使用 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
有没有办法解决这个问题?
上面的模型代表了case的情况。
- 客户可以是普通人,也可以是公司
- 如果是普通人,“legal_entity”表中不会有FK。
- 如果是普通人,她应该在“user_client”表中只有一条记录。
with index 没有,但是有什么办法可以解决这个问题吗?...
脚本生成表格:
-- 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)
);
【问题讨论】:
-
请给出实际的表定义而不是文字描述。
-
#Done - 希望对您有所帮助。
-
对不起,我不看图。我读过 SQL。
-
太棒了!现在编辑问题并添加脚本来创建表格。
-
你的答案也可能被编辑除了模型是一样的,不同的是现在有一个上下文。
标签: sql database postgresql constraints