матрица совместимости - PullRequest
       1

матрица совместимости

0 голосов
/ 04 марта 2012

Как мне моделировать базу данных матрицы совместимости в SQL Server 2008;т.е. у меня 4 группы дизайна.Если я выберу группу 1 и группу 4, мой выбор повлияет на группу 2 и 3 и сделает их недоступными для выбора, потому что они не совместимы с моим выбором.

Я новичок, поэтому мое объяснение может показаться страннымпожалуйста, прости!

1 Ответ

1 голос
/ 05 марта 2012

Любой вид «матрицы» по сути является отношением M: N, только в этом случае обе «оси» матрицы представляют одну и ту же вещь («группы проектирования»). Отношение M: N таблицы к себе может быть смоделировано следующим образом:

enter image description here

Предполагая, что отношения являются двунаправленными, вы также должны добавить: CHECK(GROUP_ID1 < GROUP_ID2) в таблицу СОВМЕСТИМОСТИ. Это, например, позволило бы (1, 4), но не позволило бы (4, 1) находиться в таблице.

Пример из вашего вопроса будет представлен следующими данными в базе данных:

GROUP:

GROUP_ID
--------
1
2
3
4

СОВМЕСТИМОСТЬ:

GROUP_ID1    GROUP_ID2
---------    ---------
1            4

Когда пользователь выбирает группу X, вы должны выполнить следующий запрос, чтобы найти, с какими группами он совместим. Остальные группы совместимы с .

SELECT GROUP_ID1
FROM COMPATIBILITY
WHERE GROUP_ID2 = :X
UNION ALL
SELECT GROUP_ID2
FROM COMPATIBILITY
WHERE GROUP_ID1 = :X

Для 1 это вернет 4, а для 4 - 1. В любом из этих случаев 2 и 3 не будут возвращены - знак того, что они несовместимы.


С другой стороны, если вы хотите отключить 2 и 3, когда выбраны 1 и 4, а не когда выбраны только 1 или только 4, это другая проблема, которая будет более сложной. моделировать в реляционной парадигме. Дайте мне знать, если вам это действительно нужно ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...