热门标签 | HotTags
当前位置:  开发笔记 > 数据库 > 正文

实体—联系模型

一、实体—联系(E-R)数据模型概述   该数据模型基于对现实世界的这样一种认识:世界由一组称为实体的基本对象及这些对象间的联系组成,该模型是一种语义模型,模型的语义方面主要体现在

一、实体—联系(E-R)数据模型概述

     该数据模型基于对现实世界的这样一种认识:世界由一组称为实体的基本对象及这些对象间的联系组成,该模型是一种语义模型,模型的语义方面主要体现在模型力图去表达数据的意义。

1.1 实体集

      实体是现实世界中可区别于其他对象的“事件”或“物体”。每个实体有一组性质,其中一部分性质的取值可以唯一地标识实体。

        实体集是具有相同类型及共享相同性质(或属性)的实体集合。

        实体通过一组属性来表示。属性是实体集中每个成员具有的描述性性质。将一个属性赋予某实体集表明数据库为实体集中的每个实体存储相似信息,但每个实体在自己的每个属性上都有各自的值。而每个属性都有一个可取值的集合,称为该属性的域,或者该属性的值集。因此,数据库包括一组实体集,每个实体集中包括一些相同类型的实体。

1.2 属性类型         E-R模型中的属性可以按照以下的属性类型进行划分:

        1)简单属性和复合属性

             例如,地址可以作为复合属性,因为从中可以更细分为国家、省、市、县、镇、村。可以看出,复合属性是有层次的。         2)单值属性和多值属性

        3)派生属性

              这类属性的值可以从其他的相关属性或实体派生出来。例如,一个的年龄可以由其出生年月派生而来。

1.3 联系集        联系是指多个实体间的相互关联。例如,定义一个客户与其贷款的联系。

       联系集是同类型联系的集合。例如,联系集是n(n>2)个实体集上的数学关系。

二、约束

2.1 映射基数       映射基数,或基数比例,指明通过一个联系集能同时与另一实体相联系的实体数目。对于实体集A与B之间的二元联系集R来说,映射基数无非是这几种情况:一对一(A中的一个实体至多同B中的一个实体相联系,B中的一个实体也至多同A中的一个实体相联系);一对多(A中的一个实体可以同B中的任意数目的实体相联系,而B中的一个实体至多同A中的一个实体相联系);多对一(与前者相反);多对多。

2.2 参与约束

        如果实体集E中的每个实体都参与到联系集R的至少一个联系中,则称之为实体集E全部参与联系集R;如果只有部分,则称之为实体集E部分参与联系集R。举例:对于银行的客户而言,由于每个贷款必须通过某种联系与客户相关联,但并不是每个客户都有贷款。这就是部分参与,集贷款实体集部分参与联系集。

三、码

      码的概念可以使我们区别实体,也可以惟一地标识联系,并将联系相区分开来。

3.1 实体集

      超码是一个或多个属性的集合,这些属性的组合可以使我们在一个实体集中惟一地标识一个实体。例如,对于客户而言,其”客户编号“就是一个超码,该属性可以惟一区别一个实体(客户);而“客户编号”+“客户名称”的组合也是实体集的一个超码,但“客户名称”有可能出现重复,因此,“客户名称”不是超码。由此可以看出,超码中可能也包含了一些无关紧要的属性。须知,如果K是一个超码,那么K的任意超集也是超码。但这并没有多大探讨的意义,我们需要关注的是,如果K是一个超码,那么它的任意真子集都不能成为超码,这样的最小超码,称之为候选码。值得注意的是,几个不同的属性集都可以作为超码的情况是存在的,只要所给的属性足够严谨甚至苛刻。在这之中,我们使用主码(来源于候选码)来表示被开发者选用的超码。记住,码(主码、候选码、超码)是实体集的性质,而不是单个实体的性质。实体集中的任意两个实体都不允许同时在码属性上具有相同的值。

3.2 联系集

          实体集的主码使得我们可以将实体集中不同的实体区别开来,而联系集的作用是如何选用主码来使得实体集A与实体集B达到某种合理的联系。

四 实体—联系图

E-R图的重要组件

组件意义组件意义
矩形表示实体集双椭圆表示多值属性
椭圆表示属性虚椭圆表示派生属性
棱形表示联系集双线表示一个实体全部参与到联系集中
线段将属性连接到实体集或将实体集连接到联系集双矩形

表示弱实体集

注:    线段:表示从实体集A到B是多对多或一对多的关系

   箭头:表示从实体集A到B是一对一或多对一的关系

举例:

   
《实体—联系模型》

3.3 弱实体集      一个弱实体集的属性可能不足以形成主码,这样的实体集就称为弱实体集。与此相对,有主码的实体称为强实体集。例如实体集付款单payment,其具有属性payment-number、payment-date以及payment-amount。payment-number是从1开始的,虽然payment实体互不相同,但不同贷款的payment却可能具有相同的payment-number。因此,实体集payment-numner没有主码,是一个弱实体集。

     弱实体集必须与另一个标识实体或属主实体集关联才有意义。每个弱实体必须和一个标识实体关联,即,弱实体集是存在依赖于标识实体集。我们称标识实体集拥有它所标识的弱实体集。将弱实体与其标识实体集相联的联系集称为标识性联系。标识性联系是从弱实体集到标识实体集的多对一联系,并且弱实体集全部参与联系。

     虽然弱实体集没有主码,但仍需要使用某个属性来区分那些依赖于某个强实体集的弱实体集。弱实体集的分辨率是使得我们能进行这种区分的属性集合。对于下图中的payment弱实体而言,payment-number就是其分辨符。

举例:

《实体—联系模型》

四、扩展的特殊化

4.1 特殊化       实体集中有时包含一些子集,子集中的实体在某些方面区别于实体集中的其他实体。例如,实体集中某个实体子集可能具有不被该实体集中所有实体集中所有实体所共享的一些属性。须知,在实体集内部进行分组的过程称为特殊化。

4.2 一般化

        对初始实体集求精产生一系列不同层次的实体子集代表自顶向下的设计过程,在这个自顶向下的设计过程中,区别被显示地表达出来。设计过程还可以是自底向上的,在这个过程中,根据共同具有的特征,多个实体集综合成一个较高的实体集。

举例:在E-R图中,特殊化通过标记为ISA的三角形构建来表示。标记ISA表示“is a”,例如,一个客户“is a”人。ISA联系也称超类-子类联系。高层实体和低层实体仍如同普通实体的表示法,即以包含了实体集名称的矩形表示。

《实体—联系模型》


推荐阅读
  • 高效解决应用崩溃问题!友盟新版错误分析工具全面升级
    友盟推出的最新版错误分析工具,专为移动开发者设计,提供强大的Crash收集与分析功能。该工具能够实时监控App运行状态,快速发现并修复错误,显著提升应用的稳定性和用户体验。 ... [详细]
  • Hadoop入门与核心组件详解
    本文详细介绍了Hadoop的基础知识及其核心组件,包括HDFS、MapReduce和YARN。通过本文,读者可以全面了解Hadoop的生态系统及应用场景。 ... [详细]
  • 本文探讨了领域驱动设计(DDD)的核心概念、应用场景及其实现方式,详细介绍了其在企业级软件开发中的优势和挑战。通过对比事务脚本与领域模型,展示了DDD如何提升系统的可维护性和扩展性。 ... [详细]
  • 本文探讨了MariaDB在当前数据库市场中的地位和挑战,分析其可能面临的困境,并提出了对未来发展的几点看法。 ... [详细]
  • 作者:守望者1028链接:https:www.nowcoder.comdiscuss55353来源:牛客网面试高频题:校招过程中参考过牛客诸位大佬的面经,但是具体哪一块是参考谁的我 ... [详细]
  • Startup 类配置服务和应用的请求管道。Startup类ASP.NETCore应用使用 Startup 类,按照约定命名为 Startup。 Startup 类:可选择性地包括 ... [详细]
  • 深入解析三大范式与JDBC集成
    本文详细探讨了数据库设计中的三大范式,并结合Java数据库连接(JDBC)技术,讲解如何在实际开发中应用这些概念。通过实例和图表,帮助读者更好地理解范式理论及其在数据操作中的重要性。 ... [详细]
  • MySQL索引详解与优化
    本文深入探讨了MySQL中的索引机制,包括索引的基本概念、优势与劣势、分类及其实现原理,并详细介绍了索引的使用场景和优化技巧。通过具体示例,帮助读者更好地理解和应用索引以提升数据库性能。 ... [详细]
  • 本文探讨了在Oracle数据库中,动态SQL语句的执行及其对事务管理的影响,特别是关于回滚操作的有效性。重点讨论了一个具体场景:将预警短信从当前表迁移到历史表时遇到的字段长度不匹配问题及相应的异常处理。 ... [详细]
  • 本文将深入探讨PHP编程语言的基本概念,并解释PHP概念股的含义。通过详细解析,帮助读者理解PHP在Web开发和股票市场中的重要性。 ... [详细]
  • 探讨如何真正掌握Java EE,包括所需技能、工具和实践经验。资深软件教学总监李刚分享了对毕业生简历中常见问题的看法,并提供了详尽的标准。 ... [详细]
  • 本文详细介绍了Python编程语言的学习路径,涵盖基础语法、常用组件、开发工具、数据库管理、Web服务开发、大数据分析、人工智能、爬虫开发及办公自动化等多个方向。通过系统化的学习计划,帮助初学者快速掌握Python的核心技能。 ... [详细]
  • PostgreSQL 10 离线安装指南
    本文详细介绍了如何在无法联网的服务器上进行 PostgreSQL 10 的离线安装,并涵盖了从下载安装包到配置远程访问的完整步骤。 ... [详细]
  • TCP长连接设备管理平台:架构与功能概览
    本文介绍了基于TCP长连接的设备管理平台的设计理念、技术选型及主要功能模块。最初,项目旨在实现简单的协议测试,但随着需求扩展,逐步演变为一个完整的前后端分离系统。 ... [详细]
  • 在 Flutter 开发过程中,开发者经常会遇到 Widget 构造函数中的可选参数 Key。对于初学者来说,理解 Key 的作用和使用场景可能是一个挑战。本文将详细探讨 Key 的概念及其应用场景,并通过实例帮助你更好地掌握这一重要工具。 ... [详细]
author-avatar
菜蔸蔸
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有