Ошибка вставки, поскольку внешний ключ в строке, которую вы вставляете, не соответствует действительному ключу в таблице ограничений. Например:
Предположим, у вас есть эти две таблицы:
Employees
----------------------------
EmpID | Name
----------------------------
0 | John
1 | Jane
OfficeAssignments
----------------------------
OfficeID | EmpID
----------------------------
0 | 0
1 | 1
Если у вас есть ограничение внешнего ключа на OfficeAssignments.EmpID -> Employees.EmpID
, и вы пытаетесь выполнить:
INSERT INTO OfficeAssignments (OfficeID, EmpID) VALUES (2,2)
Оператор не выполнится, поскольку в таблице Employees
нет записи с EmpID, равным 2.
Ограничения предназначены для обеспечения того, чтобы ваша зависимая таблица всегда имела действительные данные относительно родительской таблицы - в этом примере у вас никогда не будет офиса, который указан как назначенный сотруднику, который не существует в системе либо потому, что они никогда не существовали (как в этом случае), либо потому, что они были удалены (потому что ограничение будет препятствовать удалению записи сотрудника до тех пор, пока запись назначения офиса не будет удалена первой).
Редактировать: Теперь, когда вы опубликовали ограничение, оно действительно выглядит так, как будто оно задано задом наперед. Помещая ограничение в определение таблицы Products
, вы делаете ее дочерней, а ProductsToCategories
родительской. Написанное вами ограничение можно прочесть как «Продукт должен быть присвоен категории, прежде чем он может быть создан». Я подозреваю, что вы имели в виду наоборот: «Продукт должен быть создан, прежде чем он может быть назначен категории». Чтобы получить такой результат, вам нужно поместить ограничение в таблицу ProductsToCategories
, установив для внешнего ключа значение productid
и сославшись на Products.id
.