例如,我有2个实体:书籍和1-n关系的副本,因为一本书可以有很多副本。
如果副本是一个强大的实体,
书(PK_ISBN#,标题,版本,日期) 复制(PK_copy#,condition,FK_ISBN#)
如果复制是一个弱实体,
书(PK_ISBN#,标题,版本,日期) 复制(ISBN#,复制#,条件) 主键(ISBN#,copy#) 外键ISBN#参考书(PK_ISBN#)
问题:在我认为两种情况相似的情况下,为什么复制实体会成为弱实体而不是强实体。
P / S:还有一个问题:我们如何在SQL代码中建模部分或全部参与约束。
答案 0 :(得分:1)
正如您可能已经意识到的那样,在实践中,表示强实体的表与表示弱实体的表之间的SQL实现几乎没有差异。这个概念存在于ER符号中,但与关系模型或SQL几乎没有关系,除非作为理解话语领域语义的一种方式。
然而,您的示例在细节上有点粗略。似乎复制属性在第一个示例中是唯一的,但在第二个示例中不是,这表明复制属性在每种情况下都意味着不同。
两个表之间的总参与约束通常无法在SQL中强制执行,因为标准SQL不支持多个赋值(您不能一次更新两个表)。解决方法是在更新期间禁用或推迟约束检查,这意味着此类约束仅具有有限的值。部分参与本质上是外键约束所达到的目的。