mysql - 如何处理数据库中的子类别?

标签 mysql sql database

我有以下格式的 csv 文件:

1043374544±Collectibles
1043374544±Decorative & Holiday
1043374544±Decorative by Brand
1043374544±Christopher Radko
1043397455±Collectibles
1043397455±Decorative & Holiday
1043397455±Decorative by Brand
1043397455±Enesco
1043397455±Precious Moments

数字是itemID,'±'是分隔符,分隔符后面是该item所属的类别。底部的每个类别都是前一个类别的子类别。因此,在本例中,就像收藏品 --> 装饰和假日 --> 按品牌装饰 --> Christopher Radko。问题是项目会有不同数量的类别。

那么我如何创建一个表格,以便我能够查询并知道每个类别或子类别中有哪些项目。

最佳答案

当一个项目可以有任意数量的类别并且一个类别可以包含任意数量的项目时,您就拥有了通常所说的 n:m 关系。

解决此问题的常用方法是添加第三个表“关系”,其中主键是另外两个表的表。

这是一个示例(* 表示属于主键一部分的列)

表格产品

id* | name            | price
----+-----------------+--------
1   | Thingamy        | 3.45
2   | Whatchamacallit | 2.99
3   | FooBarWidget    | 1.00

表格类别:

id* | name
----+-------------
1   | Collectibles
2   | Holiday
3   | Decorative

表类别_产品

product_id* | category_id*
------------+---------------
1           | 1             // Thingamy is a Collectible item
2           | 1             // Whatchamacallit is a Collectible item
2           | 2             // Whatchamacallit is also a Holiday item

由于关系表的两列都是主键的一部分,因此对于每种可能的组合,它只能有一个条目。拥有该条目意味着拥有该类别分配。

关于mysql - 如何处理数据库中的子类别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35227955/

相关文章:

php - 无法使用 PHP 从数据库获取正确的字段

mysql - 选择时剪切mysql数据

mysql - 使用 MySQL,有什么方法可以转储数据库中所有 200 个表中每个表中的记录数?

sql - 后缀 : How to select the first row of each group?

database - Postgres 基于聚合优化查询索引

mysql - 组之间共享多少对象?

mysql - 循环表中数字列的总计(不是查询的总计)

MySQL 外键导致表删除

php - 从mysql获取数据到StreamBuilder Flutter

sql - 将枚举值保存到数据库