Судя по сообщению об ошибке, похоже, что вы пытаетесь удалить строку, от которой зависит другая строка.
Например, посмотрите на следующие таблицы:
--------------------------------------
PRODUCT_TYPE
--------------------------------------
(PK)PRODUCT_TYPE_ID | TYPE
--------------------------------------
1000 | Gimmick
1001 | Life Changing
--------------------------------------------------------
PRODUCT
--------------------------------------------------------
(PK)PRODUCT_ID | (FK)PRD_TYPE_ID | Name
--------------------------------------------------------
6521 | 1000 | Electric Pizza Cutter
6522 | 1001 | Bidet
Если бы я попытался запустить DELETE FROM PRODUCT_TYPE WHERE PRODUCT_TYPE_ID = 1000
, это бы не сработало. Зачем? Что ж, если я удалю этот тип продукта, то мой продукт Electric Pizza Cutter будет иметь таинственный тип продукта (там равно нет 1000 больше). Это осиротело. Базы данных не похожи на паповых варбаков - они ненавидят сирот.
Если вам действительно нужно что-то удалить, вам нужно разобрать это от нижней части цепи до самого верха. Но вы обнаружите, что очень редко, если что-либо когда-либо удаляется в базе данных. Вместо удаления вы должны пометить его как неактивный. Мой предпочтительный маршрут использует дату окончания.
--------------------------------------------------
PRODUCT_TYPE
--------------------------------------------------
(PK)PRODUCT_TYPE_ID | TYPE | END_DATE
--------------------------------------------------
1000 | Gimmick | 3-25-2019
1001 | Life Changing | null
Точно так же мой тип продукта больше не используется, но более старые вещи в БД все еще могут ссылаться на них при необходимости.