2015-06-22 77 views
0

我有一個TestPack表,它可以有n個與之關聯的行。但是一條線可能沒有TestPack而存在。稍後,一條線可能會被分配一個TestPack#。在SQL Server中實現引用密鑰

調用這種關係以及如何在SQL Server 2008中實現這種關係?

+1

是否只有一行連接到_one_特定測試包,或者許多TestPack中是否可以包含單行記錄? –

+0

我將不得不確認要求,但我的猜測是一條生產線將連接到一個測試包。你能指導我兩種可能性嗎? – WAQ

+0

一行將始終是針對單個TestPack記錄的,但在將行添加到數據庫時,測試包可能不存在。 (已確認) – WAQ

回答

1

它被稱爲「一比零或一」關係,因爲一條線可能與零個或一個TestPacks關聯。

您可以通過使用允許NULL值的FK來實現它。

CREATE TABLE TestPack (id INT, 
         PRIMARY KEY (id)) 

CREATE TABLE Line (id INT, 
        TestPackId INT NULL, 
        FOREIGN KEY (TestPackId) REFERENCES TestPack(id)) 

通過打造「TestPackId」列在「線」表允許空值,你可以有不TestPack線路(插入NULL有),然後通過設置的標識assiging一個TestPack稍後相應的TestPack。

+0

現在我在test_pack_id(這是外鍵)中允許NULL值後,他在插入語句時收到此錯誤消息 INSERT語句與FOREIGN KEY約束\「FK_Line_TestPack \」衝突。數據庫\「TPM \」,表\「dbo.TestPack \」,列'id'發生衝突。\ r \ n該語句已被終止。 – WAQ

+0

您是否在TestPackId字段中插入NULL?或者你在那裏插入實際值?如果你插入一個實際值,那麼你必須確保這個id也存在於TestPack表中。 – eugenioy

+0

不,正如我所說的,當添加一條線時,測試包現在可能存在。稍後測試包可能會到達,我們將其添加到數據庫。 – WAQ