一元/递归关系是强/识别还是弱/不识别?

时间:2015-10-01 20:22:31

标签: database-design entity-relationship erd entity-relationship-model

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

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

    例如,请考虑此图表(借鉴another post):

  2. sample ERD

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

    1. 一元/递归关系:大多数关系都是二元关系,因为它们连接两个独立的实体。例如,Course和Class之间以及Room和Class之间的关系是二元关系。很少,当一个实体与自身有关系时,你有一个一元(也称为递归)关系。在图中,唯一的一元关系是与Employee实体的关系。它应标记为" manage",因为它代表了一个Employee可能管理0到多个Employees的事实;每个员工都由1名员工管理,只有1名员工。 Employee的PK是* EmpID,链接关系的外键(FK)是Manager。
    2. 所以,这就是我的问题:一元关系是强大/识别还是弱/不识别?一方的PK(Employee,* EmpID)不仅是PK的一部分,而且是多方面PK的全部组成部分(同样,Employee,* EmpID)。因此,这表明它应该是一个强大的关系,有一条实线,与示例图中描述的相反。有人可以帮我澄清一下吗?

3 个答案:

答案 0 :(得分:0)

我不完全确定你的定义"强大" vs."弱"起源于(这可能是一个语言问题),但据我所知,它可以被认为是:如果另一个相关实体不再存在或失去关系,它们是否会继续存在。在您的示例中,Class被废弃时,Course无法存在。这可以通过一个包含其他表的PK表示,但情况不一定如此。 Class可以(完全不同的原因)将自己的id作为PK,并仅将CID用作FK。这不会改变这两个实体的事实关系。

另一方面,如果您有CarsDrivers之类的内容,则会有一个弱链接。被删除(死机)的司机不会突然导致他们的汽车消失。同样,被盗的汽车通常不会立即导致其驾驶员心脏病发作。这是一个弱势的"链接。即使另一个已经消失,这两件事仍可继续存在。

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

答案 1 :(得分:0)

弱/强关系: 关系只是意味着依赖实体不能与关系存在。以课堂,课程和房间为例。想象一下以下对话:

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

嗯,直到这位教练决定一门课程,真的不能上课。由于必须在创建课程之前指定课程,因此关系很强。此外,在考虑选择哪个课程时,“珠子渲染”中的课程和“网络制作”中的课程是两个完全不同的事情,即使他们可能同时在同一个房间(仅在不同的日子)相遇。每个班级的身份都不可避免地与课程联系在一起。所以这种关系也在确定。

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

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

因此,如果学生已经注册参加17号房间的Bead Rendering,会被告知房间已经改为12,他们不会想,“这是一个完全不同的课程!”不,班级是一样的,只有位置不同。但是,如果他们被告知班级现在是“二手嘉年华人员”,那么他们就是对的。现在这是一个完全不同的课程。这是识别和非识别关系之间的区别。

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

很容易看出,在两个类实体或两个房间实体之间,不能满足类实体和房间实体之间的“满足”关系。但是,“由...管理”关系需要双方的员工实体。同样显而易见的是,员工不需要这种关系才能存在。也许该员工是新员工,尚未被指派经理。也许该员工是这个特定组织的领导犬,没有其他员工值得适应该法案。

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

所以这种一元关系很弱/没有识别。这也是递归的,因为Pete可能由Carol管理,他由Sam管理,他是......好吧,你明白了。

一元关系往往也是递归的,尽管这更多是设计的影响而不是关系的要求。例如,“与...结婚”的关系将是一元的,但不是递归的。如果以可以递归的方式实施,则必须注意防止它 - 或者劳动力中可能存在一些尴尬的时刻。

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

说了这么多之后,应该指出识别非识别,如果不是完全主观的术语,则对上下文敏感。例如,大学在同一学期安排同一课程的多个班级是完全合理的。所以在3号房间可以有一个“代数2”课程,在7号房间可以有一个不同的“代数2”课程,而在12号房间则可以有另一个课程。这大大加强了课堂和房间之间的关系。现在声明“我正在考虑代数2”是没有足够的信息来确定你注册的三个班级中的哪一个。

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

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

答案 2 :(得分:0)

基于我对问题的重新思考,特别是来自@ TommCatt的回答,似乎我的困惑可能源于我对强大/识别关系的有缺陷的定义: “强大/识别关系是将强实体连接到弱实体(即,包含其相关实体的主键[PK]作为其自己的主键的组件的实体),并由实线。“

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

从这个角度来看,很明显为什么一元关系不强:一元关系中的FK不是PK的一部分;因此,这种关系很弱,用虚线表示。