Solicitando Feedback sobre o Modelo de Banco de Dados para um Site de Vendas

SQL

MySQL

PHP

Banco de Dados

Back-end

16/12/2023

Olá a todos,

Estou desenvolvendo um site de vendas de produtos (Ainda não fiz a escolha de qual tipo de loja será) para meu TCC de 3ºAno EM, e gostaria de solicitar feedback sobre o modelo de banco de dados que criei para esse propósito.

Aqui está a estrutura do banco de dados que estou considerando usar:

CREATE DATABASE site;

USE site;

CREATE TABLE tb_categoria (
categoria_id INT AUTO_INCREMENT PRIMARY KEY,
categoria VARCHAR(255)
);

CREATE TABLE tb_produto (
produto_id INT AUTO_INCREMENT PRIMARY KEY,
categoria_id INT,
ativo INT,
imagem VARCHAR(255),
quantidade INT,
nome VARCHAR(255),
descricao VARCHAR(255),
preco_uni DECIMAL(10, 2),
FOREIGN KEY (categoria_id) REFERENCES tb_categoria (categoria_id)
);

CREATE TABLE tb_cliente (
cliente_id INT AUTO_INCREMENT PRIMARY KEY,
nome VARCHAR(255) NOT NULL,
sobrenome VARCHAR(255) NOT NULL,
telefone VARCHAR(20),
data_nasc DATE NOT NULL,
email VARCHAR(255) UNIQUE NOT NULL,
senha VARCHAR(32) NOT NULL,
nivel VARCHAR(255) NOT NULL
);

CREATE TABLE tb_endereco (
endereco_id INT AUTO_INCREMENT PRIMARY KEY,
cliente_id INT,
bairro VARCHAR(255) NOT NULL,
rua VARCHAR(255) NOT NULL,
cep VARCHAR(8) NOT NULL,
complemento VARCHAR(255) NOT NULL,
numero VARCHAR (50) NOT NULL,
cidade VARCHAR(255) NOT NULL,
estado VARCHAR(50) NOT NULL,
FOREIGN KEY (cliente_id) REFERENCES tb_cliente(cliente_id)
);

CREATE TABLE tb_venda (
venda_id INT AUTO_INCREMENT PRIMARY KEY,
endereco_id INT,
data_venda DATE NOT NULL,
status_pedido VARCHAR(50) NOT NULL,
total DECIMAL(10, 2) NOT NULL,
FOREIGN KEY (endereco_id) REFERENCES tb_endereco(endereco_id)
);

CREATE TABLE tb_item_venda (
item_venda_id INT AUTO_INCREMENT PRIMARY KEY,
venda_id INT,
produto_id INT,
quantidade INT,
subtotal DECIMAL(10, 2) NOT NULL,
FOREIGN KEY (venda_id) REFERENCES tb_venda(venda_id),
FOREIGN KEY (produto_id) REFERENCES tb_produto(produto_id)
);

Agradeço antecipadamente qualquer feedback ou sugestões para melhorar a estrutura do banco de dados. Se houver algo que possa ser aprimorado ou se algo está faltando, estou aberto a todas as sugestões.

Obrigado!

Diogo Patriarca Schimidt
Diogo

Diogo

Curtidas 0

Respostas

Diogo

Diogo

16/12/2023

Ainda não consegui avançar na parte dos métodos de pagamento. Alguém poderia oferecer orientações sobre como implementar método de pagamento no banco? Seria preciso criar uma nova tabela ou apenas um novo campo? Estou aberto a sugestões, exemplos de código, ou qualquer orientação que possa me ajudar a progredir.

Agradeço muito qualquer ajuda ou insights que vocês possam fornecer.

Obrigado!
GOSTEI 0
Arthur Heinrich

Arthur Heinrich

16/12/2023

Uma vez que você vai permitir o cadastro de múltiplos endereços por cliente, poderia ter uma coluna a mais para indicar o tipo de endereço. Algo que o cliente identifique facilmente, como "Casa", "Escritório", "Casa do Fulano", etc.

Venda e cobrança são coisas que andam juntas, mas são diferentes.

Com relação ao pedido, acho que você já descreveu bem. Em um sistema real, você precisa de mais informações, já que cada produto pode estar sujeito a alíquotas de imposto distintas. É mais complicado. Mas, para um trabalho de TCC, OK.

Os meios de pagamento são formas de cobrar o cliente. Você precisa de um sistema que lhe permita cobrar à vista ou parcelado, utilizando os principais meios de pagamento disponíveis: dinheiro, cartão de crédito, cartão de débito, boleto, PIX.

Também pode pensar em ferramentas para correção de "problemas".

Se você fatura um produto com preço incorreto, pode ter que aplicar abatimentos associados a um item da venda. Estes abatimentos podem gerar um crédito para o cliente, que tem que ser contabilizados em uma espécie de conta corrente.

O cliente pode requerer este crédito via reembolso, ou deixar o crédito para uma compra futura.

Ele pode ter pago com atraso e isso implica cobrar multas e juros.

A entrega de um produto pode ser condicionada ao pagamento.

Ou seja, há muitos detalhes a serem considerados em um sistema real. Você está criando um sistema simplificado, para fins de TCC. É importante saber, do orientador, que nível de abstração você pode impor ao seu trabalho, sem que isso implique perder pontos.
GOSTEI 0
P3rm4tr1p

P3rm4tr1p

16/12/2023

Olá a todos,

Estou desenvolvendo um site de vendas de produtos (Ainda não fiz a escolha de qual tipo de loja será) para meu TCC de 3ºAno EM, e gostaria de solicitar feedback sobre o modelo de banco de dados que criei para esse propósito.

Aqui está a estrutura do banco de dados que estou considerando usar:

CREATE DATABASE site;

USE site;

CREATE TABLE tb_categoria (
categoria_id INT AUTO_INCREMENT PRIMARY KEY,
categoria VARCHAR(255)
);

CREATE TABLE tb_produto (
produto_id INT AUTO_INCREMENT PRIMARY KEY,
categoria_id INT,
ativo INT,
imagem VARCHAR(255),
quantidade INT,
nome VARCHAR(255),
descricao VARCHAR(255),
preco_uni DECIMAL(10, 2),
FOREIGN KEY (categoria_id) REFERENCES tb_categoria (categoria_id)
);

CREATE TABLE tb_cliente (
cliente_id INT AUTO_INCREMENT PRIMARY KEY,
nome VARCHAR(255) NOT NULL,
sobrenome VARCHAR(255) NOT NULL,
telefone VARCHAR(20),
data_nasc DATE NOT NULL,
email VARCHAR(255) UNIQUE NOT NULL,
senha VARCHAR(32) NOT NULL,
nivel VARCHAR(255) NOT NULL
);

CREATE TABLE tb_endereco (
endereco_id INT AUTO_INCREMENT PRIMARY KEY,
cliente_id INT,
bairro VARCHAR(255) NOT NULL,
rua VARCHAR(255) NOT NULL,
cep VARCHAR(8) NOT NULL,
complemento VARCHAR(255) NOT NULL,
numero VARCHAR (50) NOT NULL,
cidade VARCHAR(255) NOT NULL,
estado VARCHAR(50) NOT NULL,
FOREIGN KEY (cliente_id) REFERENCES tb_cliente(cliente_id)
);

CREATE TABLE tb_venda (
venda_id INT AUTO_INCREMENT PRIMARY KEY,
endereco_id INT,
data_venda DATE NOT NULL,
status_pedido VARCHAR(50) NOT NULL,
total DECIMAL(10, 2) NOT NULL,
FOREIGN KEY (endereco_id) REFERENCES tb_endereco(endereco_id)
);

CREATE TABLE tb_item_venda (
item_venda_id INT AUTO_INCREMENT PRIMARY KEY,
venda_id INT,
produto_id INT,
quantidade INT,
subtotal DECIMAL(10, 2) NOT NULL,
FOREIGN KEY (venda_id) REFERENCES tb_venda(venda_id),
FOREIGN KEY (produto_id) REFERENCES tb_produto(produto_id)
);

Agradeço antecipadamente qualquer feedback ou sugestões para melhorar a estrutura do banco de dados. Se houver algo que possa ser aprimorado ou se algo está faltando, estou aberto a todas as sugestões.

Obrigado!

Diogo Patriarca Schimidt



Um conselho que eu daria para você vendo esse código era revisar a normalização para evitar redundâncias, tornar o campo de telefone obrigatório na tabela de clientes e considerar práticas mais seguras para armazenar senhas. Para as imagens de produtos, pense em armazenar apenas o caminho relativo. Certifique-se de que os tipos de dados são apropriados para cada campo, e refine o campo de nível do cliente se diferentes acessos forem previstos. Utilizar códigos numéricos para os estados dos pedidos pode ser mais eficiente, e incluir a quantidade de itens vendidos diretamente na tabela de vendas pode ser útil dependendo dos requisitos do projeto. Estas são sugestões gerais para aprimorar ainda mais a estrutura do banco de dados. Boa sorte com o desenvolvimento do seu TCC!
GOSTEI 0
POSTAR