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

news2024/11/26 11:55:37

一.知识储备

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.coloradmin.cn/o/1826117.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Java SSTI服务端模版注入漏洞原理与利用

文章目录 前言Velocity基础语法基础示例命令执行 靶场实践漏洞代码漏洞验证检测工具 FreeMarker基础示例漏洞示例CMS案例 Thymeleaf基础示例漏洞示例安全方案 总结 前言 SSTI(Server Side Template Injection)全称服务端模板注入漏洞,在 Jav…

Swift开发——元组

Swift语言的数据类型包括整型、浮点型、字符串、布尔型、数组、元组、集合和字典等,本文将详细介绍元组。 01、元组 严格意义上,元组不属于数据类型,而属于数据结构。元组将一些变量或常量或字面量组织成一个有序的序列,索引号从0开始,用圆括号“()”括起来,各个元素间用…

笔记100:使用 OSQP-Eigen 对 MPC 进行求解的方法与代码

1. 前言: 我们在对系统进行建模的时候,为了减少计算量,一般都将系统简化为线性的,系统如果有约束,也是将约束简化为线性的; 因此本篇博客只针对两种常见系统模型的 MPC 问题进行求解: 线性系统…

【ARM-Linux篇】智能家居语音模块配置

1. pin脚配置: 2. 命令词自定义基本信息: 3. 命令词自定控制详情: • 测试:串口模块可先通过串口助手验证每个指令的准确性, 然后运行wiringOP中的serialTest程序(需把/dev/ttyS2改成/dev/ttyS5) 然后语音接收到指令后(比如喊你好…

如何在 Postman 中进行 HTTPS 请求

https 请求是一种安全的网络通信方式,它使用 SSL/TLS 协议来加密数据和验证身份。在 postman 中发起 https 请求的步骤如下。 Postman 发起 https 请求 1、打开 postman 应用程序,点击左上角的“”号按钮,创建一个新的请求。 2、在请求标签…

MB-iSTFT-VITS 模型论文思路与实验分享:基于VITS架构优化的轻量级文本转语音模型

参考文献: [1] Kawamura M, Shirahata Y, Yamamoto R, et al. Lightweight and high-fidelity end-to-end text-to-speech with multi-band generation and inverse short-time fourier transform[C]//ICASSP 2023-2023 IEEE International Conference on Acoustics…

万能破题方法包(3)暴力破解法

一、前言 暴力破解法是指通过尝试所有可能的密码组合来破解密码 1.1、概念 暴力破解法是一种通过尝试所有可能的密码组合来破解密码的方法。它基于暴力的方式,不依赖于任何密码漏洞或特殊技巧,而是通过穷举所有可能性来找到正确的密码。 1.2、解决步骤 …

华为数通题库HCIP-821——最新最全(带答案解析)

单选1、下面是一台路由器的输出信息,关于这段信息描述正确的是 A目的网段1.1.1.0/24所携带的团体属性值是no—export表明该路由条目不能通告给任何BGP邻居 B目的网段5.1.1.0/24所携带的团体属性值是no—advertise表明该路由条目不能被通告给任何其他的BGP对等体 C…

【秋招突围】2024届秋招笔试-小红书笔试题-第一套-三语言题解(Java/Cpp/Python)

🍭 大家好这里是清隆学长 ,一枚热爱算法的程序员 ✨ 本系计划跟新各公司春秋招的笔试题 💻 ACM银牌🥈| 多次AK大厂笔试 | 编程一对一辅导 👏 感谢大家的订阅➕ 和 喜欢💗 📧 清隆这边…

若依Ruoyi-vue和element admin的区别,该如何选择。

提到中后台的前端框架,每个人都能列举出很多,这其中提及率比较高的就是Ruoyi和element admin两款,很多小伙伴分不清二者,本文为大家详细讲解一下。 一、若依Ruoyi-vue是什么? 若依Ruoyi-Vue是一款基于 Vue.js 开发的…

英伟达开源3400亿参数巨兽,98%合成数据训练出最强开源通用模型!性能媲美GPT-4o

英伟达刚刚再次证明了其在AI创新领域的领导地位。 它全新发布的Nemotron-4 340B,是一系列具有开创意义的开源模型,有望彻底改变训练LLM的合成数据生成方式! 这一突破性进展标志着AI行业的一个重要里程碑—— 各行各业无需依赖昂贵的真实世界数…

挑战5分钟内基于Springboot+SpringMVC+Mybatis-plus快速构建web后端三层架构

目标 在清晨的代码编辑器上,一场新的挑战即将开始。程序员们肃立于安静的办公室,眼神专注地盯着屏幕,等待着编译器的一声提示。 随着编译器输出的激动人心的"start!"的提示,战斗的序幕拉开了。Bug如潮水般涌来&#x…

Golang——gRPC gateway网关

前言 etcd3 API全面升级为gRPC后,同时要提供REST API服务,维护两个版本的服务显然不大合理,所以gRPC-gateway诞生了。通过protobuf的自定义option实现了一个网关。服务端同时开启gRPC和HTTP服务,HTTP服务接收客户端请求后转换为gr…

消息群发工具制作的过程和需要用到的源代码!

在信息化快速发展的今天,消息群发工具因其高效、便捷的特点,在各个领域得到了广泛的应用,无论是企业营销、社交互动,还是日常通知,消息群发工具都发挥着不可替代的作用。 本文将详细介绍消息群发工具的制作过程&#…

[RL9] Rocky Linux 9.4 搭载 PG 16.1

副标题:Rocky Linux 9.4 升级实录,及 PG 16 相关内容 背景 Rocky Linux 9.4 (以下简称 RL) 于5月9日正式发布,本文记录了从 RL 9.3 升级到 9.4 的过程,以及升级前后的一些变化。 之前介绍过 RL 9 的相关内容,请戳&…

【C++】STL中stack、queue、deque的使用

前言:在前面我们学习了List的模拟实现与使用,今天我们进一步的来学习stack、queue、deque的使用方法,然后为后面的模拟实现做一下铺垫。 💖 博主CSDN主页:卫卫卫的个人主页 💞 👉 专栏分类:高质量&#xff…

liunx常见指令

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 目录 前言 二、安装环境 1.租借服务器 2.下载安装 XShell 3.使用xshll登录服务器 三、Linux基础命令 一、文件和命令 ​编辑1、cd 命令 2、pwd 命令 3、ls 命令 4、cp 命令 …

【three.js案例一】智慧星球

直接附上源码: import * as THREE from three; import { OrbitControls } from three/addons/controls/OrbitControls.js;//场景 const scene = new THREE.Scene();const geometry = new THREE.SphereGeometry(50,32,16);console.log(.postion,geometry.attributes.position)…

上网行为管理产品有哪些?好用的四款上网行为管理产品

上网行为管理产品是现代企业网络安全架构中的重要组成部分,它们旨在帮助企业有效监控、管理和控制员工的网络使用行为,确保网络资源的合理利用,保障信息安全,提升工作效率。 以安企神为例,我们将详细介绍它的主要功能…

python保存文件后打不开的原因是什么

引入数据集,奇怪的是怎么也打不开,显示不存在这个文件: 但是,我将文件改个名字,就打开了,难道csv的文件命名必须有一定合法性? import pandas users pandas.read_csv("H:\python\data an…