这基本上是一个关于什么是弱实体的问题?我们什么时候应该使用它们?他们应该如何建模?
正常实体和弱实体之间的主要区别是什么?弱实体在进行域驱动设计时是否与值对象相对应?
为了使问题保持在主题上,这里有一个来自维基百科的例子,人们可以用它来回答这些问题:
在这个例子中,OrderItem
被建模为一个弱实体,但是我不明白为什么它不能被建模为一个正常的实体。
另一个问题是,如果我想跟踪顺序历史(即它状态的变化),这是一个正常的还是弱的实体?
发布于 2012-12-06 18:07:36
从形式上讲,“弱”实体具有以下特点。
我要说的是,在实践中,您不会公开地决定将某个“弱”实体本身变成一个“弱”实体;相反,您将构建数据以代表您试图建模的任何内容。
如果在您完成此操作之后,您查看了某个特定实体,并且它具有“弱”实体的特征,则您可以相应地记录或绘制它,如果出于某种原因,您认为需要显式地调用它,或者出于形式原因。
如果您将OrderItem
定义为具有唯一标识顺序id,而OrderId
不是密钥的一部分,那么您将OrderItems
视为一阶公民,并且没有真正的弱实体。
如果您愿意的话,可以将其他表分别放到OrderItems
中;没有必要已经有一个OrderId
来访问OrderItems
。另一方面,如果您用OrderItem
键输入OrderId
和与Order
相关的sequenceId
(或类似的),那么就会有一个弱实体,单个行项只能使用OrderId
和sequenceId
引用。模型使用情况按预期。
发布于 2012-12-06 11:45:32
没有订单或产品,OrderItem
就不可能存在。因此,它很弱,因为它依赖于控制它。
例如,如果您删除订单,您就无法知道项目应该在哪里发货。或者,如果你移除产品,你就不知道要出什么货。
发布于 2015-02-11 05:06:15
根据我在上图中的理解,它们包含了两个实体/表,而不是一个订单和订单项目,这样在设计两个实体时访问信息就变得容易了。订单项依赖于订单实体,因此被认为是一个弱实体。因为弱实体的特征在于它依赖于另一个实体。假设你不包括订单实体,你如何才能知道订单项目的价格,折扣。而且,正如jgauffin所说,例如,如果你取消订单,你就无法知道货物应该在哪里发货。或者,如果你移除产品,你就不知道要出什么货。
ER图是根据业务需求设计的。
https://softwareengineering.stackexchange.com/questions/178504
复制相似问题