Files
ospab.host/ospabhost/backend/prisma/FOREIGN_KEY_FIX.md
2025-11-23 14:35:16 +03:00

1.9 KiB
Raw Blame History

Решение проблемы Foreign Key при удалении тарифов

Проблема

При попытке удалить тариф через Prisma Studio появляется ошибка:

Foreign key constraint violated on the fields: (`tariffId`)

Причина

Тариф используется серверами. MySQL не позволяет удалить тариф, если на него ссылаются записи в таблице server.

Решение

Способ 1: Безопасный (рекомендуется)

Удаляет только неиспользуемые тарифы, сохраняет серверы.

mysql -u root -p ospabhost < backend/prisma/safe_tariff_migration.sql

Способ 2: Полная очистка (только для dev!)

Удаляет ВСЕ серверы и тарифы.

# Сначала бэкап!
mysqldump -u root -p ospabhost > backup.sql

# Потом очистка
mysql -u root -p ospabhost < backend/prisma/clean_slate_migration.sql

Способ 3: Ручное удаление через SQL

-- 1. Найти тарифы без серверов
SELECT t.id, t.name, COUNT(s.id) as servers
FROM tariff t
LEFT JOIN server s ON s.tariffId = t.id
GROUP BY t.id
HAVING servers = 0;

-- 2. Удалить только неиспользуемые
DELETE FROM tariff WHERE id IN (
    SELECT id FROM (
        SELECT t.id FROM tariff t
        LEFT JOIN server s ON s.tariffId = t.id
        GROUP BY t.id
        HAVING COUNT(s.id) = 0
    ) as unused
);

-- 3. Добавить категорию
ALTER TABLE tariff ADD COLUMN category VARCHAR(50) NOT NULL DEFAULT 'vps';

-- 4. Добавить новые тарифы (см. safe_tariff_migration.sql)

Перезапуск backend

cd backend
npm start

Готово! 🎉