我正在尝试创建一个数据库,每个客户有几个订单(每天新订单),并且每个订单都有几个项目。我计划创建一张客户表并每订单创建一个表格,并使用"项目"表填充此表。我认为这种方法太复杂且笨重,因为订单的数量可以达到数千个,我认为拥有数千张桌子是可以维护的。您认为这是一个适当的结构?任何帮助是极大的赞赏。

抱歉,如果这是一个鲁尼什的问题,我正在学习编程。这是我第一次尝试数据库设计。

答案

您需要四个桌子,类似的东西:

Possible Simplified Database Model

顾客

包含客户列表。每个客户一排。将包含所有客户的信息 - 他们的联系方式等…

命令

包含订单列表。每个订单一行。每个订单都是由客户下达的Customer_ID - 可用于链接回客户记录。如果与客户地址不同的记录或在单独的表中的商店地址不同,则可能还存储交货地址。

OrderItems

包含订单项列表。订单上每个项目的一行 - 因此每个订单可以在此表中生成多行。订购的每个项目都是您库存中的产品,因此每行都有一个product_ID,该产品链接到产品表。

产品

包含产品列表。每个产品一排。与客户表相似,但对于产品 - 包含所有产品详细信息。

这是您可以用来创建此结构的SQL代码 - 它将为其本身创建一个数据库mydb

CREATE SCHEMA IF NOT EXISTS `mydb` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci ;
USE `mydb` ;

-- -----------------------------------------------------
-- Table `mydb`.`Customers`
-- -----------------------------------------------------
CREATE  TABLE IF NOT EXISTS `mydb`.`Customers` (
  `ID` INT NOT NULL ,
  `Name` TEXT NOT NULL ,
  `PhoneNo` VARCHAR(45) NULL ,
  PRIMARY KEY (`ID`) )
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `mydb`.`Orders`
-- -----------------------------------------------------
CREATE  TABLE IF NOT EXISTS `mydb`.`Orders` (
  `ID` INT NOT NULL ,
  `customer_id` INT NULL ,
  PRIMARY KEY (`ID`) ,
  INDEX `fk_Order_1_idx` (`customer_id` ASC) ,
  CONSTRAINT `fk_Order_1`
    FOREIGN KEY (`customer_id` )
    REFERENCES `mydb`.`Customers` (`ID` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `mydb`.`Products`
-- -----------------------------------------------------
CREATE  TABLE IF NOT EXISTS `mydb`.`Products` (
  `ID` INT NOT NULL ,
  `Name` VARCHAR(45) NOT NULL ,
  `Description` TEXT NULL ,
  PRIMARY KEY (`ID`) )
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `mydb`.`OrderItems`
-- -----------------------------------------------------
CREATE  TABLE IF NOT EXISTS `mydb`.`OrderItems` (
  `ID` INT NOT NULL ,
  `Order_ID` INT NOT NULL ,
  `Product_ID` INT NOT NULL ,
  `Quantity` INT NOT NULL ,
  PRIMARY KEY (`ID`) ,
  INDEX `fk_OrderItem_1_idx` (`Order_ID` ASC) ,
  INDEX `fk_OrderItem_2_idx` (`Product_ID` ASC) ,
  CONSTRAINT `fk_OrderItem_1`
    FOREIGN KEY (`Order_ID` )
    REFERENCES `mydb`.`Orders` (`ID` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION,
  CONSTRAINT `fk_OrderItem_2`
    FOREIGN KEY (`Product_ID` )
    REFERENCES `mydb`.`Products` (`ID` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB;

USE `mydb` ;

来自: stackoverflow.com