MySQL: иностранные ключи - PullRequest
1 голос
/ 04 ноября 2010

Извините, если где-то уже есть ответ, но как мне создать внешний ключ, который не всегда присутствует.

Пример: у меня есть таблица invoice_payments с столбцами типа INT 'type' и 'cc_gateway'.У меня также есть вторая таблица с именем invoice_cc_gateway.Поскольку я могу принимать несколько типов платежей (наличные, онлайн-платежи cc), я сохраняю тип платежа по типу (0 = наличные, 1 = шлюз cc), и когда это платеж со шлюза, я хочу указать ссылку на этот конкретныйвещь.

Теперь моя проблема в том, что я знаю, как связать две таблицы вместе, если ключ всегда существует, но что, если ключ не всегда присутствует.Если у нас есть наличный платеж, я устанавливаю cc_gateway в 0, поскольку он не имеет отношения.

В прошлом я просто создавал фиктивную строку для 0 внутри cc_gateway, чтобы мои ключи всегда совпадали, но долженболее правильный способ сделать это.

Заранее спасибо

1 Ответ

1 голос
/ 04 ноября 2010

Перефразированный ответ

Извините, раньше я был немного быстр, конечно, вы можете иметь внешний ключ в таблице Gateway, который ссылается на товары, оплаченные через шлюз, но обратное не может быть верным (то есть ключ в таблице Item, ссылающийся на Шлюз стол)

Если ключ не всегда присутствует, он не может быть ограничением внешнего ключа (ссылки), но вместо этого вам придется присоединиться к таблице шлюза, когда это значение присутствует.

Пример

select * from invoice_payments inv
left join invoice_cc_gateway gw
on inv.paymentId = gw.paymentId
where paymentType = 1
union
select * from invoice_payments
where paymentType = 0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...