2015-07-02 2 views
1

Я разрабатываю базу данных для организации материалов для 3D-продукции.MySQL фиксированные допустимые комбинации из нескольких таблиц

Материалы названы как 1_Fabric_01_Textile_001_BlueJeans_Denim и 2_Metal_02_BrushedMetal_002_ChromeBrushed_Chrome и т.д.

Итак, мне нужен стол материалов, которые в основном имеют информацию о материальном имени (последнее значение, смотрите выше) и комбинацию типа и подвариант. Каждый тип разрешил такие варианты, как 1_Fabric, имеет 01_Textile, 02_Leather, 2_Metal имеет 01_Metal, 02_BrushedMetal и так далее.

Теперь делать все комбинации не составит труда (т. 2_Metal_01Textile).

Любые идеи?

+0

выглядит как простая проблема os создает пример реляционной таблицы: [Type], [SubType], [Type_SubType]. Вы даже можете создать реляционную таблицу [SubType_Subtype], чтобы получить больше уровней вариаций. – jean

+0

Да, но как это сделать? Таблица материалов в основном требует внешнего ключа, который показывает правильную комбинацию type_ID и subType_ID, – Klemen

+0

Вы передаете PK для [Type] другого в [SubType], а реляционная таблица просто сохраняет эту комбинацию как FK [Type_SubType] (FK_Type, FK_SubType).При выборе вы присоединяетесь к этим 3 таблицам и нет, а Type или SubType плохо получаете FKs напрямую друг для друга – jean

ответ

0

Для того, чтобы произвести эти виды имени

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, попробуйте использовать самый простой пример.

+0

Спасибо, джинс. Я был впереди себя и пытался сделать что-то, не получив основных понятий. Вернемся к книгам для меня, отступит назад. Еще раз спасибо. – Klemen

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