DB には特別な種類のテーブルがあり、その変更の履歴をそれ自体に保存します。いわゆる「セルフアーカイブ」テーブル:
CREAT TABLE coverages (
id INT, # primary key, auto-increment
subscriber_id INT,
current CHAR, # - could be "C" or "H".
record_version INT,
# etc.
);
加入者の「カバレッジ」を保存します。フィールド「現在」は、これが現在/元のレコード (「C」) であるか履歴レコード (「H」) であるかを示します。
特定の加入者に対して現在の「C」カバレッジを 1 つだけ持つことができますが、2 つのフィールド (*subscriber_id と current*) を持つ一意のインデックスを作成することはできません。 " レコード - 変更履歴。
したがって、インデックスは現在の == 'C'および任意のsubscriber_idに対してのみ一意である必要があります。
これは、「マテリアライズド ビュー」のようなものを使用して Oracle DB で実行できます。この場合、current = 'C' のレコードのみを含むマテリアライズド ビューを作成し、*subscriber_id、current* の 2 つのフィールドで一意のインデックスを作成できます。
問題は、MySQL でこれを行うにはどうすればよいかということです。