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 的列中IDDatatblData1如果类型为 2,则IDData与 tblIDData2 关联。

记录应该插入到数据表中,然后用户可以将记录插入到项目表中,所以我必须设置一个关系来确保这一点。

在这种情况下,如何设置这些表之间的关系Sql Server

4

3 回答 3

0

我会修改你的结构以适应以下

tblItems:

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

数据

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

现在在您的表中tblItems IDDataType将是外键。在 newtblData中,您需要创建要包含的复合主键IDDataType现在在加入表时,您不需要有奇怪的逻辑。

于 2014-01-21T12:52:26.653 回答
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
于 2014-01-21T12:46:52.807 回答
0

我认为在这种情况下你不能定义关系......(在 SQLSERVER 中)......

这种关系需要在您的代码中。(c#, java, 其他)..

您可以使用 sql 使用条件来模拟它,例如case, when

但不像你想要的那样。

其他方法是为您的表创建另一个结构......

像这样:

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

希望能帮助到你。

于 2014-01-21T12:58:39.910 回答