У нас в БД есть специальная таблица, которая хранит в себе историю своих изменений. Так называемая «самоархивируемая» таблица:
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» для данного подписчика, но мы не можем создать уникальный индекс с двумя полями (*subscriber_id и current*), потому что для любой данной записи «C» может быть любое количество «H». » записи - история изменений.
Таким образом, индекс должен быть уникальным только для current == 'C' и любого subscriber_id.
Это можно сделать в Oracle DB с помощью чего-то вроде «материализованных представлений»: мы можем создать материализованное представление, которое будет включать только записи с current = 'C', и создать уникальный индекс с этими двумя полями: *subscriber_id, текущий*.
Возникает вопрос: как это можно сделать в MySQL?