2017-08-04 50 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表中。 –