【问题标题】:Integrity constraints to make sur two columns contain same values for two related tables使sur两列包含两个相关表的相同值的完整性约束
【发布时间】:2025-12-12 07:20:06
【问题描述】:

我的 oracle 数据库中有两个表。

+--------+                     +---------+    
+ data   + --1..0-------0..n --+   PAQ   +  
+--------+                     +---------+

PAQ 有很多数据。

以下是它们的制作示例:

create table data {
data_id NUMBER GENERATED BY DEFAULT AS IDENTITY,
value number,
data_date date,
E_FLAG char,
paq_id number,
primary key(data_id),
foreign key(paq_id) references paq.paq_id
}

create table paq {
paq_id number generated by default as identity,
E_FLAG char,
...
primary key(paq_id)
}

有一列重复,称为 E_FLAG。

我想确保以下几点:
如果 data1 属于 paq1,则 data1.E_FLAG == paq1.E_FLAG。 在 oracle 中使用完整性约束。

这可能吗?

【问题讨论】:

  • 能否请您给我们表结构和一些例子,这两个表是如何相关的,它们是否有可以连接和检查数据的列或列?有驱动表吗?当您在表格中第一次添加行时会发生什么,您想如何处理?
  • 我添加了更多详细信息,我想要的是每次我在数据中添加一行时,如果该行有与之关联的 paq,那么我必须确保数据的 E_FLAG 和 paq 具有相同价值。

标签: oracle constraints database-integrity


【解决方案1】:

正确的答案是规范化数据模型,而不是重复data 表中的列。

也就是说,如果您在 paq 上创建唯一索引

create unique index uniq_paq_flag
    on paq( paq_id, e_flag );

然后,您可以在该组合上创建一个外键约束,以确保 e_flag 值匹配

alter table data
  add constraint fk_match_flag 
    foreign key( paq_id, e_flag ) 
    references paq( paq_id, e_flag );

【讨论】:

  • 是的,我同意这一点,我正在一个项目中工作,我实际上必须进行非规范化。我问的问题非常简单,解决了我的问题的核心。
最近更新 更多