MySQL:外键

时间:2010-11-04 09:53:06

标签: mysql indexing

很抱歉,如果已经在某处已经解答了,但是如何创建并不总是存在的外键。

示例:我有一个名为invoice_payments的表,其INT列为'type'和'cc_gateway'。我还有一个名为invoice_cc_gateway的第二个表。由于我可以接受多种支付类型(现金,在线支付cc),我可以按类型(0 =现金,1 = cc网关)存储支付类型,当它是来自网关的支付时,我想链接到该特定项目。

现在我的问题是,我知道如果密钥始终存在,如何将两个表链接在一起,但如果密钥不会始终存在,该怎么办呢。如果我们有现金支付,我将cc_gateway设置为0,因为它不相关。

过去我刚刚在cc_gateway中为0创建了一个虚拟行,以便我的键始终匹配,但必须有更正确的方法来执行此操作。

提前致谢

1 个答案:

答案 0 :(得分:1)

重新回答

对不起,我之前有点快,当然你可以在Gateway-table中有一个引用通过网关支付的项目的外键,但相反的情况不一样(即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