数据库范式

        设计关系数据库时,需遵从不同的规范要求,设计出合理的关系型数据库,这些不同的规范要求被称为不同的范式,各种范式呈递次规范,越高的范式数据库冗余越小。一般说来,数据库只需满足第三范式就行了,所以此文仅说说我对这三个范式的理解。

第一范式(1NF 

       数据库表中每一列都是不可分割的原子数据项,而不能是集合,数组,记录等非原子数据项。即实体中的某个属性有多个值时,必须拆分为不同的属性。

       像上面这种情况就不符合第一范式,正确的应该为:

第二范式(2NF 

       要求实体的属性完全依赖于主关键字,完全依赖是指不能存在仅依赖主关键字一部分的属性(主要针对联合主键而言)。

       比如要设计一个订单信息表,因为订单中可能会有多种商品,所以要将订单编号和商品编号作为数据库表的联合主键,如下表所示:

订单信息表

       这样就产生了一个问题:表中商品名称、单位、商品价格等信息不与该表的主键相关,而仅仅是与商品编号相关,违反了第二范式的设计原则,应该将这个表拆分为三个相关的表。

订单信息表:

订单项目表:

商品信息表:

第三范式(3NF

       确保数据表中每一列数据都和主键直接相关,而不能间接相关。

       有表Student(学号,姓名,年龄,性别,系别,系办地址、系办电话),关键字为单一关键字"学号",存在如下决定关系:

       (学号)(姓名,年龄,性别,系别,系办地址、系办电话)

       但是还存在下面的决定关系:

       (学号) → (所在系办)(系办地点,系办电话)

       即存在非关键字段"系办地点""系办电话"对关键字段"学号"的传递函数依赖。

       这样是不满足第三范式的,把学生关系表分为如下两个表就可以了:

       学生:(学号,姓名,年龄,性别,系别)

       系别:(系别,系办地址、系办电话)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值