Авторский канал про Базы Данных и SQL
Ресурсы, гайды, задачи, шпаргалки.
Информация ежедневно пополняется!
Cотрудничество: @energy_c
РКН: https://clck.ru/3QREBc
Post #1893
2.13K

Уникальность с NULL без триггеров и костылей!
Обычный
Если колонка опциональная, но по смыслу значение всё равно должно быть уникальным, стандартный
Эта форма говорит PostgreSQL считать
То есть второй
Особенно полезно для
🔥
➡️ SQL Ready | #совет
Обычный
UNIQUE в SQL пропускает несколько NULL, потому что NULL не считается равным другому. Из-за этого ограничение часто формально есть, а правило на самом деле не соблюдается:UNIQUE (telegram_id)
Если колонка опциональная, но по смыслу значение всё равно должно быть уникальным, стандартный
UNIQUE даёт дыру в данных.UNIQUE NULLS NOT DISTINCT (telegram_id)
Эта форма говорит PostgreSQL считать
NULL обычным сравнимым значением именно для проверки уникальности.То есть второй
NULL уже не пройдёт, как и дубликат обычного значения.UNIQUE NULLS NOT DISTINCT (tenant_id, external_id)
Особенно полезно для
nullable внешних идентификаторов, one-to-one связей, интеграционных ключей и любых полей, где NULL тоже должен быть единственным допустимым состоянием.🔥
UNIQUE NULLS NOT DISTINCT закрывает один из источников грязных данных и заменяет триггеры.➡️ SQL Ready | #совет
- 👍 17
- ❤ 8
- 🔥 8










