轻松理解数据库三范式 + 设计原则

以下内容来自互联网,原始出处不详

官方定义:第一范式(1NF):数据库表中的字段都是单一属性的,不可再分。
我的理解:第一范式这个不用說了,只要是关系数据库都满足第一范式
官方定义:第二范式(2NF):数据库表中不存在非关键字段对任一候选关键字段的部分函数依赖
我的理解:在第二范式中组合主键(AB)【注明:也叫做复合主键】里面的A或者B 与其他字段不能存在组合重复,为解决这个问题,通常的做法是咱们不用组合主键,添加一个ID,做为单一主键即可满足第二范式。如果不想添加ID,请满足组合主键(AB)里面的A或者B 与其他字段不能存在组合重复。
如:不满足第二范式,复合主键中的A与字段C组合重复
+------------+-----------+-------------------+
    pk                pk             row
+------------+-----------+-------------------+
    A                 B              C
+------------+-----------+-------------------+
    A                 D              C
+------------+-----------+-------------------+
    A                 E              C
+------------+-----------+-------------------+
改为这样满足第二范式(但是不满足第三范式,字段A与字段C是组合重复):
+---------+-------------+-----------+-------------------+
    pk          row          row             row
+---------+-------------+-----------+-------------------+
      1         A            B               C
+---------+-------------+-----------+-------------------+
      2         A            D               C
+---------+-------------+-----------+-------------------+
      3         A            E               C
+---------+-------------+-----------+-------------------+
官方定义:第三范式(3NF):在第二范式的基础上,数据表中如果不存在非关键字段对任一候选关键字段的传递函数依赖则符合第三 范式。
我的理解:在第三范式中字段与字段之间不能存在组合重复
如:不满足第三范式,字段A与字段C组合重复
+---------+------------+-----------+-------------------+---------------+
    pk          row         row             row               row
+---------+------------+-----------+-------------------+---------------+
    1           A           B               C                 F
+---------+------------+-----------+-------------------+---------------+
    2           A           D               C                 G
+---------+------------+-----------+-------------------+---------------+
    3           A           E               C                 K
+---------+------------+-----------+-------------------+---------------+
改为这样满足第三范式:
表1
+---------+------------+-----------+
    pk          row         row         
+---------+------------+-----------+
    1           A           B               
+---------+------------+-----------+
    2           A           D                 
+---------+------------+-----------+
    3           A           E                 
+---------+------------+-----------+
和表2
+---------+-------------------+-------------+
    pk             row              row
+---------+-------------------+-------------+
    1              C                F 
+---------+-------------------+-------------+
    2              C                G
+---------+-------------------+-------------+
    3              C                K
+---------+-------------------+-------------+
原则:当出现字段与字段的组合重复,如上的A和C的组合重复,首先要考虑的就是把他们拆分为2个表,具体是C拆到表1, 还是A拆到表1,看情况而定.
关键要理解定义这种范式标准的主要目的是为了减少数据冗余,数据冗余产生的本质就是在一个表中存在字段与字段之间的一对多,或者多对多关系。解决这个几对几的关系问题,就能轻易实现满足第三范式的数据库设计。

来自百度知道的一段内容(http://zhidao.baidu.com/question/251111120.html)

  1. 一对一可以两个实体设计在一个数据库中l例如设计一个夫妻表,里面放丈夫和妻子
  2. 一对多可以建两张表,将一这一方的主键作为多那一方的外键,例如一个学生表可以加一个字段指向班级(班级与学生一对多的关系)
  3. 多对多可以多加一张中间表,将另外两个表的主键放到这个表中(如教师和学生就是多对多的关系)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值