根据我的要求建议架构/表格设计

时间:2012-01-04 10:35:35

标签: mysql database database-schema

这是一个Item表,用于存储基本商品信息,如名称,价格,颜色等。

现在,我需要跟踪像棉花,宝石,水钻,皮革等物品中使用的材料。一个必要的功能是识别由一种或多种部分材料制成的物品。例如,考虑到材料棉和水钻,我应该能够输出所有由棉花和水钻制成的物品清单(以及其他可能的材料)。

那么,考虑到性能,为这个特定要求设计表的最佳方法是什么?

2 个答案:

答案 0 :(得分:3)

你应该有一个表项和一个材料表,然后用一个联结表来定义哪些项包含哪些材料,反之亦然..这样的东西最好:

项目

Id
Name
Price
colour

材料

Id
Name
Description
...

Item_Material

Item_Id (FK to Item.Id)
Material_Id (FX to Material.Id)

然后,如果你想获得所有带有棉花的物品,你会写一个像这样的查询:

SELECT ITEM.*
FROM ITEM INNER JOIN ITEM_MATERIAL ON ITEM.ID = ITEM_MATERIAL.ITEM_ID
INNER JOIN MATERIAL ON MATERIAL.ID = ITEM_MATERIAL.MATERIAL_ID
WHERE MATERIAL.NAME = 'cotton'

或者对于构成项目的所有材料:

SELECT MATERIAL.*
FROM ITEM INNER JOIN ITEM_MATERIAL ON ITEM.ID = ITEM_MATERIAL.ITEM_ID
INNER JOIN MATERIAL ON MATERIAL.ID = ITEM_MATERIAL.MATERIAL_ID
WHERE ITEM.NAME = 'handbag'

答案 1 :(得分:0)

这一切都取决于要求(像往常一样);这种解决方案通常被称为“物料清单”,并且可能变得相当复杂。对BoM概念here进行了很好的写作。

最常见的复杂情况是您意识到物品需要其他物品 - 例如,汽车需要车轮,但车轮需要轮毂盖,轮辋,制动器组件;制动器组件又需要衬垫和水力等。

如果这不是您的要求(并且您没有说明,那么我可能会过度思考这一点),层次结构设计仍然在概念上有效,但可能效率最低。

相关问题