Atualmente estou estudando uma unidade sobre desenvolvimento de banco de dados e estou em um módulo sobre normalização, acredito que este ERD completou a normalização da 2ª forma, pois cada tabela possui uma chave primária, todos os dados são atômicos e não há grupos repetidos, e Não acredito que haja qualquer dependência parcial de chave. Mas sou novo e meu entendimento ainda é fraco. Então, eu queria saber se alguém poderia dar uma olhada e me dizer o que pensa e, possivelmente, qualquer ajuda que eu agradeceria muito.
(Incluirei uma foto do ERD também, obrigado novamente)
Editar: não tenho certeza se devo raspar a tabela PostCodeAndCity e incluir os dados da cidade na tabela de endereços, mas isso foi sugerido pelos meus materiais de estudo.
Edit2: Por ter criado uma conta para esta pergunta, não tenho reputação de votar positivamente em suas respostas, mas só queria agradecer a todos que dedicaram seu tempo para compartilhar seu conhecimento, eu realmente aprecio isso e ajudou ainda mais meu muito!
O maior problema é a tabela de pedidos. Da forma como está, um usuário pode fazer apenas um único pedido. Você precisará de vários order_ids para compras de muitos produtos. Na verdade, você precisa de duas tabelas: uma para manter o total de uma compra (pense nela como todas as metainformações que você encontra em um recibo) e uma tabela que contém os produtos e quantidades associadas a um order_id específico. Você também deseja manter um preço no produto adquirido, uma vez que os preços mudam nos produtos do catálogo.
O engraçado é que nosso livro trata exatamente do mesmo problema de banco de dados e foca no design. Está em acesso antecipado, então não tenho o capítulo 5 ao vivo que mostraria o diagrama, mas você pode ver a análise de requisitos aqui só para ter uma ideia: https://livebook.manning.com/book/grokking-relational-database -design/capítulo-3/v-1/ponto-18510-126-133-1
código postalCidade:
endereço:
Ter uma tabela postalCodeCity garante que a cidade e o código postal estejam relacionados de forma consistente.
Outra coisa a observar é que os pedidos são normalmente modelados como pedidos e linhas de pedido – ou seja, duas entidades. Um cliente está associado a um pedido. Um pedido possui informações como ID do pedido (ou número) e isso identifica um pedido de forma exclusiva, a data do pedido e o cliente (que fez o pedido). E um pedido tem várias linhas. Cada linha de pedido possui ID de linha de pedido, ID de pedido, ID de produto e quantidade do pedido. Este é um conceito geral de clientes e pedidos.