TGViewer
Базы данных (Data Base) Базы данных (Data Base) @database_info · 8.05K subscribers
Post #1814 510
⚡️ Совет по работе с базами данных 💡

Уникальные индексы с исключением определенных строк

Создание уникальных индексов в некоторых случаях невозможно из-за дублирования значений - например, в строках, помеченных как «мягко удаленные» (soft-deleted). Исключив такие строки из индекса, можно корректно настроить ограничение уникальности. В MySQL частичные уникальные индексы (unique partial indexes) требуют эмуляции.


В современных базах данных часто используется паттерн Soft Delete, когда данные не удаляются физически, а помечаются флагом is_deleted = true.

Если вы хотите, чтобы поле email было уникальным только для активных пользователей, обычный уникальный индекс выдаст ошибку при попытке регистрации нового пользователя с почтой, которая уже есть в «корзине». Использование частичного индекса решает эту проблему, позволяя игнорировать помеченные на удаление записи.

Нюанс для MySQL:
В отличие от PostgreSQL или SQL Server, MySQL не поддерживает синтаксис WHERE внутри команды CREATE INDEX. Чтобы добиться такого же поведения, разработчики обычно используют:

• Виртуальные колонки (Generated Columns): создается колонка, которая принимает значение только если запись активна, и на нее вешается уникальный индекс.
• Составные индексы: включение флага удаления или временной метки в сам индекс.

📲 Мы в MAX

#db

👉 @database_info
  • 👍 2
More from @database_info
  1. Sep 24, 2026Сегодня я хочу рассказать вам про одну часто недооцененную фишку в PostgreSQL - partial in…
  2. Sep 23, 2026🚀 Сегодня я покажу вам один из моих любимых хаков для PostgreSQL – генерация серий дат бе…
  3. Sep 21, 2026Как быстро найти “тяжёлые” запросы в PostgreSQL Сегодня покажу простой способ найти самые…
  4. Sep 20, 2026🚀 Сегодня покажу, как быстро диагностировать «тормоза» в PostgreSQL - без всяких внешних…
  5. Sep 18, 2026🧩 Как сделать backup PostgreSQL с минимальной нагрузкой на прод? Сегодня покажу один из с…
  6. Sep 17, 2026🎯 Сегодня покажу простой способ ускорить запросы в PostgreSQL, даже не трогая сам SQL-код…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →