У меня есть таблица заказов, с колонками external_id
, shop_id
и deleted_at
. Чтобы убедиться, что комбинация external_id
и shop_id
уникальна, у меня есть уникальное ограничение на эти 3 столбца.
Это потому, что мы не учитываем мягко удаленные значения для уникальности, следовательно, если deleted_at
равно NULL
в Laravel, это не программно удалено, но в любом другом случае это так, что делает возможным несколько программно-удаленных записей. Пример:
external_id |shop_id |deleted_at |
-------------------|----------|-------------------|
1 | 5| [NULL]| <-- should be unique
1 | 5|2019-12-19 13:45:22|
1 | 5|2019-12-19 13:35:45|
Звучит великолепно, за исключением одного предупреждения: MySQL не обеспечивает уникальность значений NULL, что важно для этого. Обычно Обходной путь заключается в изменении значения по умолчанию, допускающего обнуляемость, на пустую строку. Тем не менее, удаленный_ат является временной меткой.