По какой-то причине я не думал о NULL :) Это будет работать для нас очень хорошо, по крайней мере, как краткосрочное решение ... В долгосрочной перспективе мы собираемся разделить эту таблицу на две: покрытия и покрытие_истории. Большое спасибо, сэр!
ей БД есть специальный вид таблицы, в которой хранится история ее изменений. Так называемая «самоархивированная» таблица:
CREAT TABLE coverages (
id INT, # primary key, auto-increment
subscriber_id INT,
current CHAR, # - could be "C" or "H".
record_version INT,
# etc.
);
Здесь хранятся «покрытия» наших подписчиков. Поле «текущий» указывает, является ли это текущей / исходной записью («С») или исторической записью («Н»).
У нас может быть только одно текущее покрытие "C" для данного подписчика, но мы не можем создать уникальный индекс с 2 полями (* subscriber_id и current *), потому что для любой данной записи "C" может быть любое число "H" «Записи - история изменений.
Таким образом, индекс должен быть уникальным только длятекущий == 'C' и любой subscriber_id.
Это можно сделать в Oracle DB, используя нечто вроде «материализованных представлений»: где мы можем создать материализованное представление, которое будет включать только записи стекущий = 'C' и создайте уникальный индекс с этими 2 полями: * subscriber_id, current *.
Вопрос в том:Как это можно сделать в MySQL?