プロジェクトが少し遅れて、データのパフォーマンスと管理の両方に Oracle (11G) パーティショニングを使用する必要があることに気付きました。多くの @OneToMany および @OneToOne 関係を持つ階層エンティティ モデルがあり、一部のエンティティは 2 つ以上の他のエンティティから参照されます。「親/ルート」エンティティで「範囲によるパーティション分割」(月) を使用し、すべての子エンティティで「参照によるパーティション分割」を使用したいと考えています。1 年後、最も古い月のパーティションをアーカイブ データベースに移動します。24 時間年中無休のシステムであるため、データは継続的に増加します。
Oracle ドキュメントから: 「参照パーティション化により、参照制約によって相互に関連する 2 つのテーブルをパーティション化できます。パーティション化キーは、既存の親子関係を通じて解決され、有効かつアクティブな主キーおよび外部キー制約によって適用されます。」
2 つの外部キーがあり、そのうちの 1 つが null になる可能性がある場合、テーブルで「参照によるパーティション」を使用することは可能ですか? (私が読んだことから、「参照によるパーティション」の外部キーで「not null」を使用する必要があります)
問題を説明するための小さな例:
A - parent entity
B - child entity to A
C - child entity to A or B
create table
A (
id number primary key,
adate date
)
partition by range (adate) (
partition p1 values less than (to_date('20130501','yyyymmdd')),
partition p2 values less than (to_date('20130601','yyyymmdd')),
partition pm values less than (maxvalue)
);
create table
B (
id number primary key,
text 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,
text varchar2(5),
a_id number not null, -- NOT POSSIBLE as a_id or b_id will be null..
b_id number not null, -- NOT POSSIBLE as a_id or b_id will be null..
constraint fk_ca foreign key (a_id) references A,
constraint fk_cb foreign key (b_id) references B
)
partition by reference(fk_ca)
partition by reference(fk_cb);
アドバイスをありがとう。/マット