兼容性矩阵

时间:2012-03-04 06:11:45

标签: sql-server-2008 database-design

如何在sql server 2008中建模兼容性矩阵数据库; 即我有4组设计。如果我选择第1组和第4组,我的选择将影响第2组和第3组,并且会使它们无法选择,因为它们与我的选择不兼容。

我是初学者,所以我的解释可能看似水汪汪,请原谅!

1 个答案:

答案 0 :(得分:1)

任何类型的“矩阵”本质上都是M:N关系,只有在这种情况下,矩阵的“轴”代表相同的东西(“设计组”)。表格与其自身的M:N关系可以这样建模:

enter image description here

假设关系是双向的,您还应在COMPATIBILITY表中添加: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都不会返回 - 这是一个不兼容的标志。


另一方面,如果你想在选择1 4时禁用2和3,但是当只选择1或只选择4时则不行,这是一个不同的问题,会更多复杂的关系范式模型。如果那是你真正需要的,请告诉我......