动态关系

时间:2014-01-21 12:41:10

标签: sql-server table-relationships

例如,请查看下表:

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

在类型1的tblItems列中,IDData来自tblData1,如果类型为2 IDData,则与tblIDData2相关联。

应该在数据表中插入

记录,然后用户可以将记录插入到项目表中,这样我就必须设置关系以确保这一点。

在这种情况下,如何在Sql Server

中设置这些表之间的关系

3 个答案:

答案 0 :(得分: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

答案 1 :(得分: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

现在,您的表tblItems IDDataType将成为外键。在新的tblData中,您需要创建复合主键,以便在连接表时包含IDDataType,而不需要具有奇怪的逻辑。

答案 2 :(得分:0)

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

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

您可以使用sql使用case, when

等条件来模拟它

但不是你想要的。

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

像这样:

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

希望它有所帮助。