1

例如,我有两个实体:书本和副本与1-n关系,因为一本书可以有很多副本。为什么我们需要弱实体而不是强实体?

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

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

如果副本是一个弱实体,

书(PK_ISBN#,标题,版,日期) 副本(ISBN#,#拷贝,条件) 主键(ISBN#,#复制) 外键ISBN#引用书(PK_ISBN#)

问题:为什么复制实体是弱实体而不是强实体?我认为这两种情况都是相似的。

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

回答

1

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

然而,你的例子对细节有点粗略。看起来copy属性在第一个示例中是唯一的,但在第二个示例中不是,这意味着copy属性意味着在每种情况下都有所不同。

两个表之间的总参与约束通常不可能在SQL中强制执行,因为标准SQL不支持多个赋值(您不能一次更新两个表)。解决方法是在更新期间禁用或延迟约束检查,这意味着这些约束只具有有限的价值。部分参与基本上是外键约束所实现的。

+0

所以它意味着弱实体没有超过强实体的优势,它们是相似的,不是吗? –

+0

某些关系是否为可选的问题是潜在的重要问题,但假设关系在关系数据库模型的上下文中是强制性的*,那么弱或强都没有特别的优势。就其他(非关系)模型而言,可能存在显着差异。 – sqlvogel

相关问题