接上文:理解数据库规范化的意义 第一步:建立第一范式 数据库规范化流程需要让数据遵守先进的设计范式,而且除非前面的级别被满足了,否则更高级别的数据库规范程度是不可能实现的。第一范式是数据库规范化的基本层级。 对于第一范式(1NF),要确保表中的每一列是原子性的;也就是说是唯一的,不包含值集。在我们的例子中,“作者”和“主题”不符合这一点。
把表变成第一范式的一种方法就是把表中包含的各实体分割成多个独立的表。在我们的例子中,会产生“Book”表,“Author”表,“Subject”表和“Publisher”表。 “Book”表: ISBN Title Pages 15905……
我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。
我原创,你原创,我们的内容世界才会更加精彩!
【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】
微信公众号
TechTarget
官方微博
TechTarget中国
接上文:理解数据库规范化的意义
第一步:建立第一范式
数据库规范化流程需要让数据遵守先进的设计范式,而且除非前面的级别被满足了,否则更高级别的数据库规范程度是不可能实现的。第一范式是数据库规范化的基本层级。
对于第一范式(1NF),要确保表中的每一列是原子性的;也就是说是唯一的,不包含值集。在我们的例子中,“作者”和“主题”不符合这一点。
把表变成第一范式的一种方法就是把表中包含的各实体分割成多个独立的表。在我们的例子中,会产生“Book”表,“Author”表,“Subject”表和“Publisher”表。
“Book”表:
ISBN | Title | Pages |
1590593324 | Beginning MySQL Database Design and Optimization | 520 |
“Author”表 :
Author_ID | First Name | Last Name |
1 | Chad | Russell |
2 | Jon | Stephens |
3 | Mike | Hilyer |
“Subject”表:
Subject _ID | Last_name |
1 | Russell |
2 | Stephens |
“Publisher”表:
Publisher_ID | Name | Address | City | State | Zip |
1 | Apress | 2 580, Ninth street, station 219 | Berkeley | California | 94710 |
第二步:定义关系
我们可以建立三种类型的关系:
- 一对一(或零)关系(例如:婚姻情况)。
- 一对多(或零)关系(例如:子女情况)。
- 多对多关系(例如:facebook好友关系)。
“book”表可以与“Author”表有多对多的关系。
“Author”表可以有许多书,一本图书可以有一个以上的作者。
“Book”表可以与“Subject”表有多对多的关系。
许多图书可能适合多种类型主题,也有许多主题有许多书。
多对多关系必须通过“链接”表实现。
“book”表与“Author”表的多对多关系:
ISBN | Subject_ID |
1590593324 | 1 |
1590593324 | 2 |
“Book”表与“Subject”表的多对多关系:
ISBN | Subject_ID |
1590593324 | 1 |
1590593324 | 2 |
我们例子中的一对多关系是“book”表与“Publisher”表的关系。每本图书只有唯一的一个出版商,但是一个出版商可以出版许多图书。
我们可以用外键实现“一对多”关系。外键是数据库管理系统(DBMS)中的一种机制,它在数据段之间定义关系并创建限制。没有关联到具体图书是不可能审查过的。也不可能存在没有作者或者出版社的书。
在删除出版社时,根据对那些书的审查要求,所有相关图书可能需要相应删除。而作者不必删除掉。
表中引入的外键代表了“许多”的概念,指向另一个表的主键。因为“book”表代表了许多一对多的关系,“Publisher”表的主键值就增加作为了一个外键列“Publisher_ID”。
ISBN | Title | Pages | Publisher_ID |
1590593324 | Beginning MySQL Database Design and Optimization | 520 |
第三步:实现第二范式(2NF)
第二范式(2NF)削减掉了表中的重复或多于数据,把它们存储在新表中,并在表之间建立关系。在数据库规范化中,第二范式是关于组合键列和非键列之间的关系。也就是说非键列必须依赖整个组合键。
这里,采用了复合组件来消除同一个作者写了多本审查合格的图书的可能性。审稿网址依赖于审稿者ID,这也是整个复合键的一部分。
该表目前不遵从第二范式:
ISBN | Reviewer ID | Summary | Reviewer_URL |
1590593324 | 3 | A great book! | http://www.openwin.org |
第四步:第三范式(3NF)
这一范式要求所有列都直接依赖于主键。如果某一列依赖于另一列并最终依赖于主键,那么这种表就不符合第三范式。
在“Publisher”表中,“City”和“State”实际上是与邮政编码独立的,而不是“Publisher_ID”。
Publisher_ID | Name | Address | City | State | Zip |
1 | Apress | 2580, Ninth street, station 219 | Berkeley | California | 94710 |
要遵守第三范式,我们必须把这些信息移动到“Publisher”表之外:
Zip | City | State |
94710 | Berkeley | California |
通过数据库规范化,我们使各表都遵守了比较先进的范式。这样,每个表都代表一个实体,我们也获得了降低冗余,减少异常以及提升效率的好处。
作者
翻译
相关推荐
-
2017年5月数据库流行度排行榜 MySQL与Oracle“势均力敌”
数据库知识网站DB-engines.com最近更新了2017年5月的数据库流行榜单。TechTarget继续与您一起分享最新的榜单情况。
-
2017年3月数据库流行度排行榜 Oracle卫冕之路困难重重
时隔一个月,数据库市场经过一轮“洗牌”,旧的市场格局是否会被打破,曾经占巨大市场份额的企业是否可能失去优势?
-
2017年2月数据库流行度排行榜 攻城容易守城难
2016年下半年,数据库排行榜的前二十名似乎都“固守阵地”,在排名上没有太大的变动。随着2017年的悄然而至,数据库的排名情况是否会有新的看点?
-
MySQL管理特性:让企业适合交易平台
当Alexander Culiniac和他的同事在TickTrade系统公司建立一个基于云的交易平台时,面临一些基本的约束。那就是,系统必须在云上工作良好并且经济实用。