数据库设计:列出所有组合或使用矩阵
Database Design: List All Combinations or Use Matrix
我和我的同事正在学习更多关于数据库设计的知识。我们发现了一种情况,我们不知道下一步是什么。我喜欢把它想象成有 3 个组合框。我选择前 2 个值,最后一个值根据前 2 个值进行过滤。假设我们有 3 tables:Color Table, Material Table, Size Table
.
下面是颜色Table设计:
ID | Color_Name | Material_ID | Size_ID
要选择颜色,取决于 Material_ID
和 Size_ID
的筛选。我们有 600 多种颜色可供选择。我们有 6 种不同的材料。假设红色可以被 4 种材质使用。所以在 Color Table 中你至少有 4 条红色记录。所以这个 table 在技术上可以有最大值 600 * 6 *
(# of sizes)。
问题是我们必须输入所有这些记录。颜色 Table 将是 static table(我们很少输入更多颜色)。在此 table 中输入所有可能的组合是否是最佳做法?
或者我们是否使用矩阵找出所有可能的组合?我假设矩阵是 table,但不确定如何创建比较 2 个以上字段的矩阵 table(必须创建多维 table)。
我们希望遵循设计有助于维护的数据库的最佳做法。我们向所有 suggestions/ideas 开放关于在现实世界中如何处理的信息。 感谢您的宝贵时间!
您的颜色 table 设计不佳,需要标准化。每种颜色只记录一次:
Color (ID PK, Color_Name)
然后材料、尺寸和颜色的组合可以表示为三元关系:
ColorMaterialSize (Color_ID, Material_ID, Size_ID)
花点时间考虑一下这个。是一列或两列的任意组合 unique/identifying,还是三列的所有组合都有效?在最小的唯一列集上定义主键。
然后您可以通过连接和过滤 select 颜色:
SELECT c.ID, c.Color_Name
FROM Color AS c
INNER JOIN ColorMaterialSize AS cms ON c.ID = cms.Color_ID
WHERE cms.Material_ID = 1 AND cms.Size_ID = 2
我和我的同事正在学习更多关于数据库设计的知识。我们发现了一种情况,我们不知道下一步是什么。我喜欢把它想象成有 3 个组合框。我选择前 2 个值,最后一个值根据前 2 个值进行过滤。假设我们有 3 tables:Color Table, Material Table, Size Table
.
下面是颜色Table设计:
ID | Color_Name | Material_ID | Size_ID
要选择颜色,取决于 Material_ID
和 Size_ID
的筛选。我们有 600 多种颜色可供选择。我们有 6 种不同的材料。假设红色可以被 4 种材质使用。所以在 Color Table 中你至少有 4 条红色记录。所以这个 table 在技术上可以有最大值 600 * 6 *
(# of sizes)。
问题是我们必须输入所有这些记录。颜色 Table 将是 static table(我们很少输入更多颜色)。在此 table 中输入所有可能的组合是否是最佳做法?
或者我们是否使用矩阵找出所有可能的组合?我假设矩阵是 table,但不确定如何创建比较 2 个以上字段的矩阵 table(必须创建多维 table)。
我们希望遵循设计有助于维护的数据库的最佳做法。我们向所有 suggestions/ideas 开放关于在现实世界中如何处理的信息。 感谢您的宝贵时间!
您的颜色 table 设计不佳,需要标准化。每种颜色只记录一次:
Color (ID PK, Color_Name)
然后材料、尺寸和颜色的组合可以表示为三元关系:
ColorMaterialSize (Color_ID, Material_ID, Size_ID)
花点时间考虑一下这个。是一列或两列的任意组合 unique/identifying,还是三列的所有组合都有效?在最小的唯一列集上定义主键。
然后您可以通过连接和过滤 select 颜色:
SELECT c.ID, c.Color_Name
FROM Color AS c
INNER JOIN ColorMaterialSize AS cms ON c.ID = cms.Color_ID
WHERE cms.Material_ID = 1 AND cms.Size_ID = 2