【问题标题】:do not match an existing primary key or UNIQUE constraint不匹配现有的主键或 UNIQUE 约束
【发布时间】:2013-01-30 21:00:51
【问题描述】:

例如,我有两个表 - 个人和电子邮件

表格 - 个人 专栏
Indv_ID (PK)
电子邮件_ID

表格电子邮件 专栏
Email_ID (PK)
电子邮件类型 (PK)
电子邮件地址

这个想法是同一个人可以拥有多封电子邮件。所以,如果 Joe 有两封电子邮件,并且 joes ID 是 100。

**TABLE - INDIVIDUALS**
Indv_ID           Email_ID
100               200

**TABLE - EMAILS**
Email_ID        Email_Type      Email_Address
200             PERSONNEL       joe.john@yahoo.com
200             WORK            joe.john@abc.com    

现在,我正在尝试定义这种关系。基本上,在 INDIVIDUAL 中的 EMAIL_ID 列和 EMAILS 中的 EMAIL_ID & EMAIL_TYPE 之间。

当我尝试定义外键关系时,出现以下错误。

“表 INDIVIDULS 中的列与现有的主键或唯一约束不匹配”

请告诉我如何处理并定义这种类型的关系。

【问题讨论】:

    标签: sql-server-2008


    【解决方案1】:

    为了实现你的目标,最好的设计是:

    表格 - 个人列

    Indv_ID (PK)

    表格电子邮件列

    Email_ID (PK) Email_Type (PK) Indv_ID (PK) 电子邮件地址

    所以:

    **表 - 个人** Indv_ID 100 **表格 - 电子邮件** Email_ID Email_Type INDV_ID Email_Address 300 人 100 joe.john@yahoo.com 400 工作 100 joe.john@abc.com

    结论:

    每个人都有很多电子邮件。您可以根据业务需要更改电子邮件表的主键。但这就是想法。

    另一个提示:

    考虑为整数类型或字符值枚举您的 Email_Type 列。

    【讨论】:

    • 我有另一个表(例如 - CONTRACTORS)将电子邮件引用到 EMAILS 表。如果我将 INDIVIDULS 表中的 Indv_id 和 CONTRACTORS 表中的 Indv_id 保留在 EMAILS 表的同一列 (INDV_ID) 中,我可能会遇到问题,因为个人和承包商有可能获得相同的 ID。请检查这种情况。你能推荐一个也能处理这个问题的设计吗?
    • 个人和承包商共享同一个电子邮件?
    • 没有。 INDIVIDUAL-1 的 INDV_ID 为 100,EMAIL indv@hotmail.com。承包商可以在 CONTRACTOR 表中拥有相同的 INDV_ID 100。
    • 抱歉,没听懂...请发布您的 CONTRACTORS 表 ddl?
    • **表 - 承包商**
      INDV_ID
      100
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多