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. |
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. |
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. |
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.