【问题标题】:categories & sub categories with many to many relationship具有多对多关系的类别和子类别
【发布时间】:2012-08-21 03:34:24
【问题描述】:

我正在开始新项目,但不知道从哪里开始。我需要具有类别和 4 级子类别的数据库设计,但产品可以有多个类别。所以我很困惑我的数据库应该如何。请帮助我。 非常感谢您提前给我时间。

【问题讨论】:

    标签: many-to-many hierarchy categories


    【解决方案1】:

    product:保存带有 id 的产品
    category:保存带有 id 和 name 的类别以及该类别的父类别
    product_category :持有一种或多种产品与一种或多种类别之间的交叉关系...

    如果您在 mysql 或 良好的 DBMS 上使用 InnoDB,您应该定义外键约束:

    CREATE  TABLE IF NOT EXISTS `mydb`.`category` (
      `id` INT NOT NULL ,
      `name` VARCHAR(45) NULL ,
      `parent_id` INT NULL ,
      PRIMARY KEY (`id`) ,
      INDEX `parentCategory_idx` (`parent_id` ASC) ,
      CONSTRAINT `parentCategory`
        FOREIGN KEY (`parent_id` )
        REFERENCES `mydb`.`category` (`id` )
        ON DELETE CASCADE
        ON UPDATE CASCADE)
    ENGINE = InnoDB;
    
    
    
    CREATE  TABLE IF NOT EXISTS `mydb`.`product` (
      `id` INT NOT NULL ,
      `name` VARCHAR(45) NULL ,
      PRIMARY KEY (`id`) )
    ENGINE = InnoDB;
    
    CREATE  TABLE IF NOT EXISTS `mydb`.`product_category` (
      `product_id` INT NOT NULL ,
      `category_id` INT NOT NULL ,
      PRIMARY KEY (`product_id`, `category_id`) ,
      INDEX `product_idx` (`product_id` ASC) ,
      INDEX `category_idx` (`category_id` ASC) ,
      CONSTRAINT `product`
        FOREIGN KEY (`product_id` )
        REFERENCES `mydb`.`product` (`id` )
        ON DELETE CASCADE
        ON UPDATE CASCADE,
      CONSTRAINT `category`
        FOREIGN KEY (`category_id` )
        REFERENCES `mydb`.`category` (`id` )
        ON DELETE CASCADE
        ON UPDATE CASCADE)
    ENGINE = InnoDB;
    

    【讨论】:

    • 但是在这个答案中,数据库中的“相同”子类别是不一样的,或者至少如果你想通过 id 选择某些子类别
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多