技术标签: 语言 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
文章浏览阅读1.5k次。文章目录多臂赌博机Multi-armed bandit(无状态)马尔科夫决策过程MDP(markov decision process1.动态规划蒙特卡罗方法——不知道环境完整模型情况下2.1 on-policy蒙特卡罗2.2 off-policy蒙特卡罗时序差分方法强化学习:Reinforcement learning目标:学习从环境状态到行为的映射,智能体选择能够获得环境最大奖赏的行为..._国科大 强化学习
文章浏览阅读1k次。如何用 Visual studio 2003/2005 调试 ASP 应用程序、Javascript 代码 在vs2005中调试ASP网站的错误信息:无法提供此类型的页。说明: 由于已明确禁止所请求的页类型,无法对该类型的页提供服务。扩展名“.asp”可能不正确。 请检查以下的 URL 并确保其拼写正确。 怎么解决这个问题呢?请看下文。 ASP.NET 已经很_visual studio 2003 asp 远程调试
文章浏览阅读1.3w次,点赞2次,收藏29次。一、前言 无论是端游、页游、手游如果是采用了MMO即时战斗游戏模式,基本都会遇到同屏多角色实时移动、释放技能、战斗等场景,于是自然也需要实现如何管理同屏内各种角色的信息同步:例如角色的位置、以及角色身上的装备、时装、buffer等状态的实时切换。同步在网络游戏中是非常重要的,它保证了每个玩家在屏幕上看到的东西大体是一样的,解决同步问题的最简单的方法就是把每个玩家的_mmo城镇同步
文章浏览阅读4.5k次。Android Studio JNI代码突然无法跳转AndroidStudio3.2 + gradle 4.6 下突然无法是用 ctrl + 左键 跳转代码。选中代码点击时出现 “Cannot find declaration to go to” 提示. 经过了换 SDK 后比对发现,如果JNI 代码出现这个问题,一般就是 CMake 版本不对。我换成3.6.xxx就好用了。3.10.xxx不知..._android studio jni 类无法自动跳转
文章浏览阅读216次。优化基础模型在回归问题的基本算法中,我们使用数据集去估计模型的参数,如线性回归模型中的参数w,那么这个数据集我们称为训练数据集,简称训练集。我们在回归问题中使用训练集估计模型的参数的原则一般都是使得我们的损失函数在训练集达到最小值,其实在实际问题中我们是可以让损失函数在训练集最小化为0,如:在线性回归中,我加入非常多的高次项,使得我们模型在训练集的每一个数据点都恰好位于曲线上,那这时候模型在训练集的损失值也就是误差为0。那么这样我们的模型是否就可以预测任意情况呢?答案是显然否定的。我们建立机器学习_模型选择 逐步法
文章浏览阅读81次。程序设计分组训练 实验2_程序分组训练实验二
文章浏览阅读1.6w次,点赞21次,收藏180次。最近自己在尝试做app开发,遇到搜索框功能,便查找了一下但是感觉自己想的或许更好理解和记住,便自己思考了一下。废话不多说,下面是实现代码,供大家参考,有待改进。先说一下我整体思路,因为刚开始写所以相关数据都没有上传服务器过。首先建立一个数据库,将可以搜索的相关内容存储到数据库当中,然后在搜索框中获取输入的第一个字符,..._android搜索框功能实现
文章浏览阅读1.8k次,点赞14次,收藏17次。JVM垃圾回收机制和常见回收算法原理_垃圾回收机制
文章浏览阅读493次。经过一年多团队的刻苦攻坚,目前全栈混合云1.0版本的方案已经落地多个场景,包括(政务云,一城一池,企业云,能源云)等多个场景,已经有超过近百个客户的实践经验,未来全栈混合云将从“可纳管”到“智能纳管”全面迭代,整体架构将想云原生的方向进行全面转化。主要部署全栈混合云管理平台,全部采用虚机/容器化部署模式,包括前台web组件, 中台Java组件, 后台的混合云适配组件,缓存Redis组件,RabbitMQ 组件和数据库PXC集群组件等,每个组件采用多活的方式,对外提供服务,降低单点故障。_混合云管纳管双活资源池
文章浏览阅读169次。其中卸载软件可能卸载不掉,用下面这个软件进行卸载(万能)_vc_runtimeminimum_x86
文章浏览阅读505次。11th Edition Volume 1 (Java SE 9 - 11)Page 54Change “Except, of course, when n is negative.” to “Except, of course, when n is odd and negative.”Page 69Change the method names empty and blank to isEmpty and isBlank.Page 69In the API note for the start_java核心技术第11版关于takewhile的介绍有错
文章浏览阅读611次,点赞28次,收藏12次。精灵图是把网站上用到的一些图片整合到一张单独的图片中,从而减少你的网站的 HTTP 请求数量,该图片使用 css background 和 background-position 属性渲染,这也就意味着你的标签变得更复杂了,图片是在 css 中定义,并非在1、减少网页的 http 请求,从而加快了网页加载速度,提高用户体验2、减少图片的体积,因为每个图片都有一个头部信息,把多个图片放到一个图片里,就会共用同一个头信息,从而减少了字节数。