技术标签: 语言 oracle 出版 Database/Sql 电话 影视 数据库
第一范式(1NF): 对于表中的每一行,必须且仅仅有唯一的行值;在一行中的每一列仅有唯一的值并且具有原子性。
这个概念的第一句话很好理解,任何人也不会在一张表中存在两个一模一样的记录。关键是第二句话:在一行中的每一列仅有唯一的值并且具有原子性,看如下示例:
比如有一张学生的基本资料表,如下图所示:
学号 |
学生姓名 |
学生系部 |
学生班级 |
性别 |
电话 |
510073238 |
卜峰 |
信息工程系 |
计媒0523 |
男 |
’02585843251,13815419110,13813000000 |
510073232 |
姚丽萍 |
信息工程系 |
计媒0523 |
女 |
|
510601114 |
杨雯雯 |
信息工程系 |
软件0515 |
女 |
0523-83770892,13770525646 |
410022206 |
桑旭娟 |
信息工程系 |
信管0424 |
女 |
025-85874662,13601468109 |
410022207 |
王玫 |
信息工程系 |
信管0424 |
女 |
0513-88440460,13851989926 |
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
文章浏览阅读540次。转自 : http://blog.csdn.net/piaofengxiyue/article/details/4494382经常会遇到ShowDialog出的窗体中有一些textbox,输入完后返回到主窗体中。怎么办呢?有办法。 理论上讲ShowDialog后的窗体返回值类型是DialogResult。也就是一个枚举值,只有yes,no,ok之类的值,肯定是不_this.getformref().
文章浏览阅读1.7k次。关于动态加载和类加载器的简单理解_动态加载aar
文章浏览阅读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文件怎么实现单页面应用
文章浏览阅读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..._小米商城项目总结心得
文章浏览阅读698次,点赞7次,收藏10次。EditLog和FsImage的概念,以及与SecondaryNameNode的关系问题,以及EditLog和FsImage的重要性问题。_hdfs editlog
文章浏览阅读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:/..._菜单下拉条
文章浏览阅读2.4k次,点赞4次,收藏29次。在本文中,我们将探讨Windows Terminal,它是WSL2的理想配套。它速度快、可配置、外观漂亮,并且提供了Windows和Linux开发的所有优点。Windows已经完全接受了Linux,而WSL2使它成为一种无缝的乐趣。你可以通过以下方式访问发行版的终端:单击其开始菜单图标在Powershell或命令提示符下输入 wsl 或 bash通过启动 %windir%\system32\bash.exe ~ 的配置文件使用第三方终端选项(例如Cmder,ConEmu和Hyper)在VS .
文章浏览阅读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
文章浏览阅读1.3w次,点赞3次,收藏30次。界面切换和窗口跳转是所有桌面程序都需要的。 wpf里面也有很多方法来做到界面切换,简单常用的有TabControl和UserControl。TabControl优点是简单,继续拖控件。 缺点就是全部代码会堆到一起。代码<TabControl HorizontalAlignment="Left" Height="200" Margin="10,10,0,0" Vert...