Esta é basicamente uma pergunta sobre o que são entidades fracas? Quando devemos usá-los? Como eles devem ser modelados?
Qual é a principal diferença entre entidades normais e entidades fracas? Entidades fracas correspondem a objetos de valor ao executar o Design Orientado a Domínio?
Para ajudar a manter a pergunta sobre o tópico, aqui está um exemplo da Wikipedia que as pessoas podem usar para responder a essa pergunta:
Neste exemplo, OrderItem
foi modelado como uma entidade fraca, mas não consigo entender por que não pode ser modelado como uma entidade normal.
Outra pergunta é: se eu quiser rastrear o histórico de pedidos (ou seja, as alterações no status), isso seria uma entidade normal ou fraca?
fonte
OrderItem
depende deOrder
como nãoorderItems
pode existir sem pertencer a umorder
, mas não vejo por que não posso usarItemLineNumber
para identificar apenas um item ?! Na verdade, eu poderia apenas criarItemLineNumber
um auto geradoint
para garantir a exclusividade e usar uma chave estrangeiraorderID
para vincular as duas entidades ?!Um
OrderItem
não pode existir sem uma ordem ou um produto. Por isso, é fraco, pois suas dependências o controlam.Se, por exemplo, você remove o pedido, não tem como saber para onde o item deve ser enviado. Ou, se você remover o produto, não sabe o que enviar.
fonte
De acordo com meu entendimento no diagrama acima, eles incluíram as duas entidades / tabelas em vez de uma ou seja, pedidos e itens de pedidos, para que o acesso às informações se torne fácil quando duas entidades são projetadas. E o item do pedido depende da entidade do pedido, por isso é considerado uma entidade fraca. porque a característica de entidade fraca é que depende de outra entidade. Suponha que, se você não incluir a entidade do item do pedido, como poderá saber o preço e o desconto do item do pedido. e como disse jgauffin Se, por exemplo, você remove o pedido, não tem como saber para onde o item deve ser enviado. Ou, se você remover o produto, não sabe o que enviar.
O diagrama de ER deve ser projetado de acordo com os requisitos de negócios.
fonte
Veja, um pedido tem muitos itens de pedido (atributo de valores múltiplos). Assim, de acordo com a regra, criamos tabela separada.
Agora, digamos que 2 clientes tenham a mesma ordem. Ambos compram o iPhone pelo mesmo preço, desconto, mesma data, etc. Então, idealmente, deve haver duas tuplas exatas para a ordem do iPhone na relação orderitem. Mas, de acordo com a restrição de um relacionamento, todas as tuplas devem ser únicas. Então, vamos relacionar dois pedidos ao mesmo item_line_number.no problema até agora. Agora considere que um dos clientes cancela. É a ordem do iPhone. Também a tupla item_line_number será excluída. Agora, outros clientes que compraram o iPhone também são excluídos por causa da correspondência M: 1. Então, finalmente, o banco de dados é inconsistente. É por isso que usamos uma chave de descrição que será solicitada. A exclusão de um iPhone solicitado não causa corrupção no banco de dados.
fonte