Mysql 使用具有多个主键组合的外键

Mysql 使用具有多个主键组合的外键,mysql,sql,Mysql,Sql,我有一个包含以下字段的公司表: CompanyID EmailDomain1 EmailDomain2 EmailDomain3 ... CompanyID EmailDomain EmailDomainstat 我有另一个带有以下字段的表t: CompanyID EmailDomain1 EmailDomain2 EmailDomain3 ... CompanyID EmailDomain EmailDomainstat 以下是限制条件: (CompanyID,emaildomain)

我有一个包含以下字段的公司表:

CompanyID
EmailDomain1
EmailDomain2
EmailDomain3
...
CompanyID
EmailDomain
EmailDomainstat
我有另一个带有以下字段的表t:

CompanyID
EmailDomain1
EmailDomain2
EmailDomain3
...
CompanyID
EmailDomain
EmailDomainstat
以下是限制条件:

  • (CompanyID,emaildomain)在t中应该是唯一的
  • 如果公司的emaildomain被删除(电子邮件域可能是 emaildomain1、emaildomain2或emaildomain3)中的任何一个 对应的companyID和EmailDomain组合应获得 自动删除
  • 例如,如果一家公司Abc Inc.有两个电子邮件域abcinc.in和Abc.org,并且他们计划明天删除abcinc.in,那么我应该删除表t中的相应条目


    如何在主键和外键的帮助下获得这种效果?我知道必须使用级联删除,但我不知道如何将外键与多个主键组合绑定。

    任何时候为列编号时,通常都表明数据模型出了问题。电子邮件域是否有一些基本的东西意味着它显然是一个
    EmailDomain2
    而不是一个
    EmailDomain1
    ?我同意@Damien的观点,您的数据可能没有标准化。但是,如果您希望/必须保持这种方式,那么必须使用触发器。在这种情况下,主键和外键无法帮助您。感谢您的回复。不,emaildomain1和emaildomain2是不可区分的。那么我建议应该有一个单独的表,将公司的每个电子邮件域存储为一个单独的行-注意,这实际上更清楚地映射到您所说的第2部分需要的内容-电子邮件域现在确实得到了
    DELETE
    d(而不是在您的模型中,列实际得到
    UPDATE
    d到
    NULL
    )。如果你真的想限制一家公司可以拥有多少个域,那可以通过适当的键和一个小的辅助表来实现。谢谢你的评论Damien。我已经解决了这个问题,我将准确地实现它。