mysql - несколько внешних ключей с разными столбцами разных таблиц

0

Было бы здорово, если бы кто-то дал мне подсказку для достижения этого ниже сценария.

два внешних ключа для таблицы 3

  • FK1, ссылаясь на столбец 1 column1
  • FK2, ссылаясь на столбец 2 таблицы1

Теперь, когда я вставляю строку в таблицу 3, я хочу, чтобы только FK1 был активным.

Другими словами, сейчас mysql не позволит мне вставлять строку до тех пор, пока не будут выполнены все ограничения внешнего ключа. Для me- моя строка должна быть вставлена либо в случае, если FK1 или FK2 выполняется. Есть ли способ, которым я могу это достичь?

  • 0
    Каждый из этих двух внешних ключей включает разные столбцы? Или они оба относятся к одному столбцу?
  • 0
    Также, возможно, расскажите нам, почему вы считаете, что вам нужно это требование. Необычно просить частичный внешний ключ.
Показать ещё 5 комментариев
Теги:
mysql-workbench

2 ответа

1
Лучший ответ

Не существует реального простого способа иметь либо или или ссылочное ограничение; но вы можете сделать оба ограничения FK необязательными, сделав поля ссылки равными нулю.

Это не помешало бы тому, чтобы строка была вставлена с хотя бы нулевой ссылкой. Чтобы предотвратить эту возможность, вы можете использовать триггер ДО НАЧАЛА ВСТАВКИ, чтобы "выбросить ошибку", если попыталась вставить такую строку. Затем вы можете рассмотреть триггер ДОПОЛНЕНИЕ, чтобы предотвратить изменение строк аналогичным образом.

1

Это атипичный запрос и может указывать на то, что ваш дизайн имеет проблему. При этом одна идея, которая могла бы работать, заключалась бы в создании новой таблицы, содержащей только один столбец. Этот столбец является первичным ключом и будет заполняться через триггер после вставки как в таблице1, так и в таблице2. Триггер будет только вставляться, если значение еще не указано в таблице. Теперь в таблице 3 вы можете поместить ограничение внешнего ключа, ссылаясь на этот новый столбец. Для того чтобы ограничение проходило, нужна только одна из двух таблиц, имеющих это значение первичного ключа.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню