这是一个Item表,用于存储基本商品信息,如名称,价格,颜色等。
现在,我需要跟踪像棉花,宝石,水钻,皮革等物品中使用的材料。一个必要的功能是识别由一种或多种部分材料制成的物品。例如,考虑到材料棉和水钻,我应该能够输出所有由棉花和水钻制成的物品清单(以及其他可能的材料)。
那么,考虑到性能,为这个特定要求设计表的最佳方法是什么?
答案 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进行了很好的写作。
最常见的复杂情况是您意识到物品需要其他物品 - 例如,汽车需要车轮,但车轮需要轮毂盖,轮辋,制动器组件;制动器组件又需要衬垫和水力等。
如果这不是您的要求(并且您没有说明,那么我可能会过度思考这一点),层次结构设计仍然在概念上有效,但可能效率最低。