2017-08-04 27 views
0

为什么SQL Server允许这样做?SQL Server:为什么在引用单列的列上允许有两个外键?

create table dbo.tab1 
(
    id int primary key 
) 

create table dbo.tab2 
(
    id int constraint first_name references tab1(id), 
    constraint second_name foreign key (id) references tab1(id) 
) 
+4

问题是“为什么不?”。 – GurV

+2

您已经使用两个不同的名称定义了两个约束。这是允许的,虽然我看不到它的任何实际目的。 –

+0

也可以创建两个检查约束,其中任一个都可以产生相同的总体结果 - 但它们可以各自任意复杂(即可能一个使用BETWEEN,另一个枚举IN中允许的值)分界线应该在哪里? –

回答

-1

是的。这是非常有趣的功能。看看你是否使用父母的孩子概念,那么它是有帮助的。

示例:如果您有customer和dbo.Customer表。客户在充值后分配佣金。因此,当您将客户与其母链相关联时,您需要与外键相同的客户表列。

+0

请您详细说明一下吗? – KoP

2

下面是一个例子,可能会澄清这一点。

我有一个人表定义系统中的所有人。然后我有一张婚姻桌。婚姻被定义为1丈夫和1妻子的配对,并且这两者都必须是人表中的有效条目。

create table dbo.Person 
(
    id int primary key 
) 

create table dbo.Marriage 
(
    id int constraint Husband references tab1(id), 
    id2 int constraint Wife foreign key (id) references tab1(id) 
) 

示例是为了清楚起见。请原谅我可能已经进入的任何政治或文化假设。

+0

我喜欢这个例子;有一个类似的想法;尽管我的经理/直接报告是组织结构图。 – xQbert

+0

但是这个婚姻表只允许一个人与自己结婚 - 只有一个'id'列,它只能存储一个值。同样也在OP表中。 –