数据库三个范式实例讲解

 
来源:中国自学编程网   发布日期:2008-09-24  

一、 图书信息的直观表示方法:

 

书名

出版社

出版年份

第一作者

第二作者

白盒测试

科学出版社

2007

老师

老师

数据库管理

魅力出版社

2000

老师

李四

王五

 

二、范式的学术定义

1.       第一范式:

消除重复的组,从而所有表中的所有记录可以被每个表中的主键唯一标识。也就是:非主键的所有字段必须依赖于主键。

2.       第二范式

所有的非键值必须完全依赖于主键,不允许部分依赖

3.       第三范式

消除传递依赖。

 

三、图书信息要满足第一范式:

1.   内容相识的数据列必须消除

2.   必须为每一组相关数据分别创建一个数据表

3.   每条数据记录必须用一个主键来标识

Title

书名

出版社

出版年份

第一作者

第二作者

白盒测试

科学出版社

2007

老师

老师

数据库管理

魅力出版社

2000

老师

李四

王五

不管是第一作者还是第二作者,都是作者,是相同的数据列,所以必须要消除: 

Title

ID

书名

出版社

出版年份

作者

1

白盒测试

科学出版社

2007

老师

2

白盒测试

科学出版社

2007

老师

3

数据库管理

魅力出版社

2000

老师

4

数据库管理

魅力出版社

2000

李四

5

数据库管理

魅力出版社

2000

王五

 

四、图书信息要满足第二范式:

1.         只要数据列里的内容出现重复,就应该把数据表拆分为多个表

2.       拆分形成的数据表必须用外键关联起来

在本例中, Title 表中的书名是重复的,原因是因为要表现与作者的关系才重复的,所以要消除它,就需要把作者的信息拆分出来:

Title

ID

书名

出版社

出版年份

1

白盒测试

科学出版社

2007

2

数据库管理

魅力出版社

2000

 

Authors

ID

TitleID( 外键 )

作者

1

1

老师

2

1

老师

3

2

老师

4

2

李四

5

2

王五

 

在作者表中,名字还是存在重复,所以可以进一步改进为三个表:

Title

ID

书名

出版社

出版年份

1

白盒测试

科学出版社

2007

2

数据库管理

魅力出版社

2000

 

Authors

ID

姓名

1

老师

2

老师

3

李四

4

王五

 

Rel_title_author

TitleID ( 外键 )

AuthorID ( 外键 )

1

1

1

2

2

1

2

3

2

4

 

五、图书信息要满足第三范式:

与主键没有直接关系的数据列必须消除(创建一个表来存放他们)。   如:本例中出版社与书的名字没有必然的联系

Title

ID

书名

PublisherID ( 外键 )

出版年份

1

白盒测试

1

2007

2

数据库管理

2

2000

 

Authors

ID

姓名

1

老师

2

老师

3

李四

4

王五

 

Rel_title_author

TitleID ( 外键 )

AuthorID ( 外键 )

1

1

1

2

2

1

2

3

2

4

 

Publishers

ID

名称

1

科学出版社

2

魅力出版社

 

总结:

在实际工作中,往往要等到数据库里已经有了足够多的测试数据之后才会注意到种种冗余的现象,然后才会清楚地知道怎样拆分数据表最合适。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值