2

プロジェクトが少し遅れて、データのパフォーマンスと管理の両方に 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);

アドバイスをありがとう。/マット

4

1 に答える 1

1

2 つの外部キーで分割することはできません。

A が B の親であり、B が C の親である場合、C を fk_cb で分割することをお勧めします。A と C を結合すると最大剪定が得られるという天気 - 興味深い質問です。なぜ私たちのためにテストを実行しないのですか?

質問 - なぜテーブル C に A の FK があるのですか? A は B への fk によって暗示されませんか?

(私の推測では、技術的には可能ですが、オラクルはテーブルBにアクセスする必要があります。彼がそうするとは思わないので、剪定は行わないと思います)。

于 2013-05-20T17:28:51.760 に答える