代码之家  ›  专栏  ›  技术社区  ›  Anthony Greco

MySQL:外键

  •  1
  • Anthony Greco  · 技术社区  · 14 年前

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

    示例:我有一个名为invoice_payments的表,其INT列为“type”和“cc_gateway”。我还有第二张桌子叫发票网关。由于我可以接受多种支付类型(现金,cc在线支付),我将支付类型存储在类型(0=现金,1=cc网关)中,并且当它是来自网关的支付时,我希望链接到该特定项目。

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

    在过去,我只是在cc_gateway中为0创建了一个虚拟行,这样我的密钥总是匹配的,但是必须有一个更正确的方法来做到这一点。

    1 回复  |  直到 14 年前
        1
  •  1
  •   Kalle    14 年前

    重新措辞的回答

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

    例子

    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