我有一個類似的問題,我想維護每個公司的物品清單,以及所有公司的全球清單。如果公司編號爲0,則將其視爲全局,並且任何使用該名稱的公司都不能插入新項目。下面的腳本(基於上述解決方案)似乎工作:
drop table if exists blech;
CREATE TABLE blech (
company int,
name_key text,
unique (company, name_key)
);
create or replace function f_foobar(new_company int, new_name_key text) returns bool as
$func$
select not exists (
select 1 from blech b
where $1 <> 0
and b.company = 0
and b.name_key = $2);
$func$ language sql stable;
alter table blech add constraint global_unique_name_key
check (f_foobar(company, name_key)) not valid;
insert into blech values(0,'GLOB1');
insert into blech values(0,'GLOB2');
-- should succeed:
insert into blech values(1,'LOCAL1');
insert into blech values(2,'LOCAL1');
-- should fail:
insert into blech values(1,'GLOB1');
-- should fail:
insert into blech values(0,'GLOB1');
請編輯您的問題,並提供示例數據和可接受和不可接受的記錄。 –
我不明白你爲什麼想要兩張桌子。你不能只擴展當前表來迎合其他屬性嗎? –
我應該如何編輯問題?完整的表格結構不會有幫助,因爲這個問題或多或少是純粹的理論。 – onerror