mysql - 针对我的要求提出架构/表设计建议

标签 mysql database database-schema

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

现在,我需要跟踪元素中使用的 Material ,例如棉花、 gem 、莱茵石、皮革等。一个必需的功能是识别由一种或多种特定 Material 制成的元素。例如,给定 Material 棉和莱茵石,我应该能够输出由棉和莱茵石(以及其他可能的 Material )制成的所有元素的列表。

那么,在考虑性能的情况下,针对此特定要求设计表的最佳方法是什么?

最佳答案

您应该有一个用于项目的表和一个用于 Material 的表,然后使用联结表来定义哪些项目包含哪些 Material ,反之亦然。.像这样的东西最好:

项目

Id
Name
Price
colour

Material

Id
Name
Description
...

元素 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'

或者对于构成元素的所有 Material :

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'

关于mysql - 针对我的要求提出架构/表设计建议,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8725384/

相关文章:

MySQL动态加减行

php - 在提交表单上使用 PHP 中的 echo 将数据显示到表中

javascript - AJAX 请求错误,尽管数据已成功更新。 "Unexpected Token <"

mysql - 从一个表中选择 1 条记录,从另一个表中选择 0.n 条记录

SQL 条件插入和其他以原子/全部或无/非交错方式完成的多个查询

java - 在指定的MSSQL-Schema中创建 View

sql - 二维数据库

php - CodeIgniter 更新查询不起作用

Mysql,实现日期时间列

mysql - SQL 数据库 : normalization vs. 性能?