初学数据库三大范式

第一范式:数据表的列不可再分
     eg:看下面数据表,对于选课列明显是可以再分的,所以它是违反第一范式的。

    +-------------------------------+
    |学号   |姓名  |选课              |
    |-------+------+----------------|
    |10001  |张三  |数学,语文,英语|
    |-------+------+----------------|
    |10002  |李四  |语文,英语      |
    |-------+------+----------------|
    |10003  |王五  |语文,英语,历史|
    +-------------------------------+

第二范式:在满足第一范式的基础上,表中的非主键列不存在对主键的部分依赖
也就是受非主键列必须全部依赖于主键,通过主键可以唯一标识非主键列
看下面的学生选课表:

+---------------------------+
|学号  |课程 |成绩 |课程学分|
|------+-----+-----+--------|
|10001 |数学 |100  |6     |
|------+-----+-----+--------|
|10001 |语文 |90   |2     |
|------+-----+-----+--------|
|10001 |英语 |85   |3     |
|------+-----+-----+--------|
|10002 |数学 |90   |6     |
|------+-----+-----+--------|
|10003 |数学 |99   |6     |
|------+-----+-----+--------|
|10004 |语文 |89   |2     |
+---------------------------+

表中主键为 (学号,课程),我们可以表示为(学号,课程)->(成绩,课程学分),
表示所有非主键列 (成绩,课程学分)都依赖于主键 (学号,课程)。 但是,表中
还存在另外一个依赖:(课程)->(课程学分)。这样非主键列 ‘课程学分’依赖于部分主键列 ‘课程’, 所以上表是不满足第二范式的。
我们把它拆成如下2张表:
学生选课表:

+-----------------+
|学号  |课程 |成绩|
|------+-----+----|
|10001 |数学 |100 |
|------+-----+----|
|10001 |语文 |90  |
|------+-----+----|
|10001 |英语 |85  |
|------+-----+----|
|10002 |数学 |90  |
|------+-----+----|
|10003 |数学 |99  |
|------+-----+----|
|10004 |语文 |89  |
+-----------------+

课程信息表:

+-------------+
|课程|课程学分|
|----+--------|
|数学|  6     |
|----+--------|
|语文|  3     |
|----+--------|
|英语|  2     |
+-------------+

那么上面2个表,学生选课表主键为(学号,课程),课程信息表主键为(课程),
表中所有非主键列都完全依赖主键。不仅符合第二范式,还符合第三范式。
再看这样一个学生信息表:

+--------------------------------+
|学号  |姓名   |性别 |班级|班主任|
|------+-------+-----+----+------|
|10001 |张三   |男   |一班|小王  |
|------+-------+-----+----+------|
|10002 |李四   |男   |一班|小王  |
|------+-------+-----+----+------|
|10003 |王五   |男   |二班|小李  |
|------+-------+-----+----+------|
|10004 |张小三 |男   |二班|小李  |
+--------------------------------+

上表中,主键为:(学号),所有字段 (姓名,性别,班级,班主任)都依赖与主键(学号),不存在对主键的部分依赖。所以是满足第二范式.

第三范式:在满足第二范式的基础上,表中不存在对主键的传递依赖对于上面的学生信息表,虽然满足第二范式,所有字段都依赖主键(学号),但是,表中存在一个传力依赖,(学号)->(班级)->(班主任)。也就是说,(班主任)这个非主键列依赖与另外一个非主键列(班级)。所以不符合第三范式。把这个表拆分成如下2个表,
学生信息表:

+----------------------+
|学号 |姓名  |性别|班级|
|-----+------+----+----|
|10001|张三  |男  |一班|
|-----+------+----+----|
|10002|李四  |男  |一班|
|-----+------+----+----|
|10003|王五  |男  |二班|
|-----+------+----+----|
|10004|张小三|男  |二班|
+----------------------+

班级信息表:

+-----------+
|班级|班主任|
|----+------|
|一班|小王  |
|----+------|
|二班|小李  |
+-----------+

这样,对主键的传递依赖就消失了。上面的2个表都符合第3范式。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值