Если я правильно вас понимаю, внешний ключ user_fk
в message
относится к student
и staff
идентификаторам.
В этом случае, если вы попытаетесь вставить данные в message
table, он проверит обе таблицы student
и staff
для этого идентификатора.Отсюда ошибка.
Что вы можете сделать, это добавить два столбца внешнего ключа в message
по одному для каждой указанной таблицы.
Обновление
Вышеуказанный подход приведет к возможности использования внешних ключей, допускающих нулевое значение.Вместо этого мы можем иметь две таблицы сопоставления, по одной для каждой таблицы.например: student_message_map
и staff_message_map
.Каждая таблица будет содержать 2 внешних ключа student_id
и message_id
/ staff_id
и message_id
.
. Это сделает столбцы не обнуляемыми, но для запроса потребуется выполнить два объединения.Кроме того, кто-то, смотрящий на это отношение, может подумать, что это отношение «многие ко многим» из-за таблиц сопоставления.
ИМО, имеющий внешний ключ, допускающий значение NULL, не является плохой практикой, вам просто нужно знать, спрашивая, о возможностинулевых значений.