首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在建立数据库时,我们什么时候应该使用弱实体?

在建立数据库时,我们什么时候应该使用弱实体?
EN

Software Engineering用户
提问于 2012-12-06 11:32:05
回答 4查看 36.7K关注 0票数 12

这基本上是一个关于什么是弱实体的问题?我们什么时候应该使用它们?他们应该如何建模?

正常实体和弱实体之间的主要区别是什么?弱实体在进行域驱动设计时是否与值对象相对应?

为了使问题保持在主题上,这里有一个来自维基百科的例子,人们可以用它来回答这些问题:

在这个例子中,OrderItem被建模为一个弱实体,但是我不明白为什么它不能被建模为一个正常的实体。

另一个问题是,如果我想跟踪顺序历史(即它状态的变化),这是一个正常的还是弱的实体?

EN

回答 4

Software Engineering用户

回答已采纳

发布于 2012-12-06 18:07:36

从形式上讲,“弱”实体具有以下特点。

  1. 它是存在的-依赖于另一个实体。也就是说,没有它与之有关系的实体,它就不可能存在。
  2. 它从与其相关的实体继承它的主键的至少一部分。也就是说,弱实体的主键必须是包含其存在依赖的实体的主键的复合键。

我要说的是,在实践中,您不会公开地决定将某个“弱”实体本身变成一个“弱”实体;相反,您将构建数据以代表您试图建模的任何内容。

如果在您完成此操作之后,您查看了某个特定实体,并且它具有“弱”实体的特征,则您可以相应地记录或绘制它,如果出于某种原因,您认为需要显式地调用它,或者出于形式原因。

如果您将OrderItem定义为具有唯一标识顺序id,而OrderId不是密钥的一部分,那么您将OrderItems视为一阶公民,并且没有真正的弱实体。

如果您愿意的话,可以将其他表分别放到OrderItems中;没有必要已经有一个OrderId来访问OrderItems。另一方面,如果您用OrderItem键输入OrderId和与Order相关的sequenceId (或类似的),那么就会有一个弱实体,单个行项只能使用OrderIdsequenceId引用。模型使用情况按预期。

票数 12
EN

Software Engineering用户

发布于 2012-12-06 11:45:32

没有订单或产品,OrderItem就不可能存在。因此,它很弱,因为它依赖于控制它。

例如,如果您删除订单,您就无法知道项目应该在哪里发货。或者,如果你移除产品,你就不知道要出什么货。

票数 1
EN

Software Engineering用户

发布于 2015-02-11 05:06:15

根据我在上图中的理解,它们包含了两个实体/表,而不是一个订单和订单项目,这样在设计两个实体时访问信息就变得容易了。订单项依赖于订单实体,因此被认为是一个弱实体。因为弱实体的特征在于它依赖于另一个实体。假设你不包括订单实体,你如何才能知道订单项目的价格,折扣。而且,正如jgauffin所说,例如,如果你取消订单,你就无法知道货物应该在哪里发货。或者,如果你移除产品,你就不知道要出什么货。

ER图是根据业务需求设计的。

票数 -1
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/178504

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档