在 Oracle 数据库中强制实施逻辑约束的选项

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

假设我有一对表 A 和 B,它们处于标准的一对多关系,其中 B 包含 A 的外键。我想引入一个具有多对多关系的表 C B,但有一个限制:对于 C 中的任何给定记录,B 中的所有关联记录都与 A 中的单个记录相关联。 C 和 B 之间的简单链接表提供了所需的多对多关系,但它无法阻止 C 中的单个记录与绑定到不同 A 的 B 相关联。我能想到的在数据库中完成此操作的唯一方法是创建一个触发器来检查和强制执行条件。还有其他适用的技术吗?

database oracle
1个回答
0
投票

在表

a
b
以及用于定义
c
b
之间的多对多关系的桥接表中包含表
c
的主键:

CREATE TABLE a (id NUMBER PRIMARY KEY);

CREATE TABLE b (
  id   NUMBER PRIMARY KEY,
  a_id REFERENCES a (id),
  UNIQUE (id, a_id)
);

CREATE TABLE c (
  id   NUMBER PRIMARY KEY,
  a_id REFERENCES a(id),
  UNIQUE (id, a_id)
);

CREATE TABLE bc_bridge (
  a_id,
  b_id,
  c_id,
  FOREIGN KEY (a_id, b_id) REFERENCES b (a_id, id),
  FOREIGN KEY (a_id, c_id) REFERENCES c (a_id, id)
);

那么表

c
可以与许多
b
相关(反之亦然),但这些表中的相关行始终仅与单个
a
相关。

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