我正在try 创建一个数据库,其中每个客户都有几个订单(每天都有新订单),每个订单都有几个项目.我计划创建一个Customers表, for each 订单创建一个表,并用一个"Items"表填充这个表.我认为这种方式太复杂太麻烦了,因为订单数量可以达到几千张,我不认为有几千张桌子是可以维护的.你认为什么样的 struct 才是合适的呢?如有任何帮助,我们将不胜感激.
抱歉,如果这是一个下流的问题,我正在学习编程.这是我第一次try 数据库设计.
我正在try 创建一个数据库,其中每个客户都有几个订单(每天都有新订单),每个订单都有几个项目.我计划创建一个Customers表, for each 订单创建一个表,并用一个"Items"表填充这个表.我认为这种方式太复杂太麻烦了,因为订单数量可以达到几千张,我不认为有几千张桌子是可以维护的.你认为什么样的 struct 才是合适的呢?如有任何帮助,我们将不胜感激.
抱歉,如果这是一个下流的问题,我正在学习编程.这是我第一次try 数据库设计.
你需要四张桌子,大概是这样的:
包含客户列表.每位顾客占一行.将包含客户的所有信息-他们的联系方式,等等.
包含订单列表.每个订单占一行.每个订单都是由一个客户下的,并且有一个Customer_ID
-可以用来链接回客户记录.还可以存储递送地址(如果与客户记录中的客户地址不同),或者将地址存储在单独的表中.
包含订单项的列表.订单上的每个项目对应一行——因此每个订单可以在该表中生成多行.订购的每个商品都是库存中的一个产品,因此每行都有一个product_id,该id链接到products表.
包含产品列表.每种产品占一行.类似于客户表,但对于产品-包含所有产品详细信息.
下面是可以用来创建此 struct 的SQL代码——它将为自己创建一个名为mydb
的数据库:
CREATE SCHEMA IF NOT EXISTS `mydb` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci ;
USE `mydb` ;
-- -----------------------------------------------------
-- Table `mydb`.`客户`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `mydb`.`客户` (
`ID` INT NOT NULL ,
`Name` TEXT NOT NULL ,
`PhoneNo` VARCHAR(45) NULL ,
PRIMARY KEY (`ID`) )
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table `mydb`.`订单`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `mydb`.`订单` (
`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`.`客户` (`ID` )
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table `mydb`.`产品`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `mydb`.`产品` (
`ID` INT NOT NULL ,
`Name` VARCHAR(45) NOT NULL ,
`Description` TEXT NULL ,
PRIMARY KEY (`ID`) )
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table `mydb`.`订单项`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `mydb`.`订单项` (
`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`.`订单` (`ID` )
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT `fk_OrderItem_2`
FOREIGN KEY (`Product_ID` )
REFERENCES `mydb`.`产品` (`ID` )
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
USE `mydb` ;