Database 数据库设计:列出所有组合或使用矩阵

Database 数据库设计:列出所有组合或使用矩阵,database,database-design,relational-database,Database,Database Design,Relational Database,我的同事和我正在学习更多关于数据库设计的知识。我们发现我们不知道下一步是什么。我喜欢考虑有3个组合框。我选择前2个值,最后一个值根据前2个值进行过滤。假设我们有3张表:颜色表、材质表、尺寸表 以下是颜色表设计: ID | Color_Name | Material_ID | Size_ID 为了选择一种颜色,它取决于按材质ID和大小ID进行过滤。我们有600多种颜色可供选择。我们有6种不同的材料。假设红色可以被4种材料使用。因此,在颜色表中,红色至少有4条记录。因此,从技术上讲,该表的

我的同事和我正在学习更多关于数据库设计的知识。我们发现我们不知道下一步是什么。我喜欢考虑有3个组合框。我选择前2个值,最后一个值根据前2个值进行过滤。假设我们有3张表:颜色表、材质表、尺寸表

以下是颜色表设计:

ID   | Color_Name   | Material_ID | Size_ID
为了选择一种颜色,它取决于按材质ID和大小ID进行过滤。我们有600多种颜色可供选择。我们有6种不同的材料。假设红色可以被4种材料使用。因此,在颜色表中,红色至少有4条记录。因此,从技术上讲,该表的最大尺寸为600*6*

问题是我们必须输入所有这些记录。颜色表将是一个静态表,我们很少输入更多颜色。在本表中输入所有可能的组合是否是最佳做法

还是我们用矩阵来找出所有可能的组合?我假设矩阵是一个表,但不确定如何创建一个比较两个以上字段的矩阵表。我们必须创建多维表


我们希望遵循设计数据库的最佳实践,这将有助于维护。我们愿意听取关于如何在现实世界中处理这一问题的所有建议/想法。谢谢你抽出时间

您的颜色表设计不好,需要标准化。每种颜色只能记录一次:

Color (ID PK, Color_Name)
然后材料、尺寸和颜色的组合可以表示为三元关系:

ColorMaterialSize (Color_ID, Material_ID, Size_ID)
花点时间想想这个。一列或两列的任何组合是否唯一/标识,或者三列的所有组合是否有效?在最小的唯一列集上定义主键

然后,您可以通过连接和过滤选择颜色:

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

因此,从我对您的答案的了解来看,在ColorMaterialSize表中列出所有组合将是最佳做法,而不是使用矩阵或其他解决方案?是的。矩阵和n维关系都可以用二维表表示,数据库引擎和语言都是为这种方法设计和优化的。非常感谢您的时间。因此,示例中的矩阵是ColorMaterialSize表。因此,列出每个可能的组合Except for Exception是正确的想法。因此,根据组合的数量,这可能会导致大量的数据输入。再次感谢。