A 列是 A 表的 PK。B 列是 B 表中的列。C 列是 B 表的 FK,引用了 A 表中的 A 列。
我可以定义一个约束,规定 B 列和 C 列必须是唯一的吗?例如,我不希望 A 和 B 中的相同值组合出现任何重复。
这是我正在考虑的一种可能性:
unique_id varchar2 GENERATED ALWAYS AS (B || '-' || FK that references column A) VIRTUAL
CONSTRAINT unique_id UNIQUE
如果我采用这个解决方案,我会对一件事感到困惑。文档说:“索引组织表、外部表、对象表、簇表或临时表不支持虚拟列。”显然,因为它们不像其他列那样存储。如果我想让我的表集群化,这会是一个问题吗?
是的,您可以在两列上创建
UNIQUE
约束。例如:
create table table_a (
a number(6) primary key not null
);
create table table_b (
b number(6) not null,
c number(6) not null,
constraint uq1 unique (b, c),
constraint fk1 foreign key (c) references table_a (a)
);
然后,如果您尝试插入,它将因重复而失败。例如:
insert into table_a (a) values (1);
insert into table_a (a) values (2);
insert into table_b (b, c) values (10, 1);
insert into table_b (b, c) values (10, 1); -- fails!
insert into table_b (b, c) values (10, 2);
请参阅 db<>fiddle 处的运行示例。
问题是您是否可以为不同表的两列创建唯一约束。我很确定这个问题的答案是否定的。