TGViewer
ITmozg ITmozg @itmozg · 2.63K subscribers
Post #10070 184
⚡️ Совет по работе с базами данных 💡

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

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


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

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

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

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

♻️ Сделай репост, чтобы помочь другим.

📲 Мы в MAX

👉 @itmozg
  • 👍 1
More from @itmozg
  1. Sep 24, 2026Что происходит, когда вы вводите URL в браузер? В процесс вовлечены: браузер, операционная…
  2. Sep 23, 2026Visualgo - это интерактивный учебный ресурс, посвящённый визуализации алгоритмов и структу…
  3. Sep 17, 2026Алиасы (псевдонимы)- это лучший способ сэкономить время и не печатать длинные команды по с…
  4. Sep 14, 2026🐳 Как на самом деле работает Docker? Взгляд изнутри Мы привыкли писать в терминале docker…
  5. Sep 10, 2026🖥 Пишем свою операционную систему с нуля. Серьезно. Многим кажется, что создание ОС это ч…
  6. Sep 9, 2026Сборка C++ проектов. Оптимизации компилятора. Inline, constexpr, alignment. Game Engine се…
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 →