2014-01-21 54 views
0

例如看看下面的表:動態關係

tblItems:

ItemName IDData Type 
------------------------- 
i1   1   1 
i2   2   1 
i3   1   2 

tblData1:

IDData  Name 
------------------- 
1   Data11 
2   Data12 

tblData2:

IDData  Name 
----------------- 
1   Data21 
2   Data22 

tblItems類型1的列具有一個來自tblData1的以及如果類型是與tblIDData2相關聯的2 IDData

記錄應插入數據表中,然後用戶可以將記錄插入到項目表中,因此我必須設置關係以確保。

在這種情況下如何設置Sql Server這些表之間的關係?

+0

@SaUce沒錯,我認爲這是我的答案;) – HaMeD

回答

0

我相信這樣的事情會適合您的需要:

SELECT 
item.ItemName 
,CASE item.Type 
    WHEN 1 THEN data1.Name 
    WHEN 2 THEN data2.Name 
    ...add more? 
    END 
FROM tblItems item 
JOIN tblData1 data1 ON data1.IDData=item.IDData AND item.Type=1 
JOIN tblData2 data2 ON data2.IDData=item.IDData AND item.Type=2 
+0

我知道如何查詢這三個表的結果。 – HaMeD

+0

那麼,那麼問題是什麼? #lost – NickyvV

+0

我更新了問題再次檢查;) – HaMeD

0

我會修改結構,以適應以下

tblItems:

ItemName IDData Type 
------------------------- 
i1   1   1 
i2   2   1 
i3   1   2 

tblData

IDData  Name   Type 
-------------------------------- 
1   Data11   1 
2   Data12   1 
1   Data11   2 
2   Data12   2 

現在在您的表tblItemsIDDataType將是外鍵。在新的tblData中,您現在需要創建複合主鍵以包含IDDataType,現在在連接表時不需要具有奇怪的邏輯。

+0

在這個例子中你的回答是可以的,但實際上我對每個數據表有不同的表結構,所以我不能將它們混合在一個表中。 – HaMeD

+0

你不能有多個表的外鍵。它只能在兩個表格之間。 – 2014-01-21 13:08:35

0

我認爲你不能在這種情況下定義relatioship ..(在SQLSERVER)...

的關係將需要在你的代碼。 (C#,JAVA,等等)..

您可以使用SQL使用條件語句像case, when

它模擬但不喜歡你想要的。

做的另一種方法是創建另一個結構,你的表...

這樣的:

IDData  ItemName ItemType (this itemtype would be 1 or 2 representing the Data) 

希望它能幫助。