2014-01-21 2 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-го типа имеют a IDData от tblData1, и если тип был 2 IDData, связанный с tblIDData2.

записи должны быть вставлены в таблицы данных, а затем пользователь может вставить запись в таблицу элементов, поэтому мне нужно установить отношение, чтобы убедиться в этом.

в этом случае как установить отношения между этими таблицами в 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 

Теперь в вашей таблице tblItemsIDData и Type будут иностранными ключами. В новом tblData вам необходимо создать составной первичный ключ, чтобы включить IDData и Type теперь, когда вы присоединяетесь к столам, вам не нужно иметь странную логику.

+0

в этом примере ваш ответ в порядке, но на самом деле у меня есть другая структура таблицы для каждой из таблиц данных, поэтому я не могу их смешивать в одной таблице. – HaMeD

+0

У вас не может быть внешний ключ для нескольких таблиц. Это должно быть только между двумя таблицами. –

0

Я думаю, что вы не можете определить relatioship в этом случае .. (в SQLSERVER) ...

отношения должны быть в вашем коде. (C#, Java, другие) ..

Вы можете использовать SQL для его имитации с помощью условных, как case, when

Но не так, как вы хотите.

Другой способ сделать это создать еще одну структуру для таблиц ...

так:

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

Надеется, что это помогает.

Смежные вопросы