四步实现MySQL数据库规范化

日期: 2011-06-02 作者:Ronen Baram翻译:冯昀晖 来源:TechTarget中国 英文

接上文:理解数据库规范化的意义   第一步:建立第一范式   数据库规范化流程需要让数据遵守先进的设计范式,而且除非前面的级别被满足了,否则更高级别的数据库规范程度是不可能实现的。第一范式是数据库规范化的基本层级。   对于第一范式(1NF),要确保表中的每一列是原子性的;也就是说是唯一的,不包含值集。在我们的例子中,“作者”和“主题”不符合这一点。

  把表变成第一范式的一种方法就是把表中包含的各实体分割成多个独立的表。在我们的例子中,会产生“Book”表,“Author”表,“Subject”表和“Publisher”表。   “Book”表: ISBN Title Pages 15905……

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

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

  通过数据库规范化,我们使各表都遵守了比较先进的范式。这样,每个表都代表一个实体,我们也获得了降低冗余,减少异常以及提升效率的好处。

相关推荐