Версия источника: 4880e8b4372c96001c2e052be28b68a95d31252b
Синхронизировано: 2026-11-09T11:15:07.649Z
Источник: https://github.com/sergey-from-riders/vibecoding-base/tree/4880e8b4372c96001c2e052be28b68a95d31252b

<a id="database-foreign-keys"></a>

# Внешние ключи

## Коротко

Внешний ключ не позволяет хранить ссылку на несуществующую запись.

## Плохо

```sql
user_id uuid -- связь известна только коду
```

## Хорошо

```sql
user_id uuid REFERENCES users(user_id)
  ON DELETE RESTRICT
```

## Почему

Без ограничения легко получить осиротевшие данные.

## Когда применять

CASCADE подходит только для действительно зависимых записей. В распределённом хранилище без FK нужен документированный контроль целостности.

## Как проверить

- Проверьте создание неверной ссылки и удаление родителя.

## Человек

Выбирает поведение связанных данных при удалении и переносе.

## Агент

Готовит схему или миграцию, проверяет граничные значения и совместимость с текущими запросами.

Контроль результата:

- Проверьте создание неверной ссылки и удаление родителя.

## Источники

- [PostgreSQL: Documentation: 18: 5.5. Constraints](https://www.postgresql.org/docs/18/ddl-constraints.html)

Уровень: Рекомендуется. Проверено: 2026-11-09. Изменено: 2026-11-09.

[Исходный файл](https://github.com/sergey-from-riders/vibecoding-base/blob/4880e8b4372c96001c2e052be28b68a95d31252b/registry/standards/database/postgres/rules/foreign-keys.md)
