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

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

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. (转)PaperWeekly 第二十二期---Image Caption任务综述

    本文转自:http://mp.weixin.qq.com/s?__biz=MzIwMTc4ODE0Mw==&mid=2247484014&idx=1&sn=4a053986f5 ...

  2. HDU 2426 Interesting Housing Problem(二分图最佳匹配)

    http://acm.hdu.edu.cn/showproblem.php?pid=2426 题意:每n个学生和m个房间,现在要为每个学生安排一个房间居住,每个学生对于一些房间有一些满意度,如果满意度 ...

  3. JS进阶系列之this (call、apply、bind)

    在javascript中,this的指向是在执行上下文的创建阶段确定的,其实只要知道不同执行方式下,this的指向分别是是什么,就能很好的掌握this这个让人摸不透的东西. 一.全局执行 全局执行又分 ...

  4. python 拷贝文件

    使用绝对目录: import os import shutil shutil.copyfile("/opt/test/update.tar.gz","/opt/updat ...

  5. [转]fatal error LNK1112: 模块计算机类型“X86”与目标计算机类型“x64”冲突

    来自--------------------- 原文:https://blog.csdn.net/qtbmp/article/details/7273191?utm_source=copy win7 ...

  6. vue项目webpack打包后有的文件big 问题

    vue项目打包的时候,有的big, 超过1M,   需要进行优化,方法有: 1.  非首屏图片,可以采用懒加载的方式,  如:图片的懒加载,  vue中路由的懒加载 等 2. 各个模块, 采用如sea ...

  7. Java离线人脸识别SDK 支持arcface 2.0 最新版

    虹软人脸识别SDK之Java版,支持SDK 1.1+,以及当前最新版本2.0,滴滴,抓紧上车! JDK SDK Win release license status 前言 由于业务需求,最近跟人脸识别 ...

  8. VNPY思维导图架构

    VNPY是使用人数世界第三,国内第一的量化交易框架,封装的接口主要有ctp(期货),wind,xtp(股票)等.内部包含回测.实盘.模拟盘等模块.数据库默认为MongoDB的no-sql数据库,基于p ...

  9. python中的面向对象学习以及类的多态

    接下来类的第三个重要的特性:多态(一种接口,多种实现) 多态性(polymorphisn)是允许你将父对象设置成为和一个或更多的他的子对象相等的技术,赋值之后,父对象就可以根据当前赋值给它的子对象的特 ...

  10. jenkins之从0到1利用Git和Ant插件打war包并自动部署到tomcat(第五话):总结以及build.xml文件

    前面基本上把整个配置过程都完整地串起来了,包括可能遇到的难点,按照那个套路应该可以配置好自动打包发布的功能.简单总结下我的学习过程,以及遇到问题是怎样解决的. 准备一个项目源码 刚开始在github和 ...