Estructura de la database para la tabla "cliente" que tiene muchos pedidos por cliente y muchos artículos por pedido

Intento crear una database donde cada cliente tenga varios pedidos (nuevos pedidos diarios) y cada pedido tenga varios artículos. Había planeado crear una tabla de clientes y crear una tabla por pedido y rellenar esta tabla con una tabla de "elementos". Creo que este enfoque es demasiado complicado y engorroso, ya que el número de pedidos puede llegar a miles, no creo que tener miles de tablas sea mantenible. ¿Cuál crees que sería una estructura apropiada para esto? Cualquier ayuda es muy apreciada.

Lo siento si esta es una pregunta noobish, estoy aprendiendo a progtwigr. Y este es mi primer bash de layout de database.

Necesitas cuatro tablas, algo como esto:

Posible modelo de base de datos simplificada

Clientes

Contiene una list de clientes Una fila por cliente. Contendría toda la información del cliente – sus detalles de contacto, etc.

Pedidos

Contiene una list de pedidos Una fila por order Cada pedido es realizado por un cliente y tiene un Customer_ID , que se puede utilizar para vincular de nuevo al logging del cliente. También podría almacenar la dirección de entrega, si es diferente de la dirección del cliente de su logging, o almacenar direcciones en tablas separadas.

Encargar artículos

Contiene una list de elementos de pedido. Una fila para cada artículo en una order, por lo que cada order puede generar múltiples filas en esta tabla. Cada artículo orderado es un producto de su deviseio, por lo que cada fila tiene un id_producto, que enlaza con la tabla de productos.

Productos

Contiene una list de productos. Una fila por producto Similar a la tabla de clientes, pero para productos: contiene todos los detalles del producto.

Aquí está el código SQL que podría usar para crear esta estructura: creará una database llamada mydb :

 CREATE SCHEMA IF NOT EXISTS `mydb` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci ; USE `mydb` ; -- ----------------------------------------------------- -- Table `mydb`.`Customer` -- ----------------------------------------------------- CREATE TABLE IF NOT EXISTS `mydb`.`Customer` ( `ID` INT NOT NULL , `Name` TEXT NOT NULL , `PhoneNo` VARCHAR(45) NULL , PRIMARY KEY (`ID`) ) ENGINE = InnoDB; -- ----------------------------------------------------- -- Table `mydb`.`Order` -- ----------------------------------------------------- CREATE TABLE IF NOT EXISTS `mydb`.`Order` ( `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`.`Customer` (`ID` ) ON DELETE NO ACTION ON UPDATE NO ACTION) ENGINE = InnoDB; -- ----------------------------------------------------- -- Table `mydb`.`Product` -- ----------------------------------------------------- CREATE TABLE IF NOT EXISTS `mydb`.`Product` ( `ID` INT NOT NULL , `Name` VARCHAR(45) NOT NULL , `Description` TEXT NULL , PRIMARY KEY (`ID`) ) ENGINE = InnoDB; -- ----------------------------------------------------- -- Table `mydb`.`OrderItem` -- ----------------------------------------------------- CREATE TABLE IF NOT EXISTS `mydb`.`OrderItem` ( `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`.`Order` (`ID` ) ON DELETE NO ACTION ON UPDATE NO ACTION, CONSTRAINT `fk_OrderItem_2` FOREIGN KEY (`Product_ID` ) REFERENCES `mydb`.`Product` (`ID` ) ON DELETE NO ACTION ON UPDATE NO ACTION) ENGINE = InnoDB; USE `mydb` ; 

No tiene sentido crear una tabla por order. No hagas eso. No es práctico, no se puede mantener. Normalmente no podrá consultar sus datos. Para empezar, todo lo que necesita son solo cuatro tablas como esta

  • clientes
  • pedidos
  • encargar artículos
  • productos (o artículos)

Aquí está la demostración simplificada de SQLFiddle

Tendría algo así como una tabla de clientes junto con órdenes y tablas de artículos. La key principal del cliente es la key externa de la order. Los artículos tendrán una key externa que coincida con el order en que se realizó.

3 tablas deben estar bien