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