Oracle - 无法创建所需的外键约束

时间:2013-12-11 16:52:40

标签: database oracle foreign-key-relationship

假设以下Oracle表:

table master (
  name    number(18) not null,
  version number(5)  not null,
  constraint master_uq unique(name,version)
)

table child1 (
  master_name not null,
  ....
)

table child2 (
  master_name not null,
  ....
)
.
.
.
table childN (
  master_name not null,
  ....
)

childX表中的列master_name引用主表名称列。

规则是:

  • 主表中的每个名称都保证有一行 version = 1
  • 主表中的每个名称也可能有其他版本,即。 2,3等等
  • childX表引用该名称,但对该版本不感兴趣。

这意味着在每个tableN中,可以在逻辑上为主表创建以下外键...

foreign key childX_fk(master_name,1) references master(name,version)

不幸的是,尽管Oracle规则中childX中的外键引用了master中的唯一列组合,但Oracle不喜欢childX_fk外键中版本的硬编码1值。

参照完整性能够从各种子表到主表创建外键真的很好,但是我看不到实现这一点的方法。

有没有人有任何想法?

1 个答案:

答案 0 :(得分:1)

您可以使用虚拟列并使用它来引用主列:

create table child1 (
  name    number(18) not null,
  alwaysone number generated always as (case when name1 = name1 then 1 end) virtual,
  foreign key (name,alwaysone) references master(name,version)
);