私は言うテーブルを持っています:
CREATE TABLE "DataNode" (
"ID" NUMBER(7,0),
"TYPE" NUMBER(7,0),
"NAME" VARCHAR2(100),
"STATUS" NUMBER(7,0),
"REVISION" NUMBER(4,0),
"MODIFIEDAT" DATE
);
CREATE TABLE "DataNode_Revisions" (
"ID" NUMBER(7,0),
"NODEID" NUMBER(7,0),
"TYPE" NUMBER(7,0),
"NAME" VARCHAR2(100),
"STATUS" NUMBER(7,0),
"REVISION" NUMBER(4,0),
"MODIFIEDAT" DATE
) COMPRESS;
だから私はこれらの2つのテーブルを持っています。「DataNode」からすべての読み取りを行い、変更が発生すると、現在のエントリを「DataNode_Revisions」に書き出し、既存の「DataNode」レコードを変更します。理にかなっていますか?
これが最善の方法ですか?スキーマが変更されたときに問題が発生することはすでにわかっています。私はより良い代替手段を見つけていませんが、もしあれば教えてください! これをすべて1つのテーブルに保持すると、パフォーマンスが大幅に低下すると思いますか? つまり、レコードの数を 4 倍以上にすることになり、すでにかなりの数があります。Drupal はノードのリビジョンをこのように保存していると思いますが、それによってパフォーマンスの問題が発生しないことに興味があります。
「DataNode」は常に多くのユーザーに読まれています。ただし、書き込みはほとんど発生しません。「DataNode_Revisions」は、たまにしか読み取られません。私は非常に多くのテーブルを維持することを心配しています。「DataNode」は、これに非常によく似た ~25 のテーブルの 1 つです。