Oracle:在未引用的表上通过引用创建分区(引用分区(fk))



我们已经意识到我们需要使用Oracle(12c(间隔分区。我们有一个具有许多@OneToMany关系的分层实体模型。我们希望使用";"按范围划分";(日、月…(;父/根";实体(A(和";引用分区";关于所有子实体(B(。根据Oracle文档:;引用分区允许通过引用约束对彼此相关的两个表进行分区。分区键是通过现有的父子关系来解析的,由已启用和活动的主键和外键约束来强制执行"问题是子实体(B(可以指代它们与"B"没有任何链接的其他实体(C(;父/根";实体(A(。我可以在A和B上创建分区,但当我想在A上删除分区(级联时在B上的分区(时,我会得到一个错误完整性错误,它失败了。只有当我删除C和B上的所有记录,然后对它们进行分区时,它才能工作。我不想这样做,因为与直接删除分区相比,它既不高效也不慢

请问有没有一种方法可以在表C上基于a(creation_date(创建分区,而不在a和C之间添加任何外部约束

举例说明情况的小例子

A - parent entity
B - child entity to A
C - child entity to  B
create table 
A (
id number primary key,
creation_date date
)
partition by range (creation_date) 
INTERVAL(NUMTOYMINTERVAL(1, 'MONTH')) 
(
partition p1 values less than (to_date('20180501','yyyymmdd'))
);
create table 
B (
id number primary key,
value varchar2(5),
a_id number not null,
constraint fk_ba foreign key (a_id) references A
)
partition by reference(fk_ba);
create table 
C (
id number primary key,
code varchar2(5),
b_id number not null,
constraint fk_cb foreign key (b_id) references B
);

文档中不清楚引用分区是可传递的(A->B->C(。我通过测试发现了它。我们可以创建表C";参考分区(fk_cb(";结果是当我们丢弃A分区时,匹配的B和C分区被丢弃。

相关内容

  • 没有找到相关文章

最新更新