Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Guia para projetar banco de dados para carrinho de compras on-line no MySQL


Este tutorial fornece etapas completas para projetar um esquema de banco de dados de lojas online e carrinhos de compras para gerenciar usuários, produtos, avaliações, carrinhos, pedidos e pagamentos. Ele também pode ser usado para desenvolver uma loja online e sites ou aplicativos baseados em carrinho de compras.



O diagrama de relacionamento de entidade ou design de banco de dados visual é mostrado abaixo.



Carrinho de compras on-line



Observações :Permite que os pedidos dos hóspedes façam o pedido sem fazer login. A segurança pode ser tratada seguindo o banco de dados RBAC no MySql.



Você também pode visitar os tutoriais populares, incluindo Como instalar o MySQL 8 no Ubuntu, Como instalar o MySQL 8 no Windows, Como instalar o MySQL 8 com o Workbench no Windows 10, Banco de dados RBAC no MySql, Banco de dados do blog no MySql, Banco de dados do questionário no MySQL, Banco de dados de pesquisa e pesquisa no MySQL e aprenda consultas básicas de SQL no MySQL.


Banco de dados da loja




O primeiro passo é criar o banco de dados da loja. Ele pode ser criado usando a consulta conforme mostrado abaixo.


CREATE SCHEMA `shop` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;



Eu usei o conjunto de caracteres utf8mb4 para suportar uma ampla gama de caracteres.


Tabela de usuário




Nesta seção, projetaremos a Tabela do usuário para armazenar informações do usuário. A mesma tabela pode ser usada para gerenciar diferentes tipos de usuários, incluindo administradores e clientes. Também pode ser usado para relacionar os criadores de produtos (a partir do painel de administração) e os pedidos dos clientes feitos no site. Os usuários podem acompanhar seus próprios pedidos e acompanhar o status. Abaixo está a descrição de todas as colunas da Tabela de Usuários.


ID O ID exclusivo para identificar o usuário.
Nome O primeiro nome do usuário.
Nome do meio O nome do meio do usuário.
Sobrenome O sobrenome do usuário.
Celular O número de celular do usuário. Ele pode ser usado para fins de login e registro.
E-mail O e-mail do usuário. Ele pode ser usado para fins de login e registro.
Hash de senha O hash de senha gerado pelo algoritmo apropriado. Devemos evitar armazenar senhas simples ou criptografadas.
Administrador O sinalizador para identificar se o usuário é um administrador. Não é necessário se as tabelas RBAC forem criadas seguindo o design do banco de dados RBAC.
Fornecedor O sinalizador para identificar se o usuário pode hospedar um produto na loja. Não é necessário se as tabelas RBAC forem criadas seguindo o design do banco de dados RBAC.
Registrado em Esta coluna pode ser usada para calcular a vida útil do usuário com o aplicativo.
Último login Pode ser usado para identificar o último login do usuário.
Introdução A breve introdução do Usuário Fornecedor a ser exibida na Página do Produto.
Perfil Os detalhes do fornecedor a serem exibidos na página do produto.



A Tabela de Usuários com as restrições apropriadas é mostrada abaixo.


CREATE TABLE `shop`.`user` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`firstName` VARCHAR(50) NULL DEFAULT NULL,
`middleName` VARCHAR(50) NULL DEFAULT NULL,
`lastName` VARCHAR(50) NULL DEFAULT NULL,
`mobile` VARCHAR(15) NULL,
`email` VARCHAR(50) NULL,
`passwordHash` VARCHAR(32) NOT NULL,
`admin` TINYINT(1) NOT NULL DEFAULT 0,
`vendor` TINYINT(1) NOT NULL DEFAULT 0,
`registeredAt` DATETIME NOT NULL,
`lastLogin` DATETIME NULL DEFAULT NULL,
`intro` TINYTEXT NULL DEFAULT NULL,
`profile` TEXT NULL DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE INDEX `uq_mobile` (`mobile` ASC),
UNIQUE INDEX `uq_email` (`email` ASC) );


Tabela de produtos




Nesta seção, projetaremos a Tabela de produtos para armazenar os dados do produto. Abaixo está a descrição de todas as colunas da Tabela de Produtos.


ID O ID exclusivo para identificar o produto.
ID de usuário O ID do usuário para identificar o administrador ou fornecedor.
Título O título do produto a ser exibido na página da loja e na página do produto.
Metatítulo O meta-título a ser usado para o título do navegador e SEO.
Slug O slug para formar o URL.
Resumo O resumo para mencionar os principais destaques.
Tipo O tipo para distinguir entre os diferentes tipos de produtos.
SKU A Unidade de Manutenção de Estoque para rastrear o inventário de produtos.
Preço O preço do produto.
Desconto O desconto no produto.
Quantidade A quantidade disponível do produto.
Loja Ele pode ser usado para identificar se o produto está disponível publicamente para compras.
Criado em Ele armazena a data e hora em que o produto foi criado.
Atualizado em Ele armazena a data e hora em que o produto é atualizado.
Publicado em Armazena a data e hora em que o produto é publicado na Loja.
Começa em Ele armazena a data e hora em que a venda do produto começa.
Termina em Ele armazena a data e hora em que a venda do produto termina.
Conteúdo A coluna usada para armazenar os detalhes adicionais do produto.



Ele usa a quantidade da coluna para rastrear o estoque disponível no inventário de produtos para manter o design simples. Pode ser necessário especificar a quantidade em várias colunas para cobrir uma ampla gama de produtos. As colunas possíveis podem ser sellQuantity, sellUnit, stockQuantity e stockUnit, onde sellQuantity e sellUnit podem ser usados ​​para serem exibidos na Loja para os compradores e stockQuantity e stockUnit podem ser usados ​​para rastrear o inventário. Também pode ser necessário converter o sellUnit em stockUnit enquanto atualiza o estoque ao fazer o pedido. A Tabela de Produtos com as restrições apropriadas é mostrada abaixo.


CREATE TABLE `shop`.`product` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`userId` BIGINT NOT NULL,
`title` VARCHAR(75) NOT NULL,
`metaTitle` VARCHAR(100) NULL,
`slug` VARCHAR(100) NOT NULL,
`summary` TINYTEXT NULL,
`type` SMALLINT(6) NOT NULL DEFAULT 0,
`sku` VARCHAR(100) NOT NULL,
`price` FLOAT NOT NULL DEFAULT 0,
`discount` FLOAT NOT NULL DEFAULT 0,
`quantity` SMALLINT(6) NOT NULL DEFAULT 0,
`shop` TINYINT(1) NOT NULL DEFAULT 0,
`createdAt` DATETIME NOT NULL,
`updatedAt` DATETIME NULL DEFAULT NULL,
`publishedAt` DATETIME NULL DEFAULT NULL,
`startsAt` DATETIME NULL DEFAULT NULL,
`endsAt` DATETIME NULL DEFAULT NULL,
`content` TEXT NULL DEFAULT NULL,
PRIMARY KEY (`id`),
UNIQUE INDEX `uq_slug` (`slug` ASC),
INDEX `idx_product_user` (`userId` ASC),
CONSTRAINT `fk_product_user`
FOREIGN KEY (`userId`)
REFERENCES `shop`.`user` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION);


Meta do Produto




A Meta Tabela do Produto pode ser usada para armazenar informações adicionais sobre os produtos, incluindo o URL do banner do produto, etc. Abaixo está a descrição de todas as colunas da Meta Tabela do Produto.


ID O ID exclusivo para identificar a meta do produto.
ID do produto O ID do produto para identificar o produto pai.
Chave A chave que identifica o meta.
Conteúdo A coluna usada para armazenar os metadados do produto.



A Tabela Meta do Produto com as restrições apropriadas é mostrada abaixo.


CREATE TABLE `shop`.`product_meta` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`productId` BIGINT NOT NULL,
`key` VARCHAR(50) NOT NULL,
`content` TEXT NULL DEFAULT NULL,
PRIMARY KEY (`id`),
INDEX `idx_meta_product` (`productId` ASC),
UNIQUE INDEX `uq_product_meta` (`productId` ASC, `key` ASC),
CONSTRAINT `fk_meta_product`
FOREIGN KEY (`productId`)
REFERENCES `shop`.`product` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;


Tabela de Revisão de Produto




Nesta seção, projetaremos a Tabela de revisão de produtos para armazenar as avaliações do produto. Abaixo está a descrição de todas as colunas da Tabela de Revisão do Produto.


ID O ID exclusivo para identificar a avaliação do produto.
ID do produto O ID do produto para identificar o produto pai.
ID pai O ID do pai para identificar a avaliação do pai.
Título O título da avaliação.
Classificação A classificação do comentário.
Publicado Pode ser usado para identificar se a avaliação está disponível publicamente.
Criado em Ele armazena a data e hora em que a avaliação é enviada.
Publicado em Ele armazena a data e hora em que a avaliação é publicada.
Conteúdo A coluna usada para armazenar os detalhes da revisão.



A Tabela de Revisão do Produto com as restrições apropriadas é mostrada abaixo.


CREATE TABLE `shop`.`product_review` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`productId` BIGINT NOT NULL,
`parentId` BIGINT NULL DEFAULT NULL,
`title` VARCHAR(100) NOT NULL,
`rating` SMALLINT(6) NOT NULL DEFAULT 0,
`published` TINYINT(1) NOT NULL DEFAULT 0,
`createdAt` DATETIME NOT NULL,
`publishedAt` DATETIME NULL DEFAULT NULL,
`content` TEXT NULL DEFAULT NULL,
PRIMARY KEY (`id`),
INDEX `idx_review_product` (`productId` ASC),
CONSTRAINT `fk_review_product`
FOREIGN KEY (`productId`)
REFERENCES `shop`.`product` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION);

ALTER TABLE `shop`.`product_review`
ADD INDEX `idx_review_parent` (`parentId` ASC);
ALTER TABLE `shop`.`product_review`
ADD CONSTRAINT `fk_review_parent`
FOREIGN KEY (`parentId`)
REFERENCES `shop`.`product_review` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION;


Tabela de categorias e Tabela de categorias de produtos




Nesta seção, projetaremos a Tabela de categorias e Tabela de categorias de produtos para armazenar as categorias de produtos e seus mapeamentos. Abaixo está a descrição de todas as colunas da Tabela de Categorias.


ID O ID exclusivo para identificar a categoria.
ID pai O ID pai para identificar a categoria pai.
Título O título da categoria.
Metatítulo O meta-título a ser usado para o título do navegador e SEO.
Slug O slug de categoria para formar o URL.
Conteúdo A coluna usada para armazenar os detalhes da categoria.



A Tabela de Categorias com as restrições apropriadas é mostrada abaixo.


CREATE TABLE `shop`.`category` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`parentId` BIGINT NULL DEFAULT NULL,
`title` VARCHAR(75) NOT NULL,
`metaTitle` VARCHAR(100) NULL DEFAULT NULL,
`slug` VARCHAR(100) NOT NULL,
`content` TEXT NULL DEFAULT NULL,
PRIMARY KEY (`id`));

ALTER TABLE `shop`.`category`
ADD INDEX `idx_category_parent` (`parentId` ASC);
ALTER TABLE `shop`.`category`
ADD CONSTRAINT `fk_category_parent`
FOREIGN KEY (`parentId`)
REFERENCES `shop`.`category` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION;



Abaixo está a descrição de todas as colunas da Tabela de Categoria de Produto.


ID do produto O ID do produto para identificar o produto.
ID da categoria O ID da categoria para identificar a categoria.



A Tabela de Categoria de Produto com as restrições apropriadas é mostrada abaixo.


CREATE TABLE `shop`.`product_category` (
`productId` BIGINT NOT NULL,
`categoryId` BIGINT NOT NULL,
PRIMARY KEY (`productId`, `categoryId`),
INDEX `idx_pc_category` (`categoryId` ASC),
INDEX `idx_pc_product` (`productId` ASC),
CONSTRAINT `fk_pc_product`
FOREIGN KEY (`productId`)
REFERENCES `shop`.`product` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT `fk_pc_category`
FOREIGN KEY (`categoryId`)
REFERENCES `shop`.`category` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION);


Tabela de tags e tabela de tags de produtos




Semelhante às tabelas de categorias e categorias de produtos, podemos criar a Tabela de tags e Tabela de tags de produtos . As principais diferenças entre a Categoria e a Tag estão listadas abaixo.


  • A coluna parentId não é obrigatória na Tabela de tags.
  • A contagem de categorias permanece baixa, pois elas podem ser usadas para formar o menu principal para fins de navegação. As tags podem ser mais do que categorias.
  • Tanto as categorias quanto as tags podem ser usadas para relacionar os produtos.
  • Deve-se atribuir apenas algumas categorias a um produto, enquanto a contagem de tags pode ser maior.


Tabela de carrinho e tabela de itens de carrinho




Esta seção fornece as tabelas para gerenciar os carrinhos virtuais para armazenar a seleção do usuário antes de criar o pedido real. Se o usuário cancelar o pagamento ou o pagamento falhar, os mesmos carrinhos podem ser usados ​​como carrinho abandonado pela equipe de marketing para consultar os compradores. Um usuário logado também pode ser associado ao carrinho. Abaixo está a descrição de todas as colunas da Tabela de Carrinhos.



Observações :A Tabela do carrinho e a Tabela de itens do carrinho podem ser opcionais se os dados locais, a sessão ou o banco de dados na memória, como o Redis, for usado para armazenar os dados do carrinho. O mesmo pode ser consultado para criar o pedido no caso de sucesso do pagamento.


ID O ID exclusivo para identificar o carrinho.
ID de usuário O ID do usuário para identificar o usuário ou comprador associado ao carrinho.
ID da sessão O ID de sessão exclusivo associado ao carrinho.
Token O token exclusivo associado ao carrinho para identificar o carrinho em várias sessões. O mesmo token também pode ser passado para o gateway de pagamento, se necessário.
Estado O status do carrinho pode ser Novo, Carrinho, Finalizar compra, Pago, Completo e Abandonado.
Nome O primeiro nome do usuário.
Nome do meio O nome do meio do usuário.
Sobrenome O sobrenome do usuário.
Celular O número de celular do usuário.
E-mail O e-mail do usuário.
Linha 1 A primeira linha para armazenar o endereço.
Linha 2 A segunda linha para armazenar o endereço.
Cidade A cidade do endereço.
Província A província do endereço.
País O país do endereço.
Criado em Ele armazena a data e hora em que o carrinho foi criado.
Atualizado em Ele armazena a data e hora em que o carrinho é atualizado.
Conteúdo A coluna usada para armazenar os detalhes adicionais do carrinho.



A Tabela do Carrinho com as restrições apropriadas é mostrada abaixo.


CREATE TABLE `shop`.`cart` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`userId` BIGINT NULL DEFAULT NULL,
`sessionId` VARCHAR(100) NOT NULL,
`token` VARCHAR(100) NOT NULL,
`status` SMALLINT(6) NOT NULL DEFAULT 0,
`firstName` VARCHAR(50) NULL DEFAULT NULL,
`middleName` VARCHAR(50) NULL DEFAULT NULL,
`lastName` VARCHAR(50) NULL DEFAULT NULL,
`mobile` VARCHAR(15) NULL,
`email` VARCHAR(50) NULL,
`line1` VARCHAR(50) NULL DEFAULT NULL,
`line2` VARCHAR(50) NULL DEFAULT NULL,
`city` VARCHAR(50) NULL DEFAULT NULL,
`province` VARCHAR(50) NULL DEFAULT NULL,
`country` VARCHAR(50) NULL DEFAULT NULL,
`createdAt` DATETIME NOT NULL,
`updatedAt` DATETIME NULL DEFAULT NULL,
`content` TEXT NULL DEFAULT NULL,
PRIMARY KEY (`id`),
INDEX `idx_cart_user` (`userId` ASC),
CONSTRAINT `fk_cart_user`
FOREIGN KEY (`userId`)
REFERENCES `shop`.`user` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION);



Abaixo está a descrição de todas as colunas da Tabela de Itens do Carrinho.


ID O ID exclusivo para identificar o item do carrinho.
ID do produto O ID do produto para identificar o produto associado ao item do carrinho.
ID do carrinho O ID do carrinho para identificar o carrinho associado ao item do carrinho.
SKU O SKU do produto ao comprá-lo.
Preço O preço do produto ao comprá-lo.
Desconto O desconto do produto ao comprá-lo.
Quantidade A quantidade do produto selecionada pelo usuário.
Ativo O sinalizador para identificar se o produto está ativo no carrinho. Ele pode ser usado para evitar que o mesmo produto seja adicionado ao mesmo carrinho várias vezes.
Criado em Ele armazena a data e a hora em que o item do carrinho foi criado.
Atualizado em Ele armazena a data e hora em que o item do carrinho é atualizado.
Conteúdo A coluna usada para armazenar os detalhes adicionais do item do carrinho.



A Tabela de itens do carrinho com as restrições apropriadas é mostrada abaixo.


CREATE TABLE `shop`.`cart_item` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`productId` BIGINT NOT NULL,
`cartId` BIGINT NOT NULL,
`sku` VARCHAR(100) NOT NULL,
`price` FLOAT NOT NULL DEFAULT 0,
`discount` FLOAT NOT NULL DEFAULT 0,
`quantity` SMALLINT(6) NOT NULL DEFAULT 0,
`active` TINYINT(1) NOT NULL DEFAULT 0,
`createdAt` DATETIME NOT NULL,
`updatedAt` DATETIME NULL DEFAULT NULL,
`content` TEXT NULL DEFAULT NULL,
PRIMARY KEY (`id`),
INDEX `idx_cart_item_product` (`productId` ASC),
CONSTRAINT `fk_cart_item_product`
FOREIGN KEY (`productId`)
REFERENCES `shop`.`product` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION);

ALTER TABLE `shop`.`cart_item`
ADD INDEX `idx_cart_item_cart` (`cartId` ASC);
ALTER TABLE `shop`.`cart_item`
ADD CONSTRAINT `fk_cart_item_cart`
FOREIGN KEY (`cartId`)
REFERENCES `shop`.`cart` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION;


Tabela de pedidos e tabela de itens de pedidos




Esta seção fornece as tabelas para gerenciar os pedidos da loja. Um usuário logado também pode ser associado ao pedido. Abaixo está a descrição de todas as colunas da Tabela de Pedidos.


ID O ID exclusivo para identificar o pedido.
ID de usuário O ID do usuário para identificar o usuário ou comprador associado ao pedido.
ID da sessão O ID de sessão exclusivo associado ao pedido.
Token O token exclusivo associado ao pedido para identificá-lo em várias sessões. O mesmo token também pode ser passado para o gateway de pagamento, se necessário.
Estado O status do pedido pode ser Novo, Finalizado, Pago, Reprovado, Enviado, Entregue, Devolvido e Concluído.
Subtotal O preço total dos itens do pedido.
Desconto de item O desconto total dos itens do pedido.
Imposto O imposto sobre os itens do pedido.
Envio As taxas de envio dos itens do pedido.
Total O preço total do pedido, incluindo impostos e frete. Exclui o desconto de itens.
Promoção O código promocional do pedido.
Desconto O desconto total do pedido com base no código promocional ou desconto da loja.
Total geral O total geral do pedido a ser pago pelo comprador.
Nome O primeiro nome do usuário.
Nome do meio O nome do meio do usuário.
Sobrenome O sobrenome do usuário.
Celular O número de celular do usuário.
E-mail O e-mail do usuário.
Linha 1 A primeira linha para armazenar o endereço.
Linha 2 A segunda linha para armazenar o endereço.
Cidade A cidade do endereço.
Província A província do endereço.
País O país do endereço.
Criado em Ele armazena a data e hora em que o pedido foi criado.
Atualizado em Ele armazena a data e hora em que o pedido é atualizado.
Conteúdo A coluna usada para armazenar os detalhes adicionais do pedido.



A Tabela de Pedidos com as restrições apropriadas é mostrada abaixo.


CREATE TABLE `shop`.`order` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`userId` BIGINT NULL DEFAULT NULL,
`sessionId` VARCHAR(100) NOT NULL,
`token` VARCHAR(100) NOT NULL,
`status` SMALLINT(6) NOT NULL DEFAULT 0,
`subTotal` FLOAT NOT NULL DEFAULT 0,
`itemDiscount` FLOAT NOT NULL DEFAULT 0,
`tax` FLOAT NOT NULL DEFAULT 0,
`shipping` FLOAT NOT NULL DEFAULT 0,
`total` FLOAT NOT NULL DEFAULT 0,
`promo` VARCHAR(50) NULL DEFAULT NULL,
`discount` FLOAT NOT NULL DEFAULT 0,
`grandTotal` FLOAT NOT NULL DEFAULT 0,
`firstName` VARCHAR(50) NULL DEFAULT NULL,
`middleName` VARCHAR(50) NULL DEFAULT NULL,
`lastName` VARCHAR(50) NULL DEFAULT NULL,
`mobile` VARCHAR(15) NULL,
`email` VARCHAR(50) NULL,
`line1` VARCHAR(50) NULL DEFAULT NULL,
`line2` VARCHAR(50) NULL DEFAULT NULL,
`city` VARCHAR(50) NULL DEFAULT NULL,
`province` VARCHAR(50) NULL DEFAULT NULL,
`country` VARCHAR(50) NULL DEFAULT NULL,
`createdAt` DATETIME NOT NULL,
`updatedAt` DATETIME NULL DEFAULT NULL,
`content` TEXT NULL DEFAULT NULL,
PRIMARY KEY (`id`),
INDEX `idx_order_user` (`userId` ASC),
CONSTRAINT `fk_order_user`
FOREIGN KEY (`userId`)
REFERENCES `shop`.`user` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION);



Abaixo está a descrição de todas as colunas da Tabela de Item de Pedido.


ID O ID exclusivo para identificar o item pedido.
ID do produto O ID do produto para identificar o produto associado ao item solicitado.
ID do pedido O ID do pedido para identificar o pedido associado ao item solicitado.
SKU O SKU do produto ao comprá-lo.
Preço O preço do produto ao comprá-lo.
Desconto O desconto do produto ao comprá-lo.
Quantidade A quantidade do produto selecionada pelo usuário.
Criado em Ele armazena a data e a hora em que o item solicitado é criado.
Atualizado em Ele armazena a data e hora em que o item solicitado é atualizado.
Conteúdo A coluna usada para armazenar os detalhes adicionais do item solicitado.



A Tabela de itens do pedido com as restrições apropriadas é mostrada abaixo.


CREATE TABLE `shop`.`order_item` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`productId` BIGINT NOT NULL,
`orderId` BIGINT NOT NULL,
`sku` VARCHAR(100) NOT NULL,
`price` FLOAT NOT NULL DEFAULT 0,
`discount` FLOAT NOT NULL DEFAULT 0,
`quantity` SMALLINT(6) NOT NULL DEFAULT 0,
`createdAt` DATETIME NOT NULL,
`updatedAt` DATETIME NULL DEFAULT NULL,
`content` TEXT NULL DEFAULT NULL,
PRIMARY KEY (`id`),
INDEX `idx_order_item_product` (`productId` ASC),
CONSTRAINT `fk_order_item_product`
FOREIGN KEY (`productId`)
REFERENCES `shop`.`product` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION);

ALTER TABLE `shop`.`order_item`
ADD INDEX `idx_order_item_order` (`orderId` ASC);
ALTER TABLE `shop`.`order_item`
ADD CONSTRAINT `fk_order_item_order`
FOREIGN KEY (`orderId`)
REFERENCES `shop`.`order` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION;


Tabela de transações




Também precisamos de uma tabela de transações para rastrear os pagamentos de pedidos feitos pelo comprador e para escrituração. Também podemos usar a mesma tabela para registrar o reembolso parcial ou total do pedido. Abaixo está a descrição de todas as colunas da Tabela de Transações.


ID O ID exclusivo para identificar a transação.
ID de usuário O ID do usuário para identificar o usuário associado à transação.
ID do pedido O ID do pedido para identificar o pedido associado à transação.
Código O ID de pagamento fornecido pelo gateway de pagamento.
Tipo O tipo de transação do pedido pode ser Crédito ou Débito.
Modo O modo de transação do pedido pode ser Offline, Cash On Delivery, Cheque, Draft, Wired e Online.
Estado O status da transação do pedido pode ser Novo, Cancelado, Reprovado, Pendente, Recusado, Rejeitado e Êxito.
Criado em Ele armazena a data e hora em que a transação do pedido é criada.
Atualizado em Ele armazena a data e hora em que a transação do pedido é atualizada.
Conteúdo A coluna usada para armazenar os detalhes adicionais da transação.



A Tabela de Transações com as restrições apropriadas é mostrada abaixo.


CREATE TABLE `shop`.`transaction` (
`id` BIGINT NOT NULL AUTO_INCREMENT,
`userId` BIGINT NOT NULL,
`orderId` BIGINT NOT NULL,
`code` VARCHAR(100) NOT NULL,
`type` SMALLINT(6) NOT NULL DEFAULT 0,
`mode` SMALLINT(6) NOT NULL DEFAULT 0,
`status` SMALLINT(6) NOT NULL DEFAULT 0,
`createdAt` DATETIME NOT NULL,
`updatedAt` DATETIME NULL DEFAULT NULL,
`content` TEXT NULL DEFAULT NULL,
PRIMARY KEY (`id`),
INDEX `idx_transaction_user` (`userId` ASC),
CONSTRAINT `fk_transaction_user`
FOREIGN KEY (`userId`)
REFERENCES `shop`.`user` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION);

ALTER TABLE `shop`.`transaction`
ADD INDEX `idx_transaction_order` (`orderId` ASC);
ALTER TABLE `shop`.`transaction`
ADD CONSTRAINT `fk_transaction_order`
FOREIGN KEY (`orderId`)
REFERENCES `shop`.`order` (`id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION;


Tabela de endereços




Uma tabela de endereços pode ser usada para evitar as colunas redundantes na tabela Carrinho e Pedido, dependendo da implementação real. Ele pode ser mapeado diretamente para a Tabela de Carrinhos e Tabela de Pedidos usando as chaves estrangeiras apropriadas.


Resumo




Neste tutorial, discutimos o design do banco de dados de um carrinho de compras online para armazenar os usuários e gerenciar o inventário de produtos. Ele também forneceu o design do banco de dados para gerenciar o carrinho, armazenar os itens do carrinho e gerenciar os pedidos em uma loja online. O Fluxograma de Compras Online Simplificado pode ser consultado para implementar um Carrinho de Compras.



Você pode enviar seus comentários para participar da discussão. Você também pode estar interessado em projetar o banco de dados dos aplicativos Blog e Poll &Survey. O esquema completo do banco de dados também está disponível no GitHub.