技术标签: 语言 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.3k次,点赞3次,收藏6次。根据IEEE的定义,以太网数据链路层分为2个子层:媒体访问控制子层(MAC层)和逻辑链路控制层(LLC层)。分为2个子层的原因是:数据链路层实际是与物理层直接相关的,针对不同的物理层需要有与之相配合的数据链路层,例如针对以太网、令牌环需要不同的数据链路层,而这时不符合分层原则的。为此,通过划分MAC层和LLC层,尽量提高链路层的独立性,便于技术实现。_车载以太网数据链路层测试
文章浏览阅读3.9k次。文章目录1..直方图阈值法2.自动阈值法3.分水岭分割法4.迭代法阈值分割法是一种基于区域的图像分割技术。图像阈值化分割因其简单实现、计算量小、性能较稳定而成为图像分割中最基本和应用最广泛的分割技术。图像阈值化的目的是按照灰度级,对像素集合进行一个划分,得到的每个子集形成一个与现实景物相对应的区域,各个区域内部具有一致的属性,而相邻区域布局有这种一致属性。这样的划分可以通过从灰度级出发选取一个或..._阈值分割
文章浏览阅读282次。前言:作为一个安卓开发的老鸟,一步步从eclipse到AS开发安卓app,再到NDK开发,不断的更新,不断的学习,现如今Google把安卓的第一开发语言换成了Kotlin,所以我们也要紧跟Google步伐,转战kotlin,接下来我会带领大家快速入门kotlin开发。1.1函数进阶(求圆和矩形的面积)val pi = 3.141592f //val表示对象是常量,不能更改//fun ..._kotlin toint()异常处理
文章浏览阅读2.6k次。将Windows Server 2016 打造成工作站(20161030更新)一、基础设置1.1、关闭自动弹窗:「开始菜单」 - 「服务器管理器」 - 「仪表板」(或 Win + R或CMD,「ServerManager」), 「管理」 - 「服务器管理器属性」,勾选「在登录时不自动启动服务器管理器」。1.2、设置CPU性能Win + R或CMD..._service2016 找不到 关机事件追踪
文章浏览阅读1.1k次,点赞11次,收藏15次。本文以自然梯度法的推导为脉络,贯穿黎曼空间、黎曼流形、黎曼度量、费舍尔信息矩阵、KL 散度和自然梯度法等概念。这是 TRPO 算法理论的重要基础_fisher信息矩阵
文章浏览阅读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')
文章浏览阅读2.5k次。为4.14低版本内核编译kernelsu绕过root检测_4.14.42内核
文章浏览阅读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
文章浏览阅读4.9k次。运行程序,在浏览器中打开:http://localhost:8080/h2-console/注意:JDBC URL:jdbc:h2:mem:testdb_h2数据库怎么看表
文章浏览阅读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语言 实例
文章浏览阅读54次。og4j配置详解log4j详解 根据网络资料整理 >>>>1. 概述<<<< 1.1. 背景 在应用程序中添加日志记录总的来说基于三个目的:监视代码中变量的变化情况,周期性的记录到文件中供其他应用进行统计分析工作;跟踪代码运行时轨迹,作为日后审计的依据;担当集成开发环境中的调试器的作用,向文件或控制台打印...
文章浏览阅读677次。花生棒是一款专做内网穿透的硬件,能够解决移动设备没有公网IP无法直接访问的问题。配置成功可以实现移动设备 SSH连接、VNC实现对远程设备的直接桌面控制。主要解决无法安装向日葵等第三方软件的设备,比如基于ARM64内核的设备。本文是对官方教程的补充。_花生棒配置