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

技术标签: 语言  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

智能推荐

获取Form.ShowDialog() 出的窗体中textbox的返回值_this.getformref().-程序员宅基地

文章浏览阅读540次。转自 : http://blog.csdn.net/piaofengxiyue/article/details/4494382经常会遇到ShowDialog出的窗体中有一些textbox,输入完后返回到主窗体中。怎么办呢?有办法。 理论上讲ShowDialog后的窗体返回值类型是DialogResult。也就是一个枚举值,只有yes,no,ok之类的值,肯定是不_this.getformref().

Android基础——类加载器和动态加载_动态加载aar-程序员宅基地

文章浏览阅读1.7k次。关于动态加载和类加载器的简单理解_动态加载aar

HTML5——history实现单页面_单个html文件怎么实现单页面应用-程序员宅基地

文章浏览阅读2.5k次。1. 单页Web应用(single page web application,SPA)history.back():URL回退一次history.forward():URL前进一次history.go(n):URL几次history.back()或几次history.forward(),比如:history.go(2):两次history.forward();history.go(-2..._单个html文件怎么实现单页面应用

XML概念定义以及如何定义xml文件编写约束条件java解析xml DTD XML Schema JAXP java xml解析 dom4j 解析 xpath dom sax...-程序员宅基地

文章浏览阅读195次。本文主要涉及:xml概念描述,xml的约束文件,dtd,xsd文件的定义使用,如何在xml中引用xsd文件,如何使用java解析xml,解析xml方式dom sax,dom4j解析xml文件XML来源SGMLSGML(SGM)标准通用标记语言是一种定义电子文档结构和描述其内容的国际标准语言,具有极好的扩展性是所有电子文档标记语言的起源,早在万维网发明之前“通用标言”就已存在是1..._public int toolremindertotal()的xml如何写

工控机主机该怎么加固_工控机用固定-程序员宅基地

文章浏览阅读2.9k次。工控安全现状工业控制系统是支撑国民经济的重要设施,是工业领域的神经中枢。现在工业控制系统已经广泛应用于电力、通信、化工、交通、航天等工业领域,支撑起国计民生的关键基础设施。随着传统的工业转型,数字化、网络化和智能化的工业控制系统逐渐接入互联网,病毒、木马、蠕虫、僵尸网络等常见威胁也威胁到工业控制系统的安全。近几年,勒索病毒的出现,在企业损失大量数据的情形下,也对企业造成了不可估量的经济损失。目前,企业会在工业控制系统的外围建立防火墙、入侵检测系统、入侵防御系统等技术控制手段,同时也会采用不必.._工控机用固定

小米商城项目总结_小米商城项目总结心得-程序员宅基地

文章浏览阅读7.2k次。脚本中判断是否相等不能用equals,没有这个方法,只能用== 数据库工具类,只需要加载一次就够了,所以我们采用静态代码块来初始化该方法,作为工具类使用 public static QueryRunner qr = null;//因为是在不同包下的,所以要用public才可以调用 Ajax往Servlet发送数据的时候Servlet必须response一个数据,不然会报parsee..._小米商城项目总结心得

随便推点

HDFS的EditLog和FsImage作用详细解析,超详细!(含部分非原创图片,大部分原创总结)_hdfs editlog-程序员宅基地

文章浏览阅读698次,点赞7次,收藏10次。EditLog和FsImage的概念,以及与SecondaryNameNode的关系问题,以及EditLog和FsImage的重要性问题。_hdfs editlog

JS 系列之 事件—表单事件_js input event-程序员宅基地

文章浏览阅读2.6k次。今天跟大家分享一下JS系列之表单事件。1 表单事件的种类1.1 input 事件input事件当、、的值发生变化时触发。对于复选框()或单选框(),用户改变选项时,也会触发这个事件。另外,对于打开contenteditable属性的元素,只要值发生变化,也会触发input事件。input事件的一个特点,就是会连续触发,比如用户每按下一次按键,就会触发一次input事件。input事件对象..._js input event

菜单下拉条-程序员宅基地

文章浏览阅读82次。最近 ,用到了一些js的知识,稍微复习了下,还把之前写的js代码又复习了一遍,这里贴上来!<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http:/..._菜单下拉条

Windows Terminal完整指南-程序员宅基地

文章浏览阅读2.4k次,点赞4次,收藏29次。在本文中,我们将探讨Windows Terminal,它是WSL2的理想配套。它速度快、可配置、外观漂亮,并且提供了Windows和Linux开发的所有优点。Windows已经完全接受了Linux,而WSL2使它成为一种无缝的乐趣。你可以通过以下方式访问发行版的终端:单击其开始菜单图标在Powershell或命令提示符下输入 wsl 或 bash通过启动 %windir%\system32\bash.exe ~ 的配置文件使用第三方终端选项(例如Cmder,ConEmu和Hyper)在VS .

To install them, you can run: npm install --save core-js/modules/es.array.push.js-程序员宅基地

文章浏览阅读5k次,点赞5次,收藏8次。To install them, you can run: npm install --save core-js/modules/es.array.push.js core-js/modules/es.error.cause.js core-js/modules/es.object.proto.js core-js/modules/es.re

wpf 界面切换-程序员宅基地

文章浏览阅读1.3w次,点赞3次,收藏30次。界面切换和窗口跳转是所有桌面程序都需要的。 wpf里面也有很多方法来做到界面切换,简单常用的有TabControl和UserControl。TabControl优点是简单,继续拖控件。 缺点就是全部代码会堆到一起。代码&lt;TabControl HorizontalAlignment="Left" Height="200" Margin="10,10,0,0" Vert...

推荐文章

热门文章

相关标签