# Промпт для Claude Opus 4 — ревью схемы БД ## Контекст (не анализируй) PostgreSQL. Микросервис IP WhiteList. Многоарендность: у каждой компании (companies) свои записи (whitelist_entries). Лимит по умолчанию 15 активных записей на компанию, custom_limit переопределяет. Soft delete. Аудит всех изменений (audit_log). Сервис на Node.js + pg pool. ## Что нужно Ниже `schema.sql`. Найди: - Отсутствующие индексы (полный скан таблиц под нагрузкой) - Отсутствующие уникальные constraint'ы (дубликаты на уровне БД, не только в коде) - Проблемы с внешними ключами (каскадное удаление?) - Неоптимальные типы данных - Уязвимости в структуре (можно ли обойти изоляцию через БД?) - Что добавить для production Ограничения: - Только конкретные DDL-строки - ВЕСЬ ОТВЕТ ОДНИМ БЛОКОМ — без свёрток, без интерактивных элементов ```sql -- IP WhiteList schema CREATE TABLE IF NOT EXISTS companies ( id SERIAL PRIMARY KEY, client_id VARCHAR(64) UNIQUE NOT NULL, name VARCHAR(255), custom_limit INTEGER DEFAULT NULL, created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(), updated_at TIMESTAMPTZ NOT NULL DEFAULT NOW() ); CREATE TABLE IF NOT EXISTS whitelist_entries ( id SERIAL PRIMARY KEY, company_id INTEGER NOT NULL REFERENCES companies(id), value_cidr VARCHAR(18) NOT NULL, comment VARCHAR(255), created_by VARCHAR(255) NOT NULL, created_at TIMESTAMPTZ NOT NULL DEFAULT NOW(), updated_by VARCHAR(255), updated_at TIMESTAMPTZ, deleted_by VARCHAR(255), deleted_at TIMESTAMPTZ ); CREATE INDEX IF NOT EXISTS idx_entries_active ON whitelist_entries(company_id, value_cidr) WHERE deleted_at IS NULL; CREATE TABLE IF NOT EXISTS audit_log ( id SERIAL PRIMARY KEY, user_email VARCHAR(255) NOT NULL, company_id INTEGER NOT NULL, action VARCHAR(32) NOT NULL, old_value TEXT, new_value TEXT, entry_id INTEGER, created_at TIMESTAMPTZ NOT NULL DEFAULT NOW() ); CREATE INDEX IF NOT EXISTS idx_audit_company ON audit_log(company_id); ```