Для того, чтобы произвести эти виды имени
1_Fabric_01_Textile
2_Metal_02_BrushedMetal
Основываясь на followin таблицах
Type
----------
Id Name
-- ------
1 1_Fabric
2 2_Metal
SubType
------------
Id Name
-- ------
1 01_Textile
2 02_Leather
3 01_Metal
4 02_BrushedMetal
И держать правила о том, какие типы могут относиться к подтипов Вы плохо нуждаются в реляционную таблицу, как:
Type_SubType
-----------------
TypeId SubTypeId
------ ---------
1 1
1 2
2 3
2 4
и если вам нужно больше уровней субподрядчика типы вы можете добавить больше таблиц
1_Fabric_01_Textile_001_BlueJeans_Denim
2_Metal_02_BrushedMetal_002_ChromeBrushed_Chrome
SubSubType
--------------
Id Name
-- ----------
1 001_BlueJeans_Denim
2 002_ChromeBrushed_Chrome
Type_SubType_SubSubType
-------------------------
TypeId SubTypeId SubSubType
------ --------- ----------
1 1 1
2 3 2
Теперь трюк должен сделать лучшую нормализацию для отношения третьего уровня. Это может быть достигнуто, если добавить столбец идентификации первой таблицы реляционной Так вместо этого вы можете использовать этот пример:
Type_SubType
---------------------
Id TypeId SubTypeId
-- ------ ---------
1 1 1
2 1 2
3 2 3
4 2 4
и соотнесение его на второй таблицы реляционной
Type_SubType_SubSubType
-------------------------
Type_SubTypeId SubSubType
-------------- ----------
1 1
3 2
для извлечения только возможные совпадения тривиальны
select * from type tp
join Type_SubType tp_sb on tp_sb.TypeId = tp.Id
join SubType sb on sb.Id = yb_sb.SubTypeId
или просто (если вы уже выбрали тип и поместить его в переменной @TypeId)
Select * from SubType sb
join Type_SubType tp_sb on tp_sb.SubTypeId = sb.Id
where tp_sb.TypeId = @TypeId
и так далее для SubSubTypes
примечание: только это решение охватывает фиксированный (или максимизирован) число суб-суб. Чтобы получить общий динамический уровень абстракций, вам не нужен рекурсивный FK. Не что-то вроде ракетной науки, но если вы по-прежнему основываете SQL, попробуйте использовать самый простой пример.
выглядит как простая проблема os создает пример реляционной таблицы: [Type], [SubType], [Type_SubType]. Вы даже можете создать реляционную таблицу [SubType_Subtype], чтобы получить больше уровней вариаций. – jean
Да, но как это сделать? Таблица материалов в основном требует внешнего ключа, который показывает правильную комбинацию type_ID и subType_ID, – Klemen
Вы передаете PK для [Type] другого в [SubType], а реляционная таблица просто сохраняет эту комбинацию как FK [Type_SubType] (FK_Type, FK_SubType).При выборе вы присоединяетесь к этим 3 таблицам и нет, а Type или SubType плохо получаете FKs напрямую друг для друга – jean