数据库设计范式

前言:因为前两天去面试,被问到数据库设计范式了,然后傻眼了,涉及到知识盲区了,就查漏补缺吧

1. 什么是范式

一张数据表的表结构所符合的某种设计标准的级别
(符合某种设计规范的设计)

2. 设计范式的意义:

a) 遵循不同的设计规范,才可以设计出合理的关系型数据库
b) 各种范式呈递次规范,越高的范式数据库冗余越小

3. 目前的设计范式(六种)

a) 第一范式(1NF)(原则上来说,设计数据库时需要满足最低的范式要求)
b) 第二范式(2NF)
c) 第三范式(3NF)(一般设计数据库,需要满足的范式要求)
d) 巴斯-科德范式(BCNF)
e) 第四范式(4NF)
f) 第五范式(5NF,又称完美范式)

4. 数据库常见的设计范式

4.1名词解释:

	4.1.1元组:表中的一行就是一个元组。
	4.1.2码  :  一个表中,可以唯一决定一个元组的属性(或属性集合)。
				假设K为表中的某个属性,在K确定情况下,这个表中的其他属性就可以确定,那么K就叫选码,也叫码
	
			例如:知道了id为3,就知道了id为3的这条数据的全部信息
			这里的K就是字段id,那么码就是id
	
			注:码可以是多个字段组成的属性集合
	
			例1:查询成绩表中,小张的数学成绩,那么要确定这条数据,
			需要通过姓名=小张,科目=数学,那么姓名字段,和科目字段就是码

	4.1.3 主属性:码里面的属性就是主属性,上面例1中说的姓名和科目就是主属性
	4.1.4 非主属性:除主属性外的就是非主属性
	4.1.5 函数依赖:给定一个值x,就可以确定值y,那么就说y函数依赖于x
	
			例2:比如说在学生表中,给定一个id为10,就可以确定id为10的数据的学生姓名,那么姓名依赖于id
				
	4.1.6 完全函数依赖:y中含有(a,b)这两个属性,通过y可以确定C,单独通过a或b无法确定C,我们称C对于y是完全函数依赖
	4.1.7 部分函数依赖:y中含有(a,b)两个属性,通过a可以确定f,但是通过b无法确定f,我们称f对于y是部分函数依赖

4.2 第一范式(1NF)(针对具体某一列)

	每一列属性都是不可再分的属性值,确保每一列的原子性
   	两列属性相近或相似或一样,尽量合并属性一样的列,确保不产生冗余数据

4.3.1 第二范式(2NF)

	4.3.1.1满足1NF前提
	4.3.1.2所有的列,都必须依赖主键,不能有任何一列与主键没有关系
	4.3.1.3也就是说,一个表只描述一件事情

4.3.2 2NF判断方式:

看数据表中是否存在非主属性对于码的部分函数依赖.不存在,则符合2NF要求。
通俗的讲,就是数据表中非主属性对码的部分函数依赖是否存在,如果存在部分函数依赖,则不是第二范式

4.4 第三范式(3NF)

	4.3.1 传递依赖概念:
	设X,Y,Z是关系R中互不相同的属性集合,存在X→Y(Y !→X),Y→Z,则称Z传递函数依赖于X。
	例3:通过A得到B,通过B得到C,但是C得不到B,B得不到A,那么成C传递依赖于A
	
    在2NF的基础上,消除了非主属性对于码的传递函数依赖。即,如果存在非主属性对于码的传递函数依赖,则不符合3NF。

在设计表结构时,不是说一定要满足三范式,需要根据自身业务需求进行设计。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值