我们的数据库中有一种特殊的表,它本身存储其更改的历史。所谓的“自存档”表:
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”覆盖,但我们不能创建一个包含 2 个字段(*subscriber_id 和 current*)的唯一索引,因为对于任何给定的“C”记录,可能有任意数量的“H " 记录 - 变更历史。
所以索引应该只对当前 == 'C'和任何subscriber_id 是唯一的。
这可以在 Oracle DB 中使用“物化视图”之类的东西来完成:我们可以创建一个物化视图,它只包含current = 'C' 的记录,并使用以下两个字段创建一个唯一索引:*subscriber_id, current*。
问题是:如何在 MySQL 中做到这一点?