如何使表的B列中唯一只在表中的不同外键条目

问题描述 投票:3回答:1

假设有一个表称为电子邮件

CREATE TABLE Emails (
    ID nvarchar(40) NOT NULL,
    Link_ID int NOT NULL,
        GROUP int NOT NULL,
    Email nvarchar(100) NOT NULL)

和一张桌子叫信息

CREATE TABLE Info (
    CUST_ID int NOT NULL,
        Link_ID int NOT NULL)

这是表,我不是能够改变他们的列的简图。

我的目标是这样的:

允许:

Cust_ID Group   Email
1       0   [email protected]
1       1   [email protected]

禁止:

Cust_ID Group   Email
1       0   [email protected]
1       0   [email protected]

Cust_ID Group   Email
1       0   [email protected]
2       1   [email protected]

Cust_ID Group   Email
1       0   [email protected]
2       0   [email protected]

如何在MSSQL 2014达到这种独特性?

编辑:我的目标是这样的:

  • 客户可以拥有多个电子邮件地址
  • 电子邮件地址必须为每个客户而不是每组唯一的,所以一个电子邮件地址只可在一个客户的多组,但同样的电子邮件地址是不允许在任何其他客户
sql sql-server sql-server-2014
1个回答
2
投票

直接你不能把UNIQUE约束在多个表上,我建议你可以去下面的方法之一。

  1. 您可以使用触发器它被插入之前验证的数据,如果它是被禁止抛出错误。
  2. 当插入本身可以检查数据是否允许或不允许使用IF EXISTS
  3. 创建Indexed View并把你放在它唯一约束。

我的建议将是,创建一个索引视图,并把所需的约束。要了解更多关于这一点,你可以检查Enforcing Complex Constraints with Indexed Views

© www.soinside.com 2019 - 2024. All rights reserved.