MySQL:外键

MySQL:外键,mysql,indexing,Mysql,Indexing,很抱歉,如果在某个地方已经回答了这个问题,那么我如何创建一个不总是存在的外键呢 示例:我有一个名为invoice\u payments的表,其中INT列为“type”和“cc\u gateway”。我还有第二个表名为invoice\u cc\u gateway。由于我可以接受多种付款类型(现金、在线抄送付款),因此我将付款类型存储在类型(0=现金,1=抄送网关)中,当它是来自网关的付款时,我希望链接到该特定项目 现在我的问题是,如果键始终存在,我知道如何将这两个表链接在一起,但是如果键不总是存在

很抱歉,如果在某个地方已经回答了这个问题,那么我如何创建一个不总是存在的外键呢

示例:我有一个名为invoice\u payments的表,其中INT列为“type”和“cc\u gateway”。我还有第二个表名为invoice\u cc\u gateway。由于我可以接受多种付款类型(现金、在线抄送付款),因此我将付款类型存储在类型(0=现金,1=抄送网关)中,当它是来自网关的付款时,我希望链接到该特定项目

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

在过去,我只是在cc_gateway中为0创建了一个虚拟行,以便我的密钥始终匹配,但必须有一种更正确的方法来实现这一点


提前感谢

重新措辞的回答

对不起,我之前有点快,当然你可以在网关表中有一个外键,它引用通过网关支付的项目,但相反的情况不可能是真的(即项目表中的一个键链接到网关表)

如果该键不总是存在,则它不能是外键约束(引用),而是必须在该值存在时加入网关表

示例

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

重新表述的答案

对不起,我之前有点快,当然你可以在网关表中有一个外键,它引用通过网关支付的项目,但相反的情况不可能是真的(即项目表中的一个键链接到网关表)

如果该键不总是存在,则它不能是外键约束(引用),而是必须在该值存在时加入网关表

示例

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

我基本上只关心我的图表是否反映了两者之间的联系,但如果我不按键分配任何内容,我不会担心。谢谢。我更关心的是,如果我在一年内去看我的EER图表,它反映了我的关系。我知道如何做选择。谢谢你。事实上,我发现我想要的是一种不确定的关系。再次感谢!看看我的新答案,我想这可以澄清一点:)问题是,网关可能并不总是引用项目的付费行。网关可以有多种类型的事务,最常见的情况是事务失败。我存储这些信息,以便检测常见的欺诈行为。因此,从技术上讲,payments received表与gateway表相关(但并非在所有情况下)。这种情况经常发生,同样,我的图表基本上可以显示其他人(或一年后的我)之间的关系。插入一个0的空行总是能让我保持索引,但我觉得这样做很麻烦。不过再次感谢=)我基本上只关心我的图表是否反映了两者之间的联系,但是如果我不应该按键分配任何内容,我不会担心。谢谢。我更关心的是,如果我在一年内去看我的EER图表,它反映了我的关系。我知道如何做选择。谢谢你。事实上,我发现我想要的是一种不确定的关系。再次感谢!看看我的新答案,我想这可以澄清一点:)问题是,网关可能并不总是引用项目的付费行。网关可以有多种类型的事务,最常见的情况是事务失败。我存储这些信息,以便检测常见的欺诈行为。因此,从技术上讲,payments received表与gateway表相关(但并非在所有情况下)。这种情况经常发生,同样,我的图表基本上可以显示其他人(或一年后的我)之间的关系。插入一个0的空行总是能让我保持索引,但我觉得这样做很麻烦。再次感谢=)