当前位置: 首页 > 知识库问答 >
问题:

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

潘宪
2023-03-14

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

>

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

    例如,考虑一下这张图(从另一篇文章中借来):

    课程(强实体)和类(弱实体)之间的关系是强关系(实线),因为类包含课程的PK(*CID)作为其自身PK(*CID,*DATE)的一部分。相比之下,房间(强实体)和类(即使它是弱实体)之间的关系是弱的,因为房间的PK(*rid)不是类的PK的一部分。

    那么,我的问题是:一元关系是强/认同还是弱/不认同?一方的PK(Employee,*Empid)不仅是多方PK(同样是Employee,*Empid)的一部分,而且是多方PK(同样是Employee,*Empid)的全部组成部分。因此,这将表明它应该是一个强关系,有一条实线,与示例图中描述的相反。谁能帮我澄清一下吗?

  • 共有2个答案

    邹高峻
    2023-03-14

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

    "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室上珠子渲染的学生被通知房间改成了12室,他们就不会想:“这是一个完全不同的班级!”不,班级是一样的,只是地点不同而已。然而,如果他们被告知这个班级现在是“二手嘉年华人员”,那么他们就说对了。现在这是一个完全不同的班级。这就是识别关系和非识别关系的区别。

    一元/递归关系:认识到所有关系至少由两个实体组成是很重要的。这样,数据库关系就类似于人的关系--需要两个人才能完成。“一元”只是指关系的两边都由同一个逻辑实体填充。

    很容易看出,一个类实体和一个房间实体之间的“相遇”关系在两个类实体或两个房间实体之间是不能满足的。但是,“受管理”关系需要双方都有员工实体。同样应该很明显的是,员工并不需要这种关系才能存在。可能员工是新雇用的,还没有被分配经理。也许这个员工是这个特定组织的领头羊,没有其他员工配得上这个法案。

    或者如果当初由卡罗尔管理的皮特现在由萨拉管理,皮特的性质并没有改变。去问他吧。

    所以这种一元关系是弱的/非识别性的。它也是递归的,因为皮特可能由卡罗尔管理,而卡罗尔则由萨姆管理,萨姆是...好吧,你明白了。

    一元关系往往也是递归的,尽管这更多的是设计的效果,而不是关系的要求。例如,关系“是结婚的”将是一元的,但不是递归的。如果以一种可以递归的方式实现,就必须小心防止它--否则可能会在工作人员中出现一些尴尬的时刻。

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

    说了这么多,应该指出的是,识别和非识别,如果不是完全主观的术语,对上下文是敏感的。例如,一个学院在同一学期安排多节相同课程的课是完全合理的。所以在3号教室可能有一堂“代数2”课,在7号教室可能有一堂不同的“代数2”课,在12号教室也可能有另一堂课。这大大加强了课堂和教室之间的关系。现在,“我正在修代数2”这句话并不充分,不足以确定你是三个类中的哪一个。

    此外,第四堂“代数2”课也可以在同一间教室里举行,只是在不同的时间或日子。

    因此,使用弱关系的初始设计在某些情况下可能很好(一个学期内只开设一门课程的小型学校),但在另一种情况下(一个学期内提供或可能提供多个相同课程的类的较大学校),则必须形成强关系。所以这并不是实体类型的内在特征。不能只看ER图就提前确定。

    洪旻
    2023-03-14

    我不完全确定你对“强”与“弱”的定义是从何而来的(这可能是一个语言问题),但就我所见,它可以被认为是这样的:如果另一个实体不再存在,或者如果它们失去了关系,那么两个相关的实体是否继续存在。在您的示例中,当课程报废时,不存在。这可以通过一个表包含其他表的PK来表示,但不一定是这样。可以有自己的ID作为PK,而只使用CID作为FK。这不会改变这两个实体的实际关系。

    另一方面,如果您有类似carsdrivers的东西,它们就会有一个薄弱环节。一个被删除(死亡)的司机不会突然导致他们的车消失。同样,一辆车被偷通常不会导致司机立即心脏病发作。这是一个“薄弱”的环节。这两个东西可以继续存在,即使另一个没有了。

    在你与员工的情况下,两个人即使失去了关系,或者如果另一个实体不在了,也会继续存在。因此是一个薄弱环节。此外,要坚持您基于什么是PK的定义,manageremployee的FK,并且通常与PK不同,也不是PK的一部分,因为在公司层次结构中很少有任何人是自己的管理者。

     类似资料:
    • 本文向大家介绍python 实现性别识别,包括了python 实现性别识别的使用技巧和注意事项,需要的朋友参考一下 使用keras实现性别识别,模型数据使用的是oarriaga/face_classification的模型 实现效果 准备工作 在开始之前先要安装keras和tensorflow 安装keras使用命令:pip3 install keras 安装tensorflow使用命令:pip3

    • 我尝试将帧更改为相关的帧(这似乎起作用了--没有抛出任何错误),但是如果我尝试通过CSS/Xpath/Name/id搜索search元素,我会得到一个NosuChelementException。我正在使用Chrome WebDriver。 有什么建议吗?页面来源如下: 到目前为止我有的代码是: 目标帧源代码是:

    • 问题内容: 我正在处理一个表,该表具有一个复合主键,该主键由1NF形式的两个属性(总共10个)组成。 在我的情况下,全功能的依赖项涉及依赖项, 这 依赖于我的主键中的 两个 属性。 部分依赖项依赖于主键中的任一属性。 传递依赖关系涉及功能依赖关系中的两个或多个非关键属性,其中一个非关键属性依赖于我的主键中的某个关键属性。 将可传递的依赖关系从表中拉出,似乎 在 规范化 之后 执行了此操作,但是我的

    • 问题内容: 我在某处读过该元素的行为类似于两者。如果正确,可以有人举例说明吗? 问题答案: 的确,它们都是-或更确切地说,它们是“内联块”元素。这意味着它们像文本一样内联地流动,但也像块元素一样具有宽度和高度。 在CSS中,您可以设置一个元素以使其复制图像的行为*。 图像和对象也被称为“已替换”元素,因为它们本身不具有内容,因此该元素实际上被二进制数据替换。 *请注意,浏览器在技术上使用(如在开发

    • 4.5 系统指纹识别 现在一些便携式计算机操作系统使用指纹识别来验证密码进行登录。指纹识别是识别系统的一个典型模式,包括指纹图像获取、处理、特征提取和对等模块。如果要做渗透测试,需要了解要渗透测试的操作系统的类型才可以。本节将介绍使用Nmap工具测试正在运行的主机的操作系统。 4.5.1 使用Nmap工具识别系统指纹信息 使用Nmap命令的-O选项启用操作系统测试功能。执行命令如下所示: [ema

    • 我对Eclipse比较陌生,我是一个IntelliJ家伙:)所以为了练习,我在Eclipse中创建了一个虚拟的Gradle项目,它甚至不能识别自动插入的JUnit依赖项。 我使用的堆栈如下: < li>Gradle 6.6.1 < li>Java 13 < li>Eclipse 2019-09 R (4.13.0) - 我已经做过的事情: 从这里和这里的一切,即: > 根据本指南完成能够使用Lom