三范式与ER模型

news2024/12/24 20:31:58

三范式

概念:

三范式(3NF)是关系型数据库设计理论的基础,它确保数据的结构化和减少数据的冗余性。三范式由数学家E.F. Codd在1970年提出,作为关系理论的一部分。三范式包括:

第一范式(1NF):

每一个列都不可再分,即列中存储的都是原子值,不可再分的数据项。
同一个关系中,每个属性都有唯一的属性名。
每个记录(或行)都有一个唯一的标识,通常是主键。
每个列都不可再分,即列中存储的都是原子值,不可再分的数据项。

第二范式(2NF):

满足第一范式。
每个非主属性都完全函数依赖于整个主键。这意味着如果表有一个复合主键,则该表的每一个非主属性都应该依赖于这个复合主键的整个部分,而不仅仅是部分。

第三范式(3NF):

满足第二范式。
非主属性之间没有传递依赖。简单来说,非主属性不应该依赖于其他非主属性。

进一步地,还有其他的范式,如BCNF、3.5NF等,但它们在日常的关系数据库设计中并不常用。满足三范式通常被认为是创建无冗余和结构良好的数据库的最小要求。

设计满足三范式的数据库可以确保数据的结构清晰、易于维护,并减少数据的冗余性和插入、更新、删除操作时的异常。然而,有时在某些应用场景中,为了查询性能或其他优化,可能会故意违反三范式。在这种情况下,需要仔细权衡规范化的好处和其可能带来的问题。

第一范式,例:

分析:不符合第一范式

表包含“学生ID”、“班级”、“班主”、“课程”和“分数”这五个属性,不符合第一范式(1NF),是因为某些属性包含了可以进一步拆分的复合数据或数组。在第一范式中,每个列都应该只包含原子值,即不可再分的数据项。

例如,如果“班级”这一列包含了多个班级的信息,如“1A, 2B, 3C”,或者“课程”这一列包含了多门课程的信息,如“数学, 物理, 化学”,那么这个表就不符合第一范式。因为这些列包含了可以进一步拆分的复合数据。

为了使其符合第一范式,我们可以进行如下拆分:

学生表 (Students):

学生ID (StudentID, 主键)
其他与学生相关的属性(例如:姓名、性别等)

班级表 (Classes):

班级ID (ClassID, 主键)
班级名称 (ClassName)
班主 (TeacherID, 外键,关联到教师表)

课程表 (Courses):

课程ID (CourseID, 主键)
课程名称 (CourseName)

分数表 (Scores):

学生ID (StudentID, 外键,关联到学生表)
课程ID (CourseID, 外键,关联到课程表)
分数 (Score)
班级ID (ClassID, 外键,关联到班级表,可选,如果需要考虑班级对分数的影响)

这样,每个表都只包含原子值,每个列都不可再分,并且每个表都有一个明确的主键。同时,通过外键关联,可以确保数据的引用完整性。这样拆分后的数据库结构就满足了第一范式的要求。

第二范式,例:

一个表中只能保存一种类型数据 

第三范式,例:

同一个表中互相都不能被推导出来,例如上面的例子,班主任可以由班级推导出来,所以拆成两个表

ER模型

概念:

E-R模型(Entity-relationship model)实体关系模型,E- R模型的构成成分是实体集、属性和联系集。

表示方法:

(1)实体集用矩形框表示, 矩形框内写上实体名。

(2)实体的属性用椭圆框表示, 框内写上属性名,并用无向边与其实体集相连。

(3)实体间的联系用菱形框表示, 联系以适当的含义命名,名字写在萎形框中,用无向连线将参加联系的实体矩形框分别与菱形框相连,并在连线上标明联系的类型,即1——1、1——N或M——N.

数据库设计的过程,就是将现实世界抽象到信息系统的过程,使用的工具就是ER图,我们把所有参与到业务流程中的对象,抽象为“实体”,每个实体有自己的“属性”,实体与实体之间产生的动作叫"关系”,用线连接起来。

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

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

相关文章

182基于matlab的半监督极限学习机进行聚类

基于matlab的半监督极限学习机进行聚类,基于流形正则化将 ELM 扩展用于半监督,三聚类结果可视化输出。程序已调通,可直接运行。 182matlab ELM 半监督学习 聚类 模式识别 (xiaohongshu.com)

我的NPI项目之Android 安全系列 -- Keymaster到底是个什么

最近因为一直在调研独立secure element集成的工作,不巧的是目前使用的高通平台只有NFC-eSE的方案。高通目前也并不支持独立的eSE集成,codebase中并无相对应的代码。举个例子,目前使用的STM的一款eSE,但是这款eSE的开发STM还没有完…

Mint_21.3 drawing-area和goocanvas的FB笔记(三)

一、改变goocanvas线条自动画线时间间隔 通过系统SIGALRM信号触发,每秒画一条线对于慢温湿度等慢变信号可以应付,但对于快速信号1秒的间隔就太慢了。可以改变方式,通过另外的线程,完成要做的任务。 1. 线程的回调函数 myfunc 2…

串的定义及BF算法

定义 BF算法——朴素查找算法——也叫做串的模式匹配算法 其应用特别多,比如经常在一篇文章里面搜索一些东西,(比如文章里的某个内容,或某些关键字词出现的位置,次数等) 之前我们大多数情况下是用来搜索关…

在Ubuntu中安装pycharm的专业版且可以激活到2099年(保姆级教学,值得借鉴与信任)

一、进入官网,下载Pycharm2021.3版本 1.官网如下 https://www.jetbrains.com/pycharm/2.在浏览器中进入官网后,点击Download 3.再点击右下角的Other versions 4.选择Version 2021.3下的2021.3-Linux(tar.gz)进行下载 二、安装Pycharm2021.3 1.先将该压…

还在手动Word转PPT?快来试试这些一键生成工具!

在我们日常的工作和学习中,将Word转化成PPT的需求时常出现,尤其是当我们需要进行演讲或者报告时。这不仅能使我们的演讲更具视觉冲击力,也有助于我们更好地传达信息。 那么,如何才能轻松地将Word转换成PPT呢?下面将为…

MWC 2024 | 紫光展锐推出业界首款全面支持5G R16宽带物联网特性的芯片平台V620

要点: 紫光展锐V620支持5/4/3/2G全网通。支持NR 2CC和LTE 5CC,在SA网络下,其5G下行速率可达4.67Gbps,上行速率高达1.875Gbps,相比紫光展锐上一代产品提升100%。紫光展锐V620率先支持5G TSN,把5G应用于工业…

汽车设计的视觉盛宴:艺术家的渲染效果图集锦

对于那些对汽车渲染艺术充满热情的朋友来说,"至臻汽车"渲染效果图总是心之向往。本回,我们精心准备了第十届3dmodels年度汽车渲染比赛的佳作,收录了来自全球的顶级创作者的精彩作品。每张作品都代表了艺术家对精细质感的深究及对极…

基于springboot+vue的流浪宠物管理系统

博主主页:猫头鹰源码 博主简介:Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战,欢迎高校老师\讲师\同行交流合作 ​主要内容:毕业设计(Javaweb项目|小程序|Pyt…

【每日刷题】数组-LC56、LC238、随想录1、LC560

1. LC56 合并区间 题目链接 Arrays.sort先让intervals里的子数组按照子数组的第一个数字值从小到大排列。开一个新数组,newInterval,存放合并好的子数组让intervals的当前子数组i的第一个数字与newInterval的当前子数组index的最后一个数字比较大小&am…

软文推广带来的收录排名提升,助你在搜索引擎中脱颖而出

互联网营销是一种不受时间和空间限制的营销方式,是一些中小企业成本低、效果好的推广方式。 行业做软文推广,最重要的是选择合适的软文推广平台,现在市场上有很多软文推广平台,这使得很多企业难以选择,此时企业需要学会…

回溯算法套路③排列型回溯+N皇后【基础算法精讲 16】

46 . 全排列 链接 : . - 力扣&#xff08;LeetCode&#xff09; 思路 : 那么怎么确定选了那个数呢? 这里设置一个used表示i选没选过 ; class Solution { public:vector<vector<int>> ans;vector<int> path;void backtrack(vector<int>nums,vect…

常见漏洞的流量特征

1、SQL注入漏洞 查看url / Referer字段/User-Agent字段/cookie字段 出现一些特殊字符&#xff08;eg&#xff1a;单引号【‘】、双引号【“”】、括号【&#xff08;&#xff09;】、单引号括号【‘&#xff08;】、双引号括号【“&#xff08;】等一些常见的特殊的字符&#…

ansible执行速度慢问题解决过程

ansible执行速度慢问题解决过程 一、初见端倪二、问题分析三、解决问题更多技术博客,请关注微信公众号:运维之美 接到项目反馈,客户环境使用我们提供工具部署产品,在主机添加步骤卡了很久,实施同学没有办法,将问题上升给我们。 环境信息:kylin10 架构:arm 一、初见…

【NR 定位】3GPP NR Positioning 5G定位标准解读(四)

目录 前言 6 Signalling protocols and interfaces 6.1 支持定位操作的网络接口 6.1.1 通用LCS控制平面架构 6.1.2 NR-Uu接口 6.1.3 LTE-Uu接口 6.1.4 NG-C接口 6.1.5 NL1接口 6.1.6 F1接口 6.1.7 NR PC5接口 6.2 终端协议 6.2.1 LTE定位协议&#xff08;LPP&#x…

python二级常见题目

一.常见语法 jieba—第三方中文分词函数库 jieba—第三方中文分词函数库_jieba库函数-CSDN博客 Python基础——format格式化 Python基础——format格式化_python format-CSDN博客 format()方法的使用超全_format方法-CSDN博客 Python中random函数用法整理 Python中random…

如何在CentOS部署JumpServer堡垒机并实现无公网ip环境远程访问

文章目录 前言1. 安装Jump server2. 本地访问jump server3. 安装 cpolar内网穿透软件4. 配置Jump server公网访问地址5. 公网远程访问Jump server6. 固定Jump server公网地址 前言 JumpServer 是广受欢迎的开源堡垒机&#xff0c;是符合 4A 规范的专业运维安全审计系统。JumpS…

网络进程:广播、组播、流式域、报式域(套接字)

1.广播 1.1广播发送端模型(类似UDP客户端) 程序代码&#xff1a; #include<myhead.h> int main(int argc, const char *argv[]) {//创建套接字int sfdsocket(AF_INET,SOCK_DGRAM,0);if(sfd-1){perror("socket error");return -1;}//将套接字设置成允许广播i…

【金三银四】每日一点面试题(Java--JVM篇)

1、说一下 JVM 的主要组成部分及其作用&#xff1f; JVM&#xff08;Java虚拟机&#xff09;是Java程序运行的核心组件&#xff0c;它负责将Java字节码翻译成底层操作系统能够执行的指令。JVM由以下几个主要组成部分构成&#xff1a; 类加载器&#xff08;Class Loader&#…

【sgCollapseBtn】自定义组件:底部折叠/展开按钮

特性&#xff1a; 支持自定义折叠状态支持自定义标签名称 sgCollapseBtn源码 <template><div :class"$options.name" click"show !show" :placement"placement"><div class"collapse-btns"><div class"c…