31 lines
2.0 KiB
Markdown
31 lines
2.0 KiB
Markdown
---
|
||
aliases:
|
||
tags:
|
||
- maturity/🌱
|
||
- best-practices
|
||
date: 2024-11-05
|
||
---
|
||
Представьте, что вам нужно поддерживать уникальность данных, например, адресов электронной почты в таблице базы данных. Однако в таблице есть строки, [[../Tombstone|помеченные как удаленные]] с помощью поля `deleted_at`, и они также остаются в базе данных. В такой ситуации создание уникального индекса на поле с электронной почтой становится невозможным из-за дублирующихся значений. [[Частичный индекс|Частичный индекс]] решает эту проблему, позволяя включать в индекс только записи, которые не помечены как удаленные.
|
||
|
||
В PostgreSQL добавление уникального индекса для активных пользователей выглядит так:
|
||
```sql
|
||
CREATE UNIQUE INDEX users_email_uniq ON users (
|
||
email
|
||
) WHERE deleted_at IS NULL;
|
||
```
|
||
|
||
В этом случае строки, у которых `deleted_at` не задан, включаются в индекс, а остальные игнорируются, что делает индекс более компактным и эффективным.
|
||
***
|
||
## Мета информация
|
||
**Область**:: [[../../meta/zero/00 Реляционная база данных|00 Реляционная база данных]]
|
||
**Родитель**::
|
||
**Источник**::
|
||
**Создана**:: [[2024-11-05]]
|
||
**Автор**::
|
||
### Дополнительные материалы
|
||
-
|
||
|
||
### Дочерние заметки
|
||
<!-- QueryToSerialize: LIST FROM [[]] WHERE contains(Родитель, this.file.link) or contains(parents, this.file.link) -->
|
||
|