如何解决Oracle:在未引用的表上创建按引用分区按引用分区fk
我们已经意识到我们需要使用Oracle(12 c)间隔分区。我们有一个带有许多@OneToMany关系的层次实体模型。我们想在其上使用“按范围划分”(天,月...)所有子实体(B)的“父/根”实体(A)和“按引用划分”。 从Oracle文档中:“引用分区允许通过引用约束对彼此相关的两个表进行分区。分区键通过现有的父子关系来解决,并由启用的和活动的主键和外键约束来实施。”问题在于子实体(B)可以引用与“父/根”实体(A)没有任何链接的其他实体(C)。我可以在A和B上创建分区,但是当我要在A上删除分区(级联上B的分区)时,出现错误完整性错误,并且失败。仅当我删除C和B上的所有记录然后对其进行分区时,它才有效。我不想这样做,因为与直接删除分区相比效率不高且速度慢
请问有没有一种方法可以基于A(creation_date)在表C上创建分区,而无需在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分区也会被删除。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。