1

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

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

书(PK_ISBN#,书名,版本,日期) 副本(PK_copy#,条件,FK_ISBN#)

如果副本是一个弱实体,

book(PK_ISBN#, title, edition, date) copy(ISBN#, copy#, condition) 主键 (ISBN#, copy#) 外键 ISBN# 参考书目(PK_ISBN#)

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

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

4

1 回答 1

1

您可能已经意识到,在实践中,表示强实体的表和表示弱实体的表之间的 SQL 实现几乎没有区别。该概念以 ER 表示法存在,但与关系模型或 SQL 几乎没有相关性,只是作为理解话语领域语义的一种方式。

但是,您的示例在细节上有些粗略。看起来 copy 属性在第一个示例中是唯一的,但在第二个示例中不是,这表明 copy 属性在每种情况下都有不同的含义。

两个表之间的完全参与约束通常不可能在 SQL 中强制执行,因为标准 SQL 不支持多重赋值(您不能同时更新两个表)。解决方法是在更新期间禁用或推迟约束检查,这意味着此类约束的价值有限。部分参与本质上是外键约束实现的。

于 2013-06-05T06:28:10.903 回答