首页 > 数据库 >E-R模型图-->关系模型-->数据库模型图

E-R模型图-->关系模型-->数据库模型图

时间:2024-04-06 16:57:00浏览次数:27  
标签:关系 联系 -- 模型 实体 外键 主键 数据库 属性

一、问候语

客!

二、题目

三、如何分析问题并绘制E-R模型图

1、认识E-R模型三要素

  在分析问题前,我们首先要知道E-R模型的三要素分别是实体(用矩形表示)、属性(用椭圆形表示)、联系(用菱形表示)。
  客观存在并可相互区分的事物叫实体,例如学生、教师。
  实体所具有的某一特性称为属性,例如学生的姓名、学生的ID号。
  现实世界中的事物之间是有联系的,这些联系反映为实体内部的联系与实体之间的联系,例如学生和成绩单是两个不同的实体,学生与成绩单之间的联系是拥有的关系,即学生拥有成绩单。

2、提取E-R模型三要素

  Ⅰ.确定实体:由问题描述可以知道共有3个实体,分别是车队、车辆、司机
  Ⅱ.确定各实体的属性:由题目可以提取出信息,车队的属性有车队号、车队名。车辆的属性有牌照号、厂家、出厂日期。司机的属性有司机编号、姓名、电话
  Ⅲ.确定各实体间的联系:由题目可以提取出信息,车队与司机之间存在“聘用”联系,车队与车辆之间存在“拥有”联系,司机与车辆之间存在“使用”联系
  Ⅳ.确定各联系是否存在属性:我们通过依次分析三个关系,发现“聘用”关系有“聘用开始时间”和“聘期”两个属性。“使用”关系有“使用日期”和“公里数”两个属性

3、认识联系类型

  不同实体间的联系有3种情况,分别是1:1   1:n(n:1)  m:n(n:m)
  Ⅱ.1:1即一对一的关系,例如某个员工属于某个部门
  Ⅱ.1:n即多对多的关系,例如属于某个部门可以有多名员工
  Ⅱ.m:n即多对多的关系,例如某本书可以被多名学生借阅,某名学生可以借阅多本书

4、认识主键(主码)和外键(外码)

  Ⅰ.超键在关系中能唯一标识元组的属性集称为关系模式的超键(只要有一个键唯一,再随便组其他的键,合起来叫主键)。例如学生表中含有学号或者身份证号的任意组合都为此表的超键。如:(学号)、(学号,姓名)、(身份证号,性别)等
  Ⅱ.候选键不含有多余属性的超键称为候选键。候选键属于超键,它是最小的超键,就是说如果再去掉候选键中的任何一个属性它就不再是超键了。例如学生表中的候选键为:(学号)、(身份证号)。
  Ⅲ.主键关系型数据库中的一条记录中有若干个属性,若其中某一个属性集能唯一标识一条记录,该属性组就可以成为一个主键 (在超键选取一个作为主键,如果有多个字段的叫为联合主键),不管是一个字段的主键,还是多个字段的联合主键,都是唯一的。例如学生表中,我们通常会让“学号”做主键,教师表中让“教师编号”做主键。不将学生的姓名或者教师的姓名作为主键是因为不同学生或教师的姓名是有可能相同的,不能作为唯一标识,而学号和教师编号是唯一标识的,可以作为主键。 在E-R图中,我们需要在主键下方画横线以表示该为主键
  Ⅳ.外键如果关系模式R1中的某属性集不是R1的主键,而是另一个关系R2的主键则该属性集是关系模式R1的外键。外键是构建起两个实体或者实体与联系间的桥梁。例如一名学生的属性有学号,姓名,班级编号,其中学号是主键。班级的属性有班级编号,班级口号,班级位置,其中班级编号是主键。此时班级编号是学生这个实体的非主键属性,而却是班级这个实体的主键属性,此时可以认为学生实体的班级编号是外键,它搭建起了学生这个实体与班级这个实体的桥梁。

5、绘制E-R模型图

  我们在了解完以上的知识点以后就可以绘制E-R模型图了,绘制时的连线采用的无向图连线

四、如何将E-R图转换成关系模型

1、认识实体集和关系如何转成几个关系

  在一个E-R图(实体-关系图)中,实体集和联系是构建关系模型的基础。
  Ⅰ.实体集转成关系每个实体集通常直接转化为关系模型中的一个关系。因此,有几个实体集将转化为几个关系。
  Ⅱ.1:1联系转成关系1:1联系通常意味着其中一个实体集在关系模型中具有一个外键,该外键引用另一个实体集的主键。因此,这个联系不会引入新的关系,而是会在其中一个关系中添加一个外键。1:1联系在任意一个实体集加外键都可以,但是我们一般将外键加在非核心的实体上。
  Ⅱ.1:n联系转成关系1:n联系通常意味着其中一个实体集在关系模型中具有一个外键,该外键引用另一个实体集的主键。因此,这个联系不会引入新的关系,而是会在其中一个关系中添加一个外键。1:n联系一般将外键加在n的实体上。
  Ⅱ.m:n联系转成关系m:n联系在关系模型中通常需要一个新的关系来表示。这个新关系将包含两个外键,分别引用参与该联系的两个实体集的主键。

2、分析问题并提取出关系

  由题目题意可知,共有3个实体,分别是车队、车辆、司机,这3个实体直接转换成3个关系。
  由题目题意可知,共有2个1:n联系,分别是1个车队对应n个车辆、1个车队对应n个司机,此时不添加新的关系
  由题目题意可知,共有1个m:n联系,分别是m个车辆对应n个司机,此时添加1个新的关系
  总上我们可以分析出共有3+1=4个关系

3、写出各关系具体内容

  关系的写法一般是:实体/联系(属性1,属性2,...,属性n)。在1:1联系中在任意一个实体集加外键都可以,但是我们一般将外键加在非核心的实体上。1:n联系一般将外键加在n的实体上。m:n联系中有可能会出现联合主键,此时的联合主键也是联合外键。如果不是联合主键,那么外键分别是两端实体的主键。我们需要在主键下方画横线以表该为主键

五、如何将关系模式转换成数据库模型图

转换方法

  我们将不同的关系绘制成不同的矩形,关系名写在矩形上方,矩形内部写出每一个属性,其中主键和外键的属性需要特殊标记,主键一般写在矩形顶部,并用横线将主键和非主键分割开来。关系间的连线采用有向图连线,从某一关系的外键指向另一方关系的主键。

六、完整写法

七、结束语

此随笔内容仅为学习数据库原理及应用中的具体现实问题、E-R图、关系模式、数据库模型图之间转换的一些感悟、想法与总结,由于本人能力有限,如随笔内容有错误希望能见谅并加指出。----------------------------如果感兴趣的话可以点击页面下方的关注感谢你的支持!

标签:关系,联系,--,模型,实体,外键,主键,数据库,属性
From: https://www.cnblogs.com/Qing0/p/18117581

相关文章

  • yolov8系列[四]-yolov8模型部署
    https://blog.csdn.net/qq122716072/article/details/130930158?spm=1001.2101.3001.6650.6&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7EBlogCommendFromBaidu%7ERate-6-130930158-blog-130902253.235%5Ev43%5Epc_blog_bottom_relevance_base7&......
  • YOLOv8原理深度解读,超级详细【未完待续】
    https://blog.csdn.net/Albert233333/article/details/130044349?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~default-1-130044349-blog-130930158.235^v43^pc_blog_bottom_relevance_base7&spm=1001.2101.3001.4242.2&ut......
  • 阿里云安装Mysql数据库
    阿里云安装mysql数据库安装数据库&创建数据库用户参照以下步骤在Linux实例中安装MySQL数据库新建数据库实例上述文章止步于新建数据库用户,下面是心间数据库实例的操作。mysql-ulhkTest-p登陆mysql(lhkTest是用户名)showdatabases;查询已有数据库createdatabasehome_......
  • C语言 ---- extern的使用
    extern是一个关键字,用于在C和C++中声明一个变量或函数的外部链接性。当您在一个源文件中使用extern声明一个变量或函数时,它表示该变量或函数是在另一个源文件中定义的,而不是在当前文件中定义的。1.声明全局变量的外部链接性://File1.cintglobal_variable;//定义一个全局......
  • 4.6
    其实有很多想写的,但是很多都忘了()()()如果有能实时记录文字的东西就好了昨天看了个番,然后发现自己的处境和女主差不多,只不过女主太有天赋了,是我比不上的,然后后面就是经典剧情:互相救赎,当时我就想:互相救赎吗,好像很有趣啊,然后就破防了然后晚上在床上大概搞懂了自己现在这个样子是怎么样......
  • YOLOv8 深度详解!一文看懂,快速上手
    https://zhuanlan.zhihu.com/p/598566644?utm_id=0&wd=&eqid=a1d56281000fe8920000000464910f3a YOLOv8是ultralytics公司在2023年1月10号开源的YOLOv5的下一个重大更新版本,目前支持图像分类、物体检测和实例分割任务,在还没有开源时就收到了用户的广泛关注。考虑到......
  • JsonCpp 笔记: 读写 Json 文件
    JsonCpp笔记:读写Json文件完成时间:2024-04-06本文主要介绍使用JsonCpp读写Json文件,JsonCpp是C++上的一个Json处理库Json的语法如果熟悉Json语法,此部分可以跳过Json包含两种结构:对象(object),它是键值对的集合(key:value)有序数组(array)......
  • 训练(清明)
    1.飞机降落(经典dfs,遍历每一种情况,不符返回0,符合返回1,只要有一个返回值1就成立,记得每次都初始化一下标记数组)查看代码#include<bits/stdc++.h>#defineintlonglongusingnamespacestd;intn,T,b[15];structfei{intt;intd;intl;};structfeif[15];......
  • 玩家角色——攀墙跳
    目标新增Climb状态(略)玩家角色蓝图中添加攀爬检测机制的宏将关卡中的TileMap的Tag设置为Wall(暂时先这么做),让攀爬检测可以检测到玩家角色蓝图的跳跃输入添加攀爬反跳功能的逻辑动画蓝图的状态机设置核心逻辑通过射线检测机制对玩家面前的碰撞进行检测,如果是墙则修改玩家的......
  • P2495 [SDOI2011] 消耗战
    P2495[SDOI2011]消耗战虚树优化dp模板题考虑\(m=1\)。只需要简单的树形dp,设\(f_i\)表示\(i\)子树中的关键点都到不了\(i\)点的最小代价。转移枚举子节点\(v\),有:若\(v\)点为关键点,\(f_u=f_u+w(u,v)\)。否则,\(f_u=f_u+\min(f_v,w(u,v))\)。如果每次询问都跑一遍......