为什么我们需要弱实体而不是强大的实体?

时间:2013-06-05 00:30:02

标签: database database-design relational-database database-schema

例如,我有2个实体:书籍和1-n关系的副本,因为一本书可以有很多副本。

如果副本是一个强大的实体,

书(PK_ISBN#,标题,版本,日期) 复制(PK_copy#,condition,FK_ISBN#)

如果复制是一个弱实体,

书(PK_ISBN#,标题,版本,日期) 复制(ISBN#,复制#,条件) 主键(ISBN#,copy#) 外键ISBN#参考书(PK_ISBN#)

问题:在我认为两种情况相似的情况下,为什么复制实体会成为弱实体而不是强实体。

P / S:还有一个问题:我们如何在SQL代码中建模部分或全部参与约束。

1 个答案:

答案 0 :(得分:1)

正如您可能已经意识到的那样,在实践中,表示强实体的表与表示弱实体的表之间的SQL实现几乎没有差异。这个概念存在于ER符号中,但与关系模型或SQL几乎没有关系,除非作为理解话语领域语义的一种方式。

然而,您的示例在细节上有点粗略。似乎复制属性在第一个示例中是唯一的,但在第二个示例中不是,这表明复制属性在每种情况下都意味着不同。

两个表之间的总参与约束通常无法在SQL中强制执行,因为标准SQL不支持多个赋值(您不能一次更新两个表)。解决方法是在更新期间禁用或推迟约束检查,这意味着此类约束仅具有有限的值。部分参与本质上是外键约束所达到的目的。