1、E-R模型的基本概念与表示

1)实体与实体集

(1)实体:可以是有形的、实在的事物(如每个员工),可以是抽象的、概念上存在的事物(如一个部门)。

(2)实体的特征:独立存在、可区别于其他实体。

(3)实体集:具有相同类型及相同性质的实体集合。实体集可以相交(例如销售部门员工既属于销售员工实体集也属于员工实体集)。

2)属性

(1)属性:实体集中每个实体都具有的特征描述。

(2)属性的域:一个属性所允许的取值范围或集合。

(3)属性的分类:

简单属性和复杂属性:

简单属性:不能再分的属性。复杂属性:可以进一步划分的属性(如住址的成分街道可以划分为街道编号、街道名称)。

多值属性的处理:将多值属性转化为多个单只属性进行表示、将多值属性单独看做一个弱实体集,依赖于原实体集存在。

弱实体集:一类实体集其属性不足以形成主码,必须依赖于其他实体集而存在。

强实体集:一类实体集其属性可以形成主码的实体集

标识实体集:弱实体集所依赖的强实体集。

标识联系集:弱实体集与标识实体集相互关联形成的联系集。

标识实体集与弱实体集之间为“一对多”联系集,弱实体在标识联系集中全部参与。

单值属性和多值属性

某属性对一个特定实体任何时候都只有单独的一个值,称为单值属性(如员工编号),否则为多值属性(如员工联系方式)。

派生属性

某属性的值可以从其他相关属性或实体派生出来(如年龄可以由当前日期和出生日期推算出来)。

3)联系与联系集

(1)联系:指多个实体间的相互关联。

(2)联系集:同类联系的集合。

(3)多联系:多个实体集可以定义在一些相同的实体集上(如教师与学生之间有授课联系集和指导联系集)。

(4)实体的角色:实体在联系中的作用,即用角色名来定义一个实体参与联系的方式。

(5)联系集的度:参与联系集的实体集的数目(如选课联系集涉及两个实体集,为二元联系集,度为2)。

4)图形化表示

实体集---矩形、属性---椭圆、多值属性---双椭圆、派生属性---虚线椭圆、属性和实体之间---连线、联系集---菱形、弱实体集---双矩形、标识联系集---双菱形、弱实体的部分码---虚下划线。

2、约束

1)映射约束

(1)映射基数(二元联系为例):实体集A中的一个实体通过联系集R能同时与另一个实体集B中相联系的实体数目。

一对一:A中的一个实体至多与B中的一个实体相联系,B中的一个实体也至多与A中的一个实体相联系。(如开发票联系集是销货单实体集和发票是实体集之间的一对一联系集)

一对多:A中的一个实体可以同B中的任意数目的实体相联系,B中的一个实体至多与A中的一个实体相联系。(如部门与员工)

多对一:A中的一个实体至多与B中的一个实体相联系,B中的一个实体可以同A中的任意数目的实体相联系。(如课程和学院)

多对多:A中的一个实体可以同B中的任意数目的实体相联系,B中的一个实体可以同A中的任意数目的实体相联系。(如学生和课程)

(2)图形化表示

→表示指向参与联系集中的一方实体集,—表示参与联系集中的多方实体集。

2)码约束

(1)实体集的码

超码:实体集中能够唯一标识一个实体的一个或多个属性的集合。

候选码:超码的任意真子集都不能称为超码,这种超码称为候选码。

(2)联系集的码和属性安置

二元联系集的主码选择依赖于联系集的映射基数:

一对一联系集:主码可以选择参与联系的任何一方实体集的主码,属性可安置在任意一方。

一对多(多对一)联系集:主码选择多的一方实体集的主码,属性可安置在联系集上,也可以安置在多的一方实体集上。

多对多联系集:主码由参与联系的所有实体集的主码组成,属性只能安置在联系集上。

3)依赖约束:指联系中一种实体的存在依赖于该联系集中联系或其他实体集中实体的存在。

(1)实体集与联系集之间的依赖约束:联系中一种实体的存在依赖于该联系集中联系的存在,并将依赖于联系集而存在的实体集称为依赖实体集。(如销货单实体集与商品销售联系集,销货单为依赖实体集)

(2)实体集之间的依赖约束:联系中一种实体的存在依赖于其他实体集中实体的存在,并将依赖于其他实体集而存在的实体集称为弱实体集。(如开课班实体集依赖于课程实体集)

4)参与约束

5)多值联系:指在同一个给定的联系集中,相关联的相同实体之间可能存在多个联系。

3、简化的大学选课系统的E-R图

其中:ISA关系可从两个方向进行设计:

从自上而下方向,先设计学生实体集,再根据属性的不同,将学生具体化为本科生和研究生,研究生进一步具体化为硕士研究生和博士研究生;

自下而上方向,先设计出研究生和本科生,在提取公共属性,泛化为学生。

4、将上图中部分转化为关系模式

1)表示方法:加下划线的属性表示它为主码成员;斜体表示外码成员

1)由实体集转化而来的关系模式

(1)学院实体集:institute(instituteno,institutename,instituteaddress)

(2)课程实体集:course(courseno,couresname,credithour,coursehour,priorcourseno,instituteno)

(3)时间安排弱实体集:timeschedule(courseno,cclassno,time,classroomno)

(4)开课班弱实体集:ourseclass(courseno,cclassno,year,semester,capacity,enrollnumber)

2)由联系集转化而来的关系模式

(1)选课联系集:enroll(studentno,courseno,cclassno,score,teacherno,recorddate)

3)由多值属性转化而来的关系模式

(1)电话号码多值属性:phonenumber(studentno,pnumber)

4)由类层次转化而来的关系模式

(1)研究生的实体集:graduate(studentno,direction,teacherno)

最新文章

  1. examine self thrice a day2017
  2. [转]权限问题导致Nginx 403 Forbidden错误的解决方法
  3. C语言深度挖掘
  4. volley中网络请求
  5. 基于DDD的.NET开发框架 - ABP分层设计
  6. Hibernate常用配置文件详解
  7. 虚拟机修改静态ip
  8. Object源码解析(JDK1.8)
  9. Python 的 urllib.parse 库解析 URL
  10. apigateway-kong(一)简介及部署
  11. Educational Codeforces Round 62 (Rated for Div. 2) - C Playlist
  12. shell-特殊变量列表
  13. cookie&session的Q&A故事[原理篇]
  14. 关于socket的知识总结
  15. Python使用Redis数据库
  16. SpringMVC DELETE,PUT请求报错 添加支持Http的DELETE、PUT请求
  17. 设计模式--访问者模式C++实现
  18. kalman处理realsense数据
  19. SignalTap II进阶学习
  20. Python与数据结构[1] -> 栈/Stack[0] -> 链表栈与数组栈的 Python 实现

热门文章

  1. Pytest系列(14)- 配置文件pytest.ini的详细使用
  2. 8.1 api概述及使用
  3. Apache与PHP的配置
  4. 文件上传——客户端检测绕过(JavaScript检测)(一)
  5. 编写高质量Python程序(三)基础语法
  6. spring中BeanPostProcessor之三:InitDestroyAnnotationBeanPostProcessor(01)
  7. qad progress数据库启动出错解决
  8. D - Catch That Cow BFS
  9. 关于vue切换用户,路由表不更新问题
  10. sftp的用法