我有一個TestPack表,它可以有n個與之關聯的行。但是一條線可能沒有TestPack而存在。稍後,一條線可能會被分配一個TestPack#。在SQL Server中實現引用密鑰
調用這種關係以及如何在SQL Server 2008中實現這種關係?
我有一個TestPack表,它可以有n個與之關聯的行。但是一條線可能沒有TestPack而存在。稍後,一條線可能會被分配一個TestPack#。在SQL Server中實現引用密鑰
調用這種關係以及如何在SQL Server 2008中實現這種關係?
它被稱爲「一比零或一」關係,因爲一條線可能與零個或一個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。
現在我在test_pack_id(這是外鍵)中允許NULL值後,他在插入語句時收到此錯誤消息 INSERT語句與FOREIGN KEY約束\「FK_Line_TestPack \」衝突。數據庫\「TPM \」,表\「dbo.TestPack \」,列'id'發生衝突。\ r \ n該語句已被終止。 – WAQ
您是否在TestPackId字段中插入NULL?或者你在那裏插入實際值?如果你插入一個實際值,那麼你必須確保這個id也存在於TestPack表中。 – eugenioy
不,正如我所說的,當添加一條線時,測試包現在可能存在。稍後測試包可能會到達,我們將其添加到數據庫。 – WAQ
是否只有一行連接到_one_特定測試包,或者許多TestPack中是否可以包含單行記錄? –
我將不得不確認要求,但我的猜測是一條生產線將連接到一個測試包。你能指導我兩種可能性嗎? – WAQ
一行將始終是針對單個TestPack記錄的,但在將行添加到數據庫時,測試包可能不存在。 (已確認) – WAQ