关系型数据库
关系型数据库范式
1)1NF(第一范式): 数据库表的每一列都是不可拆分的最小单元。 如“电话号码”这个属性可以继续被分割为“办公电话”、“手机号码”等属性,在第一范式的语义下不应该被作为单独的一列出现。
口语化理解: 第一范式: 表中的每一列都是不可拆分的最小单元,例如电话号码可已拆分为办公电话、手机号码,电话号码就不应该作为单独的一列出现。
2)2NF(第二范式):必须先满足第一范式。 数据库表中的每一行必须可以被唯一的区分,即每一行中有一个唯一标识将这行与其他行区分出来,这个唯一标识就是我们常说的主键。在2NF的语义下,所有非主键的字段都要依赖主键。比如在学生表中我们用学生id作为主键,那么当我们需要查询一个学生的时候,通过他的id号应该可以唯一地定位到这个学生,会并且只会查出一行。
口语化理解: 第二范式: 先满足第一范式, 然后要求数据表中的每一行都有个标识能跟其他行区分开来,这个标识时主键。例如查询一个订单时,通过订单id就能定位到这个订单,而且只会查出一行。
3)3NF(第三范式):必须先满足第二范式。非主键字段都与主键字段有直接依赖关系,不存在传递依赖。可以理解为非主键字段只依赖主键字段,而不依赖其它的非主键字段。
口语化理解: 第三范式: 先满足第二范式, 要求 不是主键的其他字段要于主键直接相关。
例如订单表, 有订单id、订单日期、产品id、产品名称。 产品名称跟主键订单id不是直接相关的而是间接相关的,不应该出现在该表内,可以拆分为两个表订单表:订单id、订单日期、产品id, 产品表:产品id 、产品名称。
二跟三的区别在于,二没有规定是否时直接相关的
4) BCNF :第三范式的扩展和加强。
口述: BCNF 主要在于解耦合,例如:表结构: 仓库id 管理员id 物品id 物品数量。仓库id和管理员id耦合在一起了,为了解耦合,可以改为两张表:仓库id 物品id 物品数量,增加表关系表: 仓库id 管理员id。
5) 4NF(第4范式):先满足第三范式, 要求将表中的多值属性拆分出来,分别建表。
例如: 电话号码, 这个就是多值属性。可已单独建表。