理解数据库设计范式_选课记录实体中包含学号课程号学生姓名成绩四个属性-程序员宅基地

技术标签: 语言  oracle  出版  Database/Sql  电话  影视  数据库  

第一范式(1NF): 对于表中的每一行,必须且仅仅有唯一的行值;在一行中的每一列仅有唯一的值并且具有原子性。

这个概念的第一句话很好理解,任何人也不会在一张表中存在两个一模一样的记录。关键是第二句话:在一行中的每一列仅有唯一的值并且具有原子性,看如下示例:

比如有一张学生的基本资料表,如下图所示:

学号

学生姓名

学生系部

学生班级

性别

电话

510073238

卜峰

信息工程系

计媒0523

’025858432511381541911013813000000

510073232

姚丽萍

信息工程系

计媒0523

 

510601114

杨雯雯

信息工程系

软件0515

0523-8377089213770525646

410022206

桑旭娟

信息工程系

信管0424

025-8587466213601468109

410022207

王玫

信息工程系

信管0424

0513-8844046013851989926

410022209

张露丽

信息工程系

信管0424

025-85874662

410032231

谭浩

信息工程系

影视0424

51988041182

这个表不符合1NF,因为“电话”字段中的值有多个,可以分割成多个值,不具有原子性,这样带来的问题维护、查询、统计该字段的值很麻烦。

我们通过把重复的字段的值放到独立的表中,把这些表通过一对多关系关联起来消除重复值。可以把上面的表改造成以下两张表,以符合第一范式:

学号

学生姓名

学生系部

学生班级

性别

510073238

卜峰

信息工程系

计媒0523

510073232

姚丽萍

信息工程系

计媒0523

510601114

杨雯雯

信息工程系

软件0515

410022206

桑旭娟

信息工程系

信管0424

410022207

王玫

信息工程系

信管0424

410022209

张露丽

信息工程系

信管0424

410032231

谭浩

信息工程系

影视0424

 

学号

电话

510073238

02585843251

510073238

13813000000

510073238

13815419110

510601114

0523-83770892

510601114

13770525646

410022206

025-85874662

410022206

13601468109

410022207

0513-88440460

410022207

13851989926

410022209

025-85874662

410032231

51988041182

 

第二范式(2NF):要求非主键列是主键的子集,非主键列活动必须完全依赖整个主键。

比如有学生选课表,如果设计成如下情况就违反第二范式:

课程名

学生姓名

学年

学分

课程所用教材

出版社

学生班级

学生性别

C语言

卜峰

2008

4

C语言程序设计

清华大学

软件0515

C语言

姚丽萍

2008

4

C语言程序设计

清华大学

信管0424

C语言

杨雯雯

2008

4

C语言程序设计

清华大学

影视0424

Oracle

卜峰

2008

6

Oracle基础应用

电子工业

软件0515

Oracle

姚丽萍

2008

6

Oracle基础应用

电子工业

信管0424

Oracle

杨雯雯

2008

6

Oracle基础应用

电子工业

影视0424

主键为(课程名,学生姓名)"(学年,学分,课程所用教材,出版社,学生班级,学生性别),

但是(课程名)"(学分,课程所用教材,出版社),即(学分,课程所用教材,出版社)依赖于(课程名);

同样,(学生姓名)"(学生班级,学生性别),即(学生班级,学生性别)依赖于(学生姓名)。

我们把上面的表拆分成三张表,以符合第二范式:

课程名

学生姓名

学年

C语言

卜峰

2008

C语言

姚丽萍

2008

C语言

杨雯雯

2008

Oracle

卜峰

2008

Oracle

姚丽萍

2008

Oracle

杨雯雯

2008

 

课程名

学分

课程所用教材

出版社

C语言

4

C语言程序设计

清华大学

Oracle

6

Oracle基础应用

电子工业

 

学生姓名

学生班级

学生性别

卜峰

软件0515

姚丽萍

信管0424

杨雯雯

影视0424

以后用视图等方式关联解析表内容。

第三范式(3NF): 要求非主键列互不依赖,或者说非主键不能依赖传递。

例如建立的学生基本信息表就不符合3NF

学生姓名

学生班级

学生性别

所属系部

班主任

所属专业

教室

卜峰

软件0515

信息工程系

刘伟

软件开发

304

姚丽萍

影视0424

艺术设计系

王华

影视制作

405

杨雯雯

软件0515

信息工程系

刘伟

软件开发

304

因为(学生姓名)"(学生班级),(学生班级)"(所属系部,班主任,所属专业,教室),但同时(学生姓名)"(所属系部,班主任,所属专业,教室),就有了传递关系。

遇到不符合3NF情况,我们建立“字典表”来使之符合3NF,如把上表拆分成如下两张表,即可符合3NF

学生姓名

学生班级

学生性别

卜峰

软件0515

姚丽萍

影视0424

杨雯雯

软件0515

 

学生班级

所属系部

班主任

所属专业

教室

软件0515

信息工程系

刘伟

软件开发

304

影视0424

艺术设计系

王华

影视制作

405

 

简单的说,
第一范式 :列名要具体到不能再细分。
第二范式: 对于主键有多个列同时担任的表,所有其他列都必须同时依赖担任主键的所有列。
第三范式:不是主键的列不能决定其他的列。

From: http://www.cnblogs.com/njypcmqj/articles/1142868.html

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/guopengzhang/article/details/5015764

智能推荐

【车载以太网测试从入门到精通】——数据链路层测试_车载以太网数据链路层测试-程序员宅基地

文章浏览阅读1.3k次,点赞3次,收藏6次。根据IEEE的定义,以太网数据链路层分为2个子层:媒体访问控制子层(MAC层)和逻辑链路控制层(LLC层)。分为2个子层的原因是:数据链路层实际是与物理层直接相关的,针对不同的物理层需要有与之相配合的数据链路层,例如针对以太网、令牌环需要不同的数据链路层,而这时不符合分层原则的。为此,通过划分MAC层和LLC层,尽量提高链路层的独立性,便于技术实现。_车载以太网数据链路层测试

阈值分割-程序员宅基地

文章浏览阅读3.9k次。文章目录1..直方图阈值法2.自动阈值法3.分水岭分割法4.迭代法阈值分割法是一种基于区域的图像分割技术。图像阈值化分割因其简单实现、计算量小、性能较稳定而成为图像分割中最基本和应用最广泛的分割技术。图像阈值化的目的是按照灰度级,对像素集合进行一个划分,得到的每个子集形成一个与现实景物相对应的区域,各个区域内部具有一致的属性,而相邻区域布局有这种一致属性。这样的划分可以通过从灰度级出发选取一个或..._阈值分割

Kotlin快速入门(三)函数进阶、异常处理、从键盘获取字符串、递归_kotlin toint()异常处理-程序员宅基地

文章浏览阅读282次。前言:作为一个安卓开发的老鸟,一步步从eclipse到AS开发安卓app,再到NDK开发,不断的更新,不断的学习,现如今Google把安卓的第一开发语言换成了Kotlin,所以我们也要紧跟Google步伐,转战kotlin,接下来我会带领大家快速入门kotlin开发。1.1函数进阶(求圆和矩形的面积)val pi = 3.141592f //val表示对象是常量,不能更改//fun ..._kotlin toint()异常处理

将Windows Server 2016 打造成工作站(20161030更新)-程序员宅基地

文章浏览阅读2.6k次。将Windows Server 2016 打造成工作站(20161030更新)一、基础设置1.1、关闭自动弹窗:「开始菜单」 - 「服务器管理器」 - 「仪表板」(或 Win + R或CMD,「ServerManager」), 「管理」 - 「服务器管理器属性」,勾选「在登录时不自动启动服务器管理器」。1.2、设置CPU性能Win + R或CMD..._service2016 找不到 关机事件追踪

从费舍尔信息矩阵(Fisher Information Matrix, FIM)到自然梯度法_fisher信息矩阵-程序员宅基地

文章浏览阅读1.1k次,点赞11次,收藏15次。本文以自然梯度法的推导为脉络,贯穿黎曼空间、黎曼流形、黎曼度量、费舍尔信息矩阵、KL 散度和自然梯度法等概念。这是 TRPO 算法理论的重要基础_fisher信息矩阵

浏览器控制台报错 Uncaught TypeError: Cannot set properties of undefined (setting ‘onclick‘) at-程序员宅基地

文章浏览阅读7.5k次。项目场景:点击切换浏览器壁纸的代码问题描述浏览器控制台报错Uncaught TypeError: Cannot set properties of undefined (setting ‘onclick’)at <body> <div class="bigbox"> <img src="../素材/箴言1副本.jpg" alt="" /> <img src="../素材/箴言2副本.jpg" alt="" />_uncaught typeerror: cannot set properties of undefined (setting 'onclick')

随便推点

为4.14低版本内核编译kernelsu绕过root检测_4.14.42内核-程序员宅基地

文章浏览阅读2.5k次。为4.14低版本内核编译kernelsu绕过root检测_4.14.42内核

js逆向-vscode与vm2无环境联调_jsvm2-程序员宅基地

文章浏览阅读986次。转载自大佬:十一姐链接: js逆向补环境-调试工具vscode与nodejs使用之无环境联调1、Node.js是一个开源、跨平台的JavaScript运行环境,可以在服务器端运行JavaScript代码。它基于Chrome的JS-V8引擎,使得JavaScript的运行速度非常快,并且提供了一系列的模块,使得开发者可以方便地进行后端开发2、nodejs下载 ,下载node-v18.16.1-x64.msi,除安装路径可以修改,其它一路next即可3、然后双击下载好的msi程序包,然后一路next,只需_jsvm2

查看H2数据库的数据_h2数据库怎么看表-程序员宅基地

文章浏览阅读4.9k次。运行程序,在浏览器中打开:http://localhost:8080/h2-console/注意:JDBC URL:jdbc:h2:mem:testdb_h2数据库怎么看表

c语言实例100_pic单片机,PIC单片机C语言编程实例-程序员宅基地

文章浏览阅读268次。PIC单片机C语言编程实例F877的外围功能模块第1章PIC16PIC16F1.1.2简单应用实例该例用于令与PORTD口相连的8个发光二极管前4个点亮,后4个熄灭。在调试程序前,应使与PORTD口相连的8位拔码开关拔向相应的位置。1例1.1.1PORTD输出#includemain(){TRISD=0X00;while(1);{PORTD=0XF0;}}/*向PORTD送数据,点亮LED(由实验..._pic c语言 实例

log4j配置说明-程序员宅基地

文章浏览阅读54次。og4j配置详解log4j详解 根据网络资料整理 >>>>1. 概述<<<<  1.1. 背景    在应用程序中添加日志记录总的来说基于三个目的:监视代码中变量的变化情况,周期性的记录到文件中供其他应用进行统计分析工作;跟踪代码运行时轨迹,作为日后审计的依据;担当集成开发环境中的调试器的作用,向文件或控制台打印...

花生棒内网穿透(移动设备最简单的内网穿透方式)_花生棒配置-程序员宅基地

文章浏览阅读677次。花生棒是一款专做内网穿透的硬件,能够解决移动设备没有公网IP无法直接访问的问题。配置成功可以实现移动设备 SSH连接、VNC实现对远程设备的直接桌面控制。主要解决无法安装向日葵等第三方软件的设备,比如基于ARM64内核的设备。本文是对官方教程的补充。_花生棒配置