范式:数据库设计对数据的存储性能,还有开发人员对数据的操作都有莫大的关系。所以建立科学的,规范的的数据库是需要满足一些。规范的来优化数据数据存储方式。在关系型数据库中这些规范。

第一范式:数据库表中的字段都是单一属性的,不可再分。简单的说,每一个属性都是原子项,不可分割。

1NF是关系模式应具备的最起码的条件,如果数据库设计不能满足第一范式,就不称为关系型数据库。也就是说,只要是关系型数据库,就一定满足第一范式。

 ceate table 学生(
学号 number ,
姓名 varchar2(10),
年龄 varchar2(2),
联系方式 varchar(200)
);

联系方式会有很多,可能包含:地址、电话、邮编、email和QQ等等,所以联系方式可以再分,这样的设计不符合第一范式。

  create table 学生选课(
学生编号 number primary key,
学生姓名 varchar2(20),
学生年龄 number,
课程名称 varchar2(50),
课程学分 number,
考试成绩 number
);
insert into(学生编号,学生姓名,学生年龄,课程名称,课程学分,考试成绩)values(1,'张三',20,‘java',2,89);
insert into(学生编号,学生姓名,学生年龄,课程名称,课程学分,考试成绩)values(2,'李四',20,‘Oracle',1,78);
insert into(学生编号,学生姓名,学生年龄,课程名称,课程学分,考试成绩)values(1,'张三',20,‘Oracle',1,90);

此时的设计包含有如下的问题:

  • 主键信息重复或者说无法确定主键;
  • 学生、课程信息重复(有可能会更新很多的数据);
  • 如果某一门课程没人选择参加,那么课程就没了。

所以此时利用第一范式没有办法解决当前设计问题,改成多对多,成为第二范式。

第二范式:(多对多)数据表中不存在非关键字段对任意一候选关键字段的部分函数依赖。

  • 先通过函数关系进行面描述
  • 函数依赖指的式某几个字段的集合是否可以推到出其他列的内容。(如果一个表中某一个字段A的值是由另外一个字段或一组字段B的值来确定的,就称为A函数依赖于B。)

学生表:

  create table学生(
学生编号 mid primary key,
学生姓名 varchar2(20),
学生年龄 number
)

课程表:

 create table 课程(
课程编号 cid primary key,
课程名称 varchar2(50),
课程学分 number
)

学生_课程表:

 create table 学生_课程(
学生编号 mid references...
课程编号 cid references... )

第三范式:(一对多)

数据表之中不存在非关键字段对任意一候选关键字段传递函数依赖。目标是确保每列都和主键列直接相关,而不是间接相关。

传递依赖是什么意思?现在建立一张雇员表。

雇员编号 姓名 部门 位置 工资
1 张三 测试部 上海 1000

其中存在一个传递依赖:利用编号与姓名可以确定一个雇员的部门,但是通过部门名称又可以找到公司位置。这个称谓传递函数依赖。

现有一个学校有多个学生。如果使用第一设计范式,描述出一个学校有多个学生,但同时又会描述一个学生属于多个学生。所以可以使用第三设计范式。

 create table 学校(
学校编号 number primary key
名称 varchar2(50)
); create table 学生(
学生编号 mid primary key,
学生姓名 varchar2(20),
学生年龄 number
学校编号 number references...
);

注:关系实质上是一张二维表,其中每一行是一个元组,每一列是一个属性。

数据不能存在传递关系,即没个属性都跟主键有直接关系而不是间接关系。像:a-->b-->c  属性之间含有这样的关系,是不符合第三范式的。

再比如Student表(学号,姓名,年龄,性别,所在院校,院校地址,院校电话)

这样一个表结构,就存在上述关系。 学号--> 所在院校 --> (院校地址,院校电话)

这样的表结构,我们应该拆开来,如下。

(学号,姓名,年龄,性别,所在院校)--(所在院校,院校地址,院校电话)

总结:三个设计范式只是一个设计初的思考方式。但是在实际运行中,这三个必须要打破。

Oracle 三大范式的更多相关文章

  1. oracle三大范式

    范式: 设计数据库定义的一个规则, 三大范式, 灵活运用, 人的思想是活的 一范式 1, 不存在冗余数据 同一个表中的记录不能有重复----所以主键(必须有) 2, 每个字段必须是不可再分的信息(列不 ...

  2. oracle三大范式(转载)

    标准化表示从你的数据存储中移去数据冗余 (redundancy)的过程.如果数据库设计达到了完全的标准化,则把所有的表通过关键字连接在一起时,不会出现任何数据的复本 (repetition).标准化的 ...

  3. 2.4 Oracle之DCL的SQL语句之用户权限以及三大范式

    DCL   (Data Control Language,数据库控制语言)用于定义数据库权限 一.用户权限 1.1  建立用户以及授权: Eg :CREATE USER 用户名  IDENTIFIED ...

  4. SqlServer之数据库三大范式

    分析: 数据库设计应遵循三大范式分别为: 第一范式:确保表中每列的原子性(不可拆分): 第二范式:确保表中每列与主键相关,而不能只与主键的某部分相关(主要针对联合主键),主键列与非主键列遵循完全函数依 ...

  5. 数据库的设计(E-R图,数据库模型图,三大范式)

    一.数据库设计的概念 数据库设计是将数据库中的数据实体及这些数据实体之间的关系,进行规划和结构化的过程. 二.数据库设计的重要性 如果一个数据库没有进行一个良好的设计,那么这个数据库完成之后他的缺点是 ...

  6. MySql三大范式与数据库设计和表创建常用语句

    [数据库设计的三大范式] 1.第一范式(1NF First Normal Fromate):数据表中的每一列(字段),必须是不可拆分的最小单元.也就是确保每一列的原子性. 例如: userInfo: ...

  7. MySQL(三)之SQL语句分类、基本操作、三大范式

    一.SQL语句的分类     DML(Data Manipulation Langauge,数据操纵/管理语言) (insert,delete,update,select)     DDL(Data ...

  8. 【SqlServer系列】数据库三大范式

    1   概述 一般地,在进行数据库设计时,应遵循三大原则,也就是我们通常说的三大范式,即第一范式要求确保表中每列的原子性,也就是不可拆分:第二范式要求确保表中每列与主键相关,而不能只与主键的某部分相关 ...

  9. Mysql 数据库设置三大范式 数据库五大约束 数据库基础配置

    数据库设置三大范式 1.第一范式(确保每列保持原子性) 第一范式是最基本的范式.如果数据库表中的所有字段值都是不可分解的原子值,就说明该数据库满足第一范式. 第一范式的合理遵循需要根据系统给的实际需求 ...

随机推荐

  1. 【译】第17节---数据注解-Column

    原文:http://www.entityframeworktutorial.net/code-first/column-dataannotations-attribute-in-code-first. ...

  2. HDU 3401 Trade(斜率优化dp)

    http://acm.hdu.edu.cn/showproblem.php?pid=3401 题意:有一个股市,现在有T天让你炒股,在第i天,买进股票的价格为APi,卖出股票的价格为BPi,同时最多买 ...

  3. tomcat中实现特定路径下的图片的url访问Tomcat配置图片保存路径,图片不保存在项目路径下

    使用Tomcat作为服务器的时候,如果不配置图片保存路径,将图片保存在项目路径下,那么再次打war包发布项目可能会造成图片的丢失,每次重启前将图片先保存再copy到服务器明显不方便,这时可以配置图片保 ...

  4. 关于页面的跳转添加参数(比如id啥的)

    最近一些新手老是问我一些关于页面之间的传递跳转,怎么带参数这件事,(比如说一个列表页到详情页面数据是怎么传输的),今个没事就在这说一些! 这里拿列表页面到详情页面来阐述下哈! 首先在列表页,我们通过a ...

  5. 树莓派 无屏幕 安装Ubuntu系统 无头安装 无显示器 用网线

    能看到此篇博客的人说明都尝试失败了,会发现内存卡刷入Ubuntu后,无法通过ssh操作树莓派.是因为官方的ubuntu系统在初次运行时需要设定一些东西,类似windows第一次启动也需要设置那样,如果 ...

  6. 转 这种方法可以免去自己计算大文件md5 的麻烦

    using System.Collections;using System.Collections.Generic;using UnityEngine;using UnityEditor;using ...

  7. 数据库备份出现警告:Warning: Using a password on the command line interface can be insecure. Warning: A partial dump from a server that has GTIDs will by default include the GTIDs of all transactions, even thos

    1.先来看原备份数据库语句: mysqldump -h 127.0.0.1 -uroot -ppassword database > /usr/microStorage/dbbackup/cap ...

  8. spring boot 配置双数据源mysql、sqlServer

    背景:原来一直都是使用mysql数据库,在application.properties 中配置数据库信息 spring.datasource.url=jdbc:mysql://xxxx/test sp ...

  9. python中网络编程基础

    一:什么是c\s架构 1.c\s即client\server 客户端\服务端架构. 客户端因特定的请求而联系服务器并发送必要的数据等待服务器的回应最后完成请求 服务端:存在的意义就是等待客户端的请求, ...

  10. leecode第二十三题(合并K个排序链表)

    /** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode ...