【MySQL】E-R图-关系数据模型-3NF--精讲+练习(巨全面)

一.知识储备

E-R图

E-R图,即实体-关系图(Entity-Relationship Diagram),是数据库建模的一种工具,用于表示实体类型、属性以及它们之间的关系。

在E-R图中,实体用矩形表示,属性用椭圆表示,而它们之间的关系用菱形表示。实体之间通过线连接,并在连接线上标明它们之间的基数关系,如1:1、1:n或n:m等。

E-R图的设计是数据库逻辑结构设计的重要步骤,它能够帮助设计者清晰地理解数据间的关系,并为数据库的物理结构设计打下基础。

关系数据模型

关系数据模型是基于集合论的模型,它使用二维表格形式来表示数据,每个表包含多个记录,记录由多个数据项组成,每个数据项对应一个域。关系数据模型中最基本的操作包括选择、投影和连接等,这些都是关系代数的基本操作。

关系模型的核心是关系模式,它定义了表的架构,包括表名、属性名和它们的域。关系模型的优势在于其简洁性和强大的查询能力,它屏蔽了底层实现的细节,使得数据操作更加直观和易于理解。

3NF

第一范式

定义

第一范式(1NF)规定表中的每个列必须是不可分割的基本数据项,即表中的每个单元格必须包含单一的值。如果一个列中包含多个值,则需要将该列拆分为多个独立的列,以确保表结构的原子性。

应用

例如,一个名为“联系人”的表中包含“姓名”、“性别”和“电话”三个字段。如果一个人的联系信息包括家庭电话和公司电话,那么原来的表结构就不符合1NF,因为“电话”这一列包含了多个值。正确的做法是将“电话”字段拆分为“家庭电话”和“公司电话”两个独立的列。

第二范式

定义

第二范式(2NF)是在1NF基础上进一步要求,表中必须有主键,且非主键列必须完全依赖于整条主键,而不是主键的一部分。如果一个表有组合主键,则非主键列不能仅依赖于这个组合键的一部分。

应用

例如,一个订单明细表中包含“订单ID”、“商品ID”、“商品名称”和“商品价格”。如果“商品名称”和“商品价格”仅依赖于“商品ID”,而不仅仅是“订单ID”和“商品ID”的组合,那么这个表就不符合2NF。为了满足2NF,需要将订单明细表拆分为两个表:订单表和商品表,分别保存订单信息和商品信息,并通过外键关联。

第三范式

定义

第三范式(3NF)是在2NF基础上继续要求,表中任何非主属性不依赖于其他非主属性,即不存在传递依赖。这意味着每个非主属性必须直接依赖于主键,而不是通过其他非主属性间接依赖。

应用

例如,一个学生信息表中包含“学号”、“姓名”、“专业”和“学院”。如果“学院”依赖于“专业”,而“专业”又依赖于“学号”,那么这个表就不符合3NF。为了满足3NF,需要将学生信息表拆分为多个表,如学生表、专业表和学院表,通过外键关联来消除传递依赖。

二.绘制E-R图

确定实体
确定联系
把实体类型和联系类型组合,形成E-R图框架
确定实体类型和联系类型的属性
确定实体类型的关键键(主键和外键),在属于关键键的属性名下划一横线

注意事项:

·只标识实体属性的关键字,关系属性没有标关键字。
·如果处理对象是一个比较大的系统,则应该先画出各个部分的子E-R图,然后再合并同类实体,消除冗余。
·对于一个特定的应用处理对象,所构造的E-R模型可能不唯一。

三.E-R图向关系数据模型的转换

实体类型的转换

对E-R图中的每一个实体建立一个关系——表,关系包含的属性,要包括E-R图中对应实体所具有的全部属性。实体的属性即为关系的属性,实体的标识符即为关系的键。

有必要的话,比如为了满足范式,图中的关系属性也可以建立一个表。

联系类型的转换

1:1

对于一对一(1:1)关系,可在两个实体类型转换成的两个关系模式中的任意一个关系模式的属性中加入另一个关系模式的键和联系类型的属性。

1:n

对于一对多(1:N)关系,在N端实体类型转换成的关系模式中加入1端实体类型转换成的关系模式的键和联系类型的属性。

对E-R图中的每一个1:n的联系,分别让“1”的一方的关键字进入“n”的一方作为外部关键字。“联系”本生若具有属性,也让它们进入“n”的一方作为外部关键字。

m:n

对于多对多(M:N)关系,将联系类型转换成关系模式,其属性为两端实体类型的键加上联系类型的属性,而键为两端实体键的组合。

对E-R图中的每一个m:n的二元或更多元的“联系”,则为这些联系分别建立一个“关系”,关系的属性要包括对应联系自身的全部属性。(若有的话)还要包括形成该联系的多方实体的关键字。

检查按照以上方法所形成的多个“关系”,如果发现有的“关系”最终只含有一个属性,则把这样的“关系”取消。

四.练习

范式判断及改错

(1)

判断下面的关系表是否满足 2NF, 若不满足, 将其修正为满足 3NF:
科研表(教师代码, 姓名, 职称, 研究课题号, 研究课题名) 

2NF-->非主键列依赖于主键,本题中的一个课题中包含多个教师(代码),研究课题号, 研究课题名不依赖与主键,不满足第二范式。

教师表(教师代码, 姓名, 职称)

研究课题表( 研究课题号, 研究课题名,教师代码)

 (2)

判断下面的关系表是否满足 3NF, 若不满足, 将其修正为满足 3NF:
学生关系表(学号, 姓名, 年龄, 所在学院, 学院地点, 学院电话)

3NF-->属性之间不相互依赖,所在学院、学院地点和学院电话三者相互依赖,不满足第三范式的条件。

学生表(学号,姓名,年龄,所在学院)

学院表(学院名、学院地点,学院电话)

画E-R图

某工厂需建立一个产品生产管理数据库来管理如下信息:车间编号、车间主任姓名、车间电话,车间职工的职工号、职工姓名、性别、年龄、工种,车间生产的零件号、零件名称、零件的规格型号,车间生产一批零件有一个批号、数量、完成日期(同一批零件可以包括多种零件)。
(1)画E-R图
(2)试按规范化的要求给出关系数据库模式。

(1)做这种题的时候,要先明确各个实体和关系:

工厂

车间——生产——零件

车间——分配——职工

这是读题之后可以读到的大体,这样就可以构造出简单的关系

然后深入读题,读好各个属性

具体的属性如下图

本图画的有些许的崎岖哈哈哈,大家见谅 

 然后说明一下几个点:

1.先分辨好属性和关系,可以结合题目和具体情景,这会为你提供一个框架,对于后续的画图有很大的帮助

2.开始加属性,一个属性在图中只出现一次,当发现有属性重复出现时,就要首先想到需要通过关系来关联,例如本题的职工实体中,本来应包含车间编号属性,但是因为车间和职工之间的雇佣关系,所以可以直接省去

3.当把框架中实体的属性都对应完成后,如果还发现题目中还有其他属性没有对应,就应该想到:

1)在某些实体对应漏了;

2)某些关系需具备属性,例如本题的生产关系;

3)缺实体(一般不会)

4.对于主键的设定,主要是服务于建立数据库模式,每个表都需要主键,并且需要满足三范式。在需要时,一般定义主键。如果发现将一个属性定义为主键时,还会出现查询时出现一对多等的状况时,那此时需考虑建立联合主键,例如本题中,如果以批号为主键时,当我们查询批号,有可能会出现多个零件,不满足范式,此时可以将批号和零件合在一起做联合主键,这样可以避免这种情况。

(2)建立数据库模式,俗称建表

车间表(车间编号、车间主任姓名、车间电话)

职工表(职工号、职工姓名、性别、年龄、工种、车间号

零件表(零件号、零件名称、零件的规格型号)

批次表(批次、零件号、数量、完成日期)

以上答案仅供参考,如果有问题,欢迎交流。 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/708601.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【精品方案】离散型制造行业智能工厂标准解决方案(49页 PPT)

引言:随着科技的不断进步和制造业的转型升级,离散型制造行业正面临着从传统制造向智能制造转型的迫切需求。离散型制造行业涉及的产品种类繁多,生产流程复杂,对生产效率、产品质量和成本控制有着极高的要求。因此,开发…

Nginx部署Vue项目css文件能加载但是不生效

目录 问题描述问题解决 问题描述 Nginx部署打包后的Vue项目css文件能加载但是不生效, 问题解决 查看响应标头,发现不对劲, Content-Type: text/plain正确的应该是 Content-Type: text/css根本原因是nginx没有告诉浏览器正确的文件类型 所…

大厂Java面试题:详细描述MyBatis缓存的实现原理

大家好,我是王有志。今天给大家带来的是一道来自光大科技的 MyBatis 面试题:详细描述MyBatis缓存的实现原理。 在通过源码分析 MyBatis 一二级缓存的实现原理前,我先给出我的回答。 首先是 MyBatis 一级缓存的实现原理: MyBaits…

vscode插件开发之 - menu配置

上一遍博客介绍了如何从0到1搭建vscode插件开发的base code,这遍博客将重点介绍如何配置menu。通常,开发一款插件,会将插件显示在VSCode 左侧的活动栏(Activity Bar),那么如何配置让插件显示在Activity Bar…

[Shell编程学习路线]——深入理解Shell编程中的变量(理论与实例)

🏡作者主页:点击! 🛠️Shell编程专栏:点击! ⏰️创作时间:2024年6月12日11点40分 🀄️文章质量:95分 文章目录 ————前言———— 1 自定义变量 🫠…

数据结构笔记39-48

碎碎念:想了很久,不知道数据结构这个科目最终该以什么笔记方式呈现出来,是纸质版还是电子版?后来想了又想,还是电子版吧?毕竟和计算机有关~(啊哈哈哈哈哈哈哈) 概率论已经更新完了&…

为国产加油:“缺芯少屏”暂缓,另一领域,也要加把劲

说起咱中国之前的“缺芯少屏”,真的是让人挺闹心的。 不过呢,为了改变这个状况,咱们的工程师们可是费了不少劲儿,辛辛苦苦努力了数十年。现在好了,咱们也迎来了柔性屏的时代。 柔性屏 说起来,在触摸屏或者…

消费者消费数据时报错:INVALID_REPLICATION_FACTOR

今天部署了kafka集群,三台服务器,启动后,生产者发送数据,消费者接收数据的时候报错,INVALID_REPLICATION_FACTOR。 查了很多资料,说是要改kafka下config目录的server.properties,可能是副本数太小&#xff…

【MATLAB源码-第225期】基于matlab的计算器GUI设计仿真,能够实现基础运算,三角函数以及幂运算。

操作环境: MATLAB 2022a 1、算法描述 界面布局 计算器界面的主要元素分为几大部分:显示屏、功能按钮、数字按钮和操作符按钮。 显示屏 显示屏(Edit Text):位于界面顶部中央,用于显示用户输入的表达式和…

Python学习打卡:day05

day5 笔记来源于:黑马程序员python教程,8天python从入门到精通,学python看这套就够了 目录 day538、函数的初体验39、函数的基础定义语法函数的定义注意事项 40、函数的基础定义案例练习41、函数的传入参数42、函数的传入参数案例练习——升…

python django初步搭建(一)

记录一次简单的python django使用,后续调用api相关的暂时不想写。。。 一、环境 windows python 3.11.7 django 二、初步搭建 2.1 新建空文件夹 为了方便本次记录,新建了一个空的文件夹来使用。 直接在这里输入cmd 然后按下回车 2.2 安装virtual…

Kubernetes集群持久化部署实践

WordPress 网站持久化部署 要持久化MariaDB 可以把 Deployment 改成了 StatefulSet,修改 YAML添加“serviceName”“volumeClaimTemplates”这两个字段,定义网络标识和 NFS 动态存储卷,然后在容器部分用“volumeMounts”挂载到容器里的数据目…

利用three-csg-ts对做物体交互式挖洞

默认物体均为居中,如果指定位置没有发生偏移,可能是因为在执行布尔操作之前没有正确设置变换。确保在进行布尔运算之前应用所有必要的变换。以下是经过修正的完整代码示例,它会确保圆柱正确旋转并与盒子进行 CSG 操作。 安装依赖 首先&…

快捷回复话术分享:如何应对顾客愤怒骂人?

在客服的日常工作中,面对情绪激动、甚至愤怒发泄骂人的顾客是常见的挑战。初入此行业的小伙伴们往往在遭遇顾客的激烈情绪时感到手足无措,不知道如何妥善回应。为此,本文将分享一些实用的快捷回复话术和技巧,帮助新手客服更好地处…

vue聊天发送Emoji表情

在用web端写聊天发送表情的功能中,使用web端有系统自带的unicode表情会出现每端不统一的情况,不好用不能统一,在这里我想到了一个非常好的思路,可以解决这个问题! 那就是发送表情用图片的形式呈现,然后发给…

电脑屏幕怎么显示提醒事项 电脑桌面提醒事项设置

在这个信息爆炸的时代,我们每个人都像是被数据洪流裹挟着前进。工作中,生活中,无数琐碎而重要的事情需要我们记忆和处理。有时,仅仅依靠大脑去记住所有事情,真的让人头疼。特别是对于那些整日面对电脑的办公族来说&…

Python基础教程(十一):数据结构汇总梳理

💝💝💝首先,欢迎各位来到我的博客,很高兴能够在这里和您见面!希望您在这里不仅可以有所收获,同时也能感受到一份轻松欢乐的氛围,祝你生活愉快! 💝&#x1f49…

使用C#快速搭建一个在windows运行的exe应用

文章目录 一、前言1.1 编写语言需要工具1.2 选择自己需要的组件进行安装 二、新建项目1.1 新建一个 .NET4.x 的项目1.2 添加一个小案例1.3 对界面进行美化1.3.1、配置Form属性1.3.2、配置Button按钮 1.4 查看组将的相关代码 三、后记 一、前言 这是一个比较旧的内容&#xff0…

java调用GDAL及JTS实现生成泰森多边形(Voronoi图)的一种方法

目录 一、关于泰森多边形 1.泰森多边形的特性 2.本文的目的 二、实现思路 1.gdal和jts库的maven坐标 2.jts生成泰森多边形的关键代码 3.使用GDAL读取源文件信息的关键代码 4.使用GDAL将生成的泰森多边形写入文件 三、实现结果 1.实现的效果 2.完整代码示例 一、关于…

【STM32】飞控设计

【一些入门知识】 1.飞行原理 【垂直运动】 当 mg>F1F2F3F4,此时做下降加速飞行 当 mg<F1F2F3F4,此时做升高加速飞行 当 mgF1F2F3F4 ,此时垂直上保持匀速飞行。 【偏航飞行】 ω 4 ω 2 ≠ ω 1 ω 3 就会产生水…