首页 > 代码库 > 秒懂数据库三范式
秒懂数据库三范式
懂得数据库范式,对于设计出一个合理的数据库有很大的帮助。本文根据自己对数据库范式的理解,结合具体的例子,尝试着用通俗易懂的语言讲明白数据库三范式。
第一范式(列不可拆分)
如果数据库中所有的字段值都是不可拆分的原子值,那么就满足第一范式了。简单点说就是不能有表中表,所以关系数据库都满足第一范式。例子略。
第二范式(完全依赖)
第二范式是在第一范式的基础上,保证所有非主键都依赖于主键,对于联合主键,非主键得完全依赖(也就是说不能依赖于联合主键的一部分)。比如要设计一个订单信息表,因为订单中可能会有多种商品,所以要将订单编号和商品编号作为数据库表的联合主键,如下表所示。
订单信息表
这样就产生一个问题:这个表中是以订单编号和商品编号作为联合主键。这样在该表中商品名称、单位、商品价格等信息不与该表的主键完全相关,而仅仅是与商品编号相关。所以在这里违反了第二范式的设计原则。
第三范式(消除非主属性对键的传递依赖)
第三范式是在满足第二范式的基础上,保证所有非主键都跟主键直接相关而不是间接相关。如下表所示:
订单编号 客户编号 客户姓名 联系方式 001 1 张三 1234567 002 2 王麻子 1222222 003 3 李四 7654321
如上图所示,一定订单只有一个客户,把订单编号作为主键,上表每个属性都依赖于订单编号,依赖的意思是说订单编号相等时,其他属性也得一样。那么就有定单编号确定客户编号,而客户编号又可以确定客户姓名,这就产生了一个传递关系,所以不满足三范式。要满足三范式,应该拆分为两个表,一个是订单信息表,一个是客户信息表。一般我们设计数据库中得满足第三范式。
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。