1

首先,一些定义以确保我使用的术语清晰:

  1. 强实体和弱实体以及强/识别和弱/非识别关系:在 ERD 中,弱/非识别关系是连接两个强实体的关系,用虚线表示。强/标识关系是将强实体连接到弱实体(即包含其相关实体的主键 [PK] 作为其自身组件主键的组件的实体)的关系,并由实线。

    例如,考虑这个图表(从另一个帖子借来):

样品 ERD

Course(强实体)和 Class(弱实体)之间的关系是强关系(实线),因为 Class 包含 Course 的 PK (*CID) 作为其自身 PK (*CID,*Date) 的一部分。相比之下,Room(强实体)和 Class(即使它是弱实体)之间的关系很弱,因为 Room 的 PK (*RID) 不是 Class PK 的一部分。

  1. 一元/递归关系:大多数关系是二元的,因为它们连接两个独立的实体。例如,Course 和 Class 之间、Room 和 Class 之间的关系是二元关系。当一个实体与自身有关系时,您很少有一个一元(也称为递归)关系。在图中,唯一的一元关系是与 Employee 实体的关系。它应该被标记为“manages”,因为它代表了一个 Employee 可能管理 0 到多个 Employees 的事实;每个员工由 1 名且只有 1 名员工管理。Employee的PK是*EmpID,链接关系的外键(FK)是Manager。

所以,这是我的问题:一元关系是强/识别还是弱/非识别?一方的 PK (Employee, *EmpID) 不仅是多方 PK 的一部分,而且是多方 PK 的完整组成部分(同样是 Employee,*EmpID)。因此,这表明它应该是一个牢固的关系,用一条实线,与示例图中的描述相反。谁能为我澄清一下?

4

3 回答 3

0

弱/强关系:关系只是意味着依赖实体不能脱离关系而存在。以班级、课程和房间为例。想象以下对话:

"I think I'll teach a class this September."
"Good. What course will you teach?"
"I haven't decided yet."

好吧,在这位讲师决定一门课程之前,真的不能上课。由于必须在创建课程之前指定课程,因此这种关系很牢固。此外,在考虑上哪门课时,“珠子渲染”中的课程和“Cyber​​crafting”中的课程是完全不同的两件事,即使他们可能同时在同一个房间(只是在不同的日子)见面。每个班级的身份都与课程密不可分。所以这种关系也是识别的。

"I think I'll reach Discretionary Logic this September."
"Good. What room will it be in?"
"I haven't decided yet."

即使没有分配房间,该类仍然可以存在。是的,需要在学期开始前分配一个房间,但目前我们仍然可以创建班级,将“TBD”放入目录并允许学生注册。班级可以在没有房间的情况下存在(一段时间,无论如何),所以关系很弱。此外,“自由裁量逻辑”中的两个课程在功能上是等效的,即使它们是在不同的房间教授的。与房间的关系与班级的类型无关。关系是不确定的。

所以如果学生在17号房间报了珠子渲染,却被告知房间已经变成了12号房间,他们就不会想,“这是一个完全不同的班级!” 不,班级是一样的,只是位置不同。但是,如果他们被告知该课程现在是“二手嘉年华人员配备”,那么他们是对的。现在这是一个完全不同的类。这是识别关系和非识别关系之间的区别。

一元/递归关系:重要的是要认识到所有关系都至少包含两个实体。通过这种方式,数据库关系类似于人际关系—— Tango 需要两个。“一元”只是意味着关系的双方都由同一个逻辑实体填充。

很容易看出,在两个 Class 实体或两个 Room 实体之间,不能满足 Class 实体和 Room 实体之间的“相遇”关系。但是,“由管理”关系需要双方都有一个 Employee 实体。很明显,员工不需要这种关系才能存在。也许该员工是新员工,尚未分配经理。也许员工是这个特定组织中的领头羊,没有其他员工值得满足这个要求。

或者说,如果当初由Carol管理的Pete,现在由Sarah管理,Pete的本性并没有改变。去问问他吧。

所以这种一元关系是弱/不可识别的。它也是递归的,Pete 可能由 Carol 管理,而 Carol 由 Sam 管理,而 Sam 是......好吧,你明白了。

一元关系也往往是递归的,尽管这更多是设计的效果而不是关系的要求。例如,“已婚”的关系将是一元的,但不是递归的。如果以可以递归的方式实施,则必须小心防止它 - 或者劳动力中可能会有一些尴尬的时刻。

请注意,我没有在任何地方提到“主键”或“外键”。这些是实现细节,而不是关系类型的特征。人们可以完全理解关系的概念,而无需使用甚至考虑这些术语。


说了这么多,应该指出,识别非识别,如果不是完全主观的术语,对上下文很敏感。例如,一所大学在同一学期安排多个相同课程的课程是完全合理的。因此,房间 3 可能有一个“代数 2”课程,房间 7 中可能有一个不同的“代数 2”课程,房间 12 中还有另一个课程。这大大加强了班级和房间之间的关系。现在,“我正在学习代数 2”这一陈述不足以确定您注册了三个课程中的哪一个。

除此之外,第四节“代数 2”课也可以与其他人在同一个房间举行,只是在不同的时间或日期。

因此,使用弱关系的初始设计在某些情况下可能工作得很好(一个学期内只开设一门课程的小学校),但必须在不同的情况下建立强关系(提供或提供或可能在同一学期提供同一课程的多个班级)。所以这不是实体类型所固有的。仅通过查看 ER 图无法提前确定。

于 2015-10-07T00:06:56.047 回答
0

我不完全确定您对“强”与“弱”的定义从何而来(这可能是语言问题),但据我所知,可以这样认为:这两个相关实体是否继续如果另一个人不复存在或者他们失去了关系,那么他们就存在。在您的示例中, a被废弃Class时不能存在。Course这可以通过一个表包含其他表的 PK 来表示,但不一定如此。Class可以(出于完全不同的原因)拥有自己id的 PK 并CID仅将其用作 FK。这不会改变这两个实体的实际关系。

另一方面,如果你有类似Carsand的东西Drivers,它们的链接就会很薄弱。被删除(死亡)的司机不会突然导致他们的车消失。同样,被盗的汽车通常不会导致驾驶员立即心脏病发作。这是一个“弱”链接。即使另一件事消失,这两件事也可以继续存在。

在您使用员工的情况下,即使他们失去关系或另一个实体已经消失,这两个人仍将继续存在。因此,它是一个薄弱环节。此外,要坚持基于什么是 PK 的定义,Manager它是一个 FK Employee,并且通常与其 PK不同且不是其 PK 的一部分,因为在公司层次结构中很难找到任何人作为他们自己的经理。

于 2015-10-02T02:33:17.630 回答
0

根据我对这个问题的重新思考,尤其是从@TommCatt 的回答中,我的困惑似乎源于我对强/识别关系的错误定义:“强/识别关系是将强实体与弱实体连接起来的关系(即是一个实体,它包含其相关实体的主键 [PK] 作为其自身主键的组成部分),并用实线表示。”

定义的缺陷部分是“包含其相关实体的主键 [PK] 作为其自身组件的组件的实体”。更准确地说,我应该说,“一个实体包含来自其相关实体的外键 [FK] 作为其自己的主键 [PK] 的组成部分”。

从这个角度来看,一元关系不强的原因就很清楚了:一元关系中的 FK 不是 PK 的一部分;因此,关系较弱,并用虚线表示。

于 2015-10-27T02:29:16.323 回答