数据库模型修正mysql?

时间:2018-06-05 07:37:25

标签: mysql sql

我创建了一个包含3个表格的数据库:“产品”,“品牌”和“类别”。

产品表格包含product_idbrand_idcategory_id等。因此,通过使用其他表格中的category_idbrand_id,我可以选择并展示产品表中的不同数据。

但是,我想要一个解决方案,例如,如果产品属于两个或更多类别会怎么样?数据库模型应该是什么以及我需要在数据库中执行哪些更改表?

我的表格结构如下:

  • 数据库:

    database

  • 品牌表:

    brand table

  • 类别表:

    category table

  • 产品表:

    product table

2 个答案:

答案 0 :(得分:1)

产品和类别表之间的基数映射是多对多的。因此,您必须根据数据库规范化创建新表以保持记录产品和类别关系。因此,从产品表中删除category_id并创建如下所示的表。例如

create table productCategory(
product_id integer references product_table(product_id),
category_id interger references category_table(category_id),
primary key (product_id,category_id)
);

答案 1 :(得分:0)

我的逻辑有两个解决方案:

  1. 使用VARCHAR或TEXT更改产品表中cat_id列的类型,因此每个产品的cat_id都用逗号或冒号分隔,示例值为: 1,4,5
  2. 从产品表中删除列cat_id,添加另一个表以将产品映射到cat_id,示例方案:

    CREATE TABLE product_mapping(     id INT(11)NOT NULL AUTO_INCREMENT,     product_id INT(11)NOT NULL,     cat_id INT(11)NOT NULL,     主要关键(id) )

  3. 所以..你可以通过加入3表来查询产品信息,例如查询如下:

    SELECT pm.cat_id AS m_cat_id, pm.product_id AS m_product_id, p.*, c.*
    FROM product_mapping AS pm
    INNER JOIN products AS p ON p.id = pm.product_id
    LEFT JOIN categories AS c ON c.cat_id = pm.cat_id
    WHERE pm.product_id = :produc_id