如何将多个ID应用于Mysql中的一条记录?

我使用MySQL Workbench为电子商务创建了一个数据库,并使用Netbeans将所有内容放在一起.我有几个表格可以满足我要达到的目的.这些连接在一起的表中的两个是产品,当然是类别.

我正在将数据添加到两个表中.每个类别显然都有其自己的category_id.

问题是:一个产品可以属于多个类别(因此有多个category_id,但我不知道该怎么做,因为无论我使用命令行还是手动执行,Netbeans似乎只允许每个产品使用一个category_id.

如您在图片上看到的,名为mac的产品已设置为家用技术,category_id为208.但是同一产品也可能是209(办公技术)的一部分.

我该如何实现?每当我需要一个产品属于多个类别时,是否都需要为同一产品输入新行?假设某个产品可以属于3个类别,我是否需要输入3条记录?还有另一种方法,因为据我所知,那将是很长而且很累的,不是吗?

谢谢

解决方法:

在实体关系语言中,这称为多对多关系.一个产品可以有多个类别,一个类别可以有多个产品.

要在关系数据库中执行此操作,您需要三个表.

product:  product_id, name, description, etc
category: category_id, catname, catdescription, etc

然后用这个所谓的联接表建立产品和类别之间的关系.

product_category:  product_id, category_id

product_category的主键是两列在一起-这是复合主键.

如果您有这些产品

1 chromebook
2 minitower
3 macbook
4 laptop

和这些类别

1 chromeos
2 portable
3 windows 7
4 macos

然后,您将在product_category表中具有这些条目

1  1   chromebook categories: ... chromeos
1  2                          ... portable
2  3   minitower category     ... windows 7
3  2   macbook categories     ... portable
3  4                          ... macos
4  2   laptop categories      ... portable
4  3                          ... windows 7

因此,如果您想查看每种产品的类别,则可以

 SELECT name, description,
        GROUP_CONCAT(catname) categories
   FROM product
   JOIN product_category USING (product_id)
   JOIN category USING (category_id)

同样,如果您想要所有笔记本电脑,则可以执行此操作.

 SELECT name, description
   FROM product
   JOIN product_category USING (product_id)
   JOIN category USING (category_id)
  WHERE catname = 'laptop'

如果要使用所有的macos笔记本电脑设备,则要复杂一些.

 SELECT name, description
   FROM product p
   JOIN product_category pca ON p.product_id = pca.product_id
   JOIN category ca   ON pca.product_id = ca.product_id
                     AND ca.catname = 'macos'
   JOIN product_category pcb ON p.product_id = pcb.product_id
   JOIN category ca   ON pcb.product_id = cb.product_id
                     AND cb.catname = 'laptop'

请注意,组合主键可防止您多次将产品分配给类别,反之亦然.

专家提示:为清楚起见,在所有表中为连接的值使用相同的列名是一个好主意.例如,product_id同时显示在product和product_category表中.

上一篇:Java:无法实现采用通用参数的抽象方法


下一篇:asp程序调试