我有表代表某些公司的配置:
id
config_id
company_id
表中的记录表示为实例1的公司启用了实例1号的配置。如果company_id为空 - 这意味着为所有公司启用了配置。
我需要为给定的config_id创建约束,只有一条记录带有company_id = null或多个,但唯一的company_id不为空。
这样的事情无法解决问题:
CREATE UNIQUE INDEX config_unique_all_companies
ON company_config_relations (config_id)
WHERE company_id IS NULL
CREATE UNIQUE INDEX config_company_unique
ON company_config_relations (config_id, company_id)
WHERE company_id IS NOT NULL
答案 0 :(得分:0)
尝试以下方法:
CREATE UNIQUE INDEX config_unique_idx
ON company_config_relations (config_id, company_id)
WHERE config_id IS NOT NULL AND company_id IS NOT NULL;
CREATE UNIQUE INDEX config_unique_companies_idx
ON company_config_relations (company_id)
WHERE config_id IS NULL;
CREATE UNIQUE INDEX config_unique_default_config_idx
ON company_config_relations (COALESCE(config_id, 0))
WHERE company_id IS NULL AND config_id IS NULL;
最后一个是最有趣的一个。它创建一个只包含一个具有常量值的元素的索引。 COALESCE(config_id, 0)
始终为0
。这是一个创建常量索引值的技巧,因为... ON company_config_relations (0) ...
将不起作用。