По какой-то причине я не думал о 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?

Ответы на вопрос(1)

Ваш ответ на вопрос