数据库之范式

  • 第一范式(1NF)

属性不可分。

例如存在一个表:【联系人】(姓名、性别、电话)

这个表中,属性“电话”可以分为手机号和座机号,这样就不满足1NF要求。

  • 第二范式(2NF)

1. 表必须有主键

2. 没有包含在主键中的列必须完全依赖于主键,而不能只依赖于主键的一部分

例如存在一个表:【OrderDetail】(OrderID,ProductID,UnitPrice,Discount,Quantity,ProductName)

该表的主键应该是(OrderID,ProductID),然而 UnitPrice,ProductName 只依赖于 ProductID。违反了2NF的必须完全依赖于主键,而不能只依赖于主键的一部分,所以不满足2NF。

为了满足2NF,可以将该表分解成两个表:1) 【OrderDetail】(OrderID,ProductID,Discount,Quantity); 2) 【Product】(ProductID,UnitPrice,ProductName)

  • 第三范式(3NF)

1. 符合2NF

2. 非主键列必须直接依赖于主键,不能存在传递依赖。即不能存在,非主键列A依赖于非主键列B,非主键列B依赖于主键的情况

例如存在一个表:【Order】(OrderID,OrderDate,CustomerID,CustomerName,CustomerAddr,CustomerCity)

该表主键应该是OrderID,其中 OrderDate,CustomerID,CustomerName,CustomerAddr,CustomerCity 等非主键列都完全依赖于主键(OrderID),所以符合 2NF。不过问题是 CustomerName,CustomerAddr,CustomerCity 直接依赖的是 CustomerID(非主键列),而不是直接依赖于主键,它是通过传递才依赖于主键,所以不满足3NF。

为了满足3NF,可以将表拆分为:1) 【Order】(OrderID,OrderDate,CustomerID); 2) 【Customer】(CustomerID,CustomerName,CustomerAddr,CustomerCity)

  • BC范式(BCNF)

1. 符合3NF

2. 主键不依赖于主键

时间: 2024-10-25 14:55:50

数据库之范式的相关文章

数据库的范式

这是我写博客的第一篇短文,也是关系数据库相关的第一个知识点.谈起关系型数据库,我个人喜欢先了解数据库的几范式,在关系型数据库中有6种范式,但是日常工作常见的有三种,即1NF .2NF.3NF.后面的4NF--6NF用的比较少:学习关系型数据库必须了解数据库的范式,虽然有的同事朋友在工作过程在不知不觉的有应用到,但是不一定对其很理解,但是这个问题在面试中 经常问到,以测试你对数据库基础知识了解的踏实不踏实.因为数据库的范式在IT基础课程中把她定义得文ZuZu的,狠令人费解.今天用个人的语言理解下数

关系型数据库三大范式

基础概念:关键字.主关键字.候选关键字,非关键字 如果某个字段或多个字段的值可以唯一地标识一条记录,则该字段或字段组就称为关键字.如果一个关键字是用以标识每条记录的唯一性,并作为该表与其他表实现关联之用,则称其为主关键字(主键,primary key)或主码.除主关键字以外的其他关键字称为候选关键字. 除关键字意外的字称为非关键字 例如,有一个表字段为:id  firstname lastname address phone IDcard那么id或IDcard或firstname+lastnam

数据库三大范式最简单的解释

关系数据库中的关系必须满足一定的要求,即满足不同的范式.目前关系数据库有六种范式:第一范式(1NF).第二范式(2NF).第三范式(3NF).第四范式(4NF).第五范式(5NF)和第六范式(6NF).满足最低要求的范式是第一范式(1NF).在第一范式的基础上进一步满足更多要求的称为第二范式(2NF),其余范式以次类推.一般说来,数据库只需满足第三范式(3NF)就行了. 很多资料上的范式都讲的很难理解,这里总结一下三大范式,便于读者简易的理解. 1NF:字段是原子性的,不可分; 2NF:有主键,

数据库三大范式,我的理解

数据库三大范式,我之前是知道的,但是内容比较文绉绉,初学的时候不容易把握其根本. 首先是第一范式: 有主键,且数据库表的每一列都是不可分割的原子数据项.也可以理解为:无重复的列. 其实这句话的本质是控制字段的颗粒度(也许不该用这个词).这个地方的无重复和不可分割是什么意思呢?其实是这样的.首先如果有两个字段,一个叫籍贯,一个叫家乡,是不是就有点蠢?(这个地方不考虑其区别的话). 对重复的第一层理解是有两个字段其实是描述同样的东西,如果表格这么设计了,势必会导致数据的冗余. 第二层理解是,字段也许

戏谈数据库三范式

数据库三范式想必大家并不陌生,官方的解释很抽象,初学者比较难理解.对于这块知识,我是看了会,会了忘,忘了再看.每当别人问我的时候,必须先看看教材,回顾一段时间才能理清. 为什么当别人提问时不能立马把三范式的经典思想说出来呢?通过听米老师的"如何高效学习"这堂课,我发现原因是我自己没有融入到三范式中,三范式没有和自己发生关系.下面,我用三个有趣的小故事帮助大家快速.深刻的理解三范式的含义. 第一范式,官方解释:关系模式R的每个关系r的属性值都是不可分的原子值.这个官方解释还不算太难,比如

数据库三范式是什么?

第一范式(1NF):字段具有原子性,不可再分.所有关系型数据库系统都满足第一范式) 数据库表中的字段都是单一属性的,不可再分.例如,姓名字段,其中的姓和名必须作为一个整体,无法区分哪部分是姓,哪部分是名,如果要区分出姓和名,必须设计成两个独立的字段. 第二范式(2NF): 第二范式(2NF)是在第一范式(1NF)的基础上建立起来的,即满足第二范式(2NF)必须先满足第一范式(1NF). 要求数据库表中的每个实例或行必须可以被惟一地区分.通常需要为表加上一个列,以存储各个实例的惟一标识.这个惟一属

数据库三大范式及事务

数据库三大范式 为了建立冗余较小.结构合理的数据库,设计数据库时必须遵循一定的规则.在关系型数据库中这种规则就称为范式.范式是符合某一种设计要求的总结.要想设计一个结构合理的关系型数据库,必须满足一定的范式. 在实际开发中最为常见的设计范式有三个: 1.第一范式(确保每列保持原子性) 第一范式是最基本的范式.如果数据库表中的所有字段值都是不可分解的原子值,就说明该数据库表满足了第一范式. 第一范式的合理遵循需要根据系统的实际需求来定.比如某些数据库系统中需要用到"地址"这个属性,本来直

数据库的范式详解

数据库范式1NF 2NF 3NF BCNF(实例)     设计范式(范式,数据库设计范式,数据库的设计范式)是符合某一种级别的关系模式的集合.构造数据库必须遵循一定的规则.在关系数据库中,这种规则就是范式.关系数据库中的关系必须满足一定的要求,即满足不同的范式.目前关系数据库有六种范式:第一范式(1NF).第二范式(2NF).第三范式(3NF).第四范式(4NF).第五范式(5NF)和第六范式(6NF).满足最低要求的范式是第一范式(1NF).在第一范式的基础上进一步满足更多要求的称为第二范式

秒懂数据库三范式

懂得数据库范式,对于设计出一个合理的数据库有很大的帮助.本文根据自己对数据库范式的理解,结合具体的例子,尝试着用通俗易懂的语言讲明白数据库三范式. 第一范式(列不可拆分) 如果数据库中所有的字段值都是不可拆分的原子值,那么就满足第一范式了.简单点说就是不能有表中表,所以关系数据库都满足第一范式.例子略. 第二范式(完全依赖) 第二范式是在第一范式的基础上,保证所有非主键都依赖于主键,对于联合主键,非主键得完全依赖(也就是说不能依赖于联合主键的一部分). 比如要设计一个订单信息表,因为订单中可能会

数据库设计范式实例解析

设计范式(范式,数据库设计范式,数据库的设计范式)是符合某一种级别的关系模式的集合.构造数据库必须遵循一定的规则.在关系数据库中,这种规则就是范式.关系数据库中的关系必须满足一定的要求,即满足不同的范式.目前关系数据库有六种范式:第一范式(1NF).第二范式(2NF).第三范式(3NF).第四范式(4NF).第五范式(5NF)和第六范式(6NF).满足最低要求的范式是第一范式(1NF).在第一范式的基础上进一步满足更多要求的称为第二范式(2NF),其余范式以次类推.一般说来,数据库只需满足第三范