"Мой вопрос заключается в том, как установить ограничение уникальности для таблицы, которая имеет флаг isActive, как предложено выше в шестнадцатеричном формате. У меня есть суррогатные ключи во всех моих таблицах. Но я хочу обеспечить столбцы с естественным ключом (то, что мы называемстолбцы бизнес-ключей) имеют уникальное ограничение.
Если у меня есть поле delete_on для отслеживания удалений, я могу включить этот столбец как часть ограничения естественного ключа. Таким образом, он допускает более одной удаленной записи ста же комбинация бизнес-ключей, отличающаяся только полем даты delete_on. "
Даже если поле DATE в качестве удаленного элемента входит в состав вашего естественного ключа, вы все равно не можете удалить-заново вставить-удалить все в один и тот же день.Может показаться патологическим, но можете ли вы быть уверены, что патологический случай НИКОГДА не произойдет?
Если ваша база данных должна отражать тот факт, что часть контента является «активной» в том смысле, что она очень важна дляТекущий бизнес и некоторый другой контент «неактивны», например, в том смысле, что единственная причина для того, чтобы держать его в течение некоторого времени, предназначена для архивных целей, а затем проектируйте свою базу данных, чтобы отразить этот факт, определив две таблицы: одну с «активным» контентоми один с «заархивированным» контентом.Возможно, вы можете использовать триггер для автоматического достижения «перемещения в архив» всякий раз, когда происходит удаление.
При этом вы можете использовать свой естественный ключ в СУБД, используя уникальное ограничение на «активный»таблицу, и вы можете включить метку времени удаления в таблицу «архив», и вам может даже не понадобиться вообще определять какой-либо ключ для этой таблицы.