我可以在 Oracle 中对 2 个不同表中的 2 列的组合进行唯一约束吗?

问题描述 投票:0回答:2

A 列是 A 表的 PK。B 列是 B 表中的列。C 列是 B 表的 FK,引用了 A 表中的 A 列。

我可以定义一个约束,规定 B 列和 C 列必须是唯一的吗?例如,我不希望 A 和 B 中的相同值组合出现任何重复。

这是我正在考虑的一种可能性:

  1. 创建唯一的 ID 列。

  unique_id varchar2 GENERATED ALWAYS AS (B || '-' || FK that references column A) VIRTUAL

  1. 将其设置为唯一

 CONSTRAINT unique_id UNIQUE

如果我采用这个解决方案,我会对一件事感到困惑。文档说:“索引组织表、外部表、对象表、簇表或临时表不支持虚拟列。”显然,因为它们不像其他列那样存储。如果我想让我的表集群化,这会是一个问题吗?

sql oracle oracle-sqldeveloper
2个回答
1
投票

是的,您可以在两列上创建

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 处的运行示例。


0
投票

问题是您是否可以为不同表的两列创建唯一约束。我很确定这个问题的答案是否定的。

© www.soinside.com 2019 - 2024. All rights reserved.