十五年测试老手,长期负责WEB\APP 项目测试,目前主要负责团队管理工作。

四步实现MySQL数据库规范化

上一篇 / 下一篇  2011-06-06 21:54:27 / 个人分类:mysql

  第一步:建立第一范式51Testing软件测试网 fk\fu7v%cb

  数据库规范化流程需要让数据遵守先进的设计范式,而且除非前面的级别被满足了,否则更高级别的数据库规范程度是不可能实现的。第一范式是数据库规范化的基本层级。51Testing软件测试网 WeGE [9j9BC

  对于第一范式(1NF),要确保表中的每一列是原子性的;也就是说是唯一的,不包含值集。在我们的例子中,“作者”和“主题”不符合这一点。

+y l H1{\uE-Cp0

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

;X)` T1rj s3U6Fg,d ]0

  “Book”表:51Testing软件测试网9IL7Ul"N

6wW'A5| ]+{{0

ISBN51Testing软件测试网&rfM4ME+H

Title51Testing软件测试网3Q6Lv6^#G R/n-u@|;p$J3e

Pages51Testing软件测试网.^IL4|)O-c3{{Ur

159059332451Testing软件测试网kCe,At qc]!e

Beginning MySQL Database Design and Optimization51Testing软件测试网A RF6v:} P

52051Testing软件测试网+iFa;N_6\q,Xq

51Testing软件测试网}^Pj4O4^U

  “Author”表 :51Testing软件测试网$J;NbQ,[Y8p

51Testing软件测试网y&T9@0ka!a;_%Q'b2d

Author_ID

+tr_z S|(S0

First Name

:bgC)@)p0

Last Name

.Q qj Ca4a)V D"a,S0

151Testing软件测试网z)n1KZ(P5W@;X"D7O

Chad

A~jb U}?6nR ]0

Russell

O)}W:m(w"{'c0K0

251Testing软件测试网(v#Aoii4N

Jon

uJ*L E_+Vf!p3M0

Stephens51Testing软件测试网.c&s T}*XG-s/c)?1V

3

w m LY2r5@3p;}"R0

Mike51Testing软件测试网j(rEfn|.[&jV[}

Hilyer51Testing软件测试网)S0\gEw ^v

!qByrjT h0

  “Subject”表:

BW1LL!QUa0

H5ln)Jcz0

Subject _ID51Testing软件测试网vS&oJOWu

Last_name51Testing软件测试网c3kx7E.TWV,H

1

!h S9`.F_-c0

Russell

E _g$Qtj|{J0

2

5M#|8t:[b0_0

Stephens51Testing软件测试网!h'ha*p]a

51Testing软件测试网/Q.^&e/F1wn

  “Publisher”表:

Z,UM+W Y\2JCT0

51Testing软件测试网 Z't`8J@|*Yw/}

Publisher_ID

8o-[gFJ0H0

Name51Testing软件测试网!a.^K0L+z%b7zw

Address51Testing软件测试网'c7U$b!Tmx#L

City51Testing软件测试网7] l~m~J$fO

State51Testing软件测试网k4lO`J%g+r

Zip

V$ak`;W-Ky,K8q0

151Testing软件测试网3t"Z*|4O[_ SQ+?

Apress51Testing软件测试网e#\9uz"m+P:G.f

2   580, Ninth street, station 219

YT4i ~;@.y&Ub0

Berkeley51Testing软件测试网 I |0K |GnM{

California51Testing软件测试网]x^^:gX&S7c

9471051Testing软件测试网$EK"_{4TD{`o\

^7t1Z(c&z7?0

  第二步:定义关系

@!p2mZe#U2a4m#`KTH0

  我们可以建立三种类型的关系:

s0k"l,}} m%F|0
  •   一对一(或零)关系(例如:婚姻情况)。
  •   一对多(或零)关系(例如:子女情况)。
  •   多对多关系(例如:facebook好友关系)。

  “book”表可以与“Author”表有多对多的关系。51Testing软件测试网:t/z-m!s x'|

  “Author”表可以有许多书,一本图书可以有一个以上的作者。

Q/?N-`8Al0zld,N5j0

  “Book”表可以与“Subject”表有多对多的关系。

@O/m y}e0

  许多图书可能适合多种类型主题,也有许多主题有许多书。51Testing软件测试网K0@~ p.hLg(E

  多对多关系必须通过“链接”表实现。

J ~E1WA2o%k4y0

  “book”表与“Author”表的多对多关系:

;f,T ?2R@`6] T^0

,ap0yk1n `yh!Hp0

ISBN51Testing软件测试网8g Jb dh)c-hjR

Subject_ID

7?oztG0

159059332451Testing软件测试网1C!]T*cT1t

1

R9]^g2F,}0

159059332451Testing软件测试网9j8N[g"d8{X!`Y c

2

D(v~AI;L2p6q{0

TBVo\Kg#U0

  “Book”表与“Subject”表的多对多关系:51Testing软件测试网b~0c,Z z

o|n1_ x'@@#`0

ISBN

1P%tF[Y%}'F @aw0

Subject_ID51Testing软件测试网;E k[,L.P1B(?.`.@S

1590593324

E1? kvE5s0

1

8y*t:Hc"tube#y:u0

159059332451Testing软件测试网G? UqF

2

&DN`m9p!l"M0

51Testing软件测试网2Fp;d`8w)?2Z

  我们例子中的一对多关系是“book”表与“Publisher”表的关系。每本图书只有唯一的一个出版商,但是一个出版商可以出版许多图书。51Testing软件测试网Z Fo^1k^{TP

  我们可以用外键实现“一对多”关系。外键是数据库管理系统(DBMS)中的一种机制,它在数据段之间定义关系并创建限制。没有关联到具体图书是不可能审查过的。也不可能存在没有作者或者出版社的书。51Testing软件测试网0Vy} WPmV8BO#B

  在删除出版社时,根据对那些书的审查要求,所有相关图书可能需要相应删除。而作者不必删除掉。

wQNjQ0

  表中引入的外键代表了“许多”的概念,指向另一个表的主键。因为“book”表代表了许多一对多的关系,“Publisher”表的主键值就增加作为了一个外键列“Publisher_ID”。51Testing软件测试网 jk(Yc _:M

Y*m R{KKa3V%v#O.v]0

ISBN51Testing软件测试网4@K:orC'\*E:E

Title

Aw;O-w)}7L0

Pages51Testing软件测试网g/HS|,^"o,P'X

Publisher_ID51Testing软件测试网5~2Ow3j;K}\n

159059332451Testing软件测试网uW!Wz,xP!G6G

Beginning MySQL Database Design and Optimization

U\4q8}X-M`0

520

0^2X^F wC2P1C$c0

51Testing软件测试网3RF.WM lQ*b

  第三步:实现第二范式(2NF)

3h.{;eR0A2e QFM0

  第二范式(2NF)削减掉了表中的重复或多于数据,把它们存储在新表中,并在表之间建立关系。在数据库规范化中,第二范式是关于组合键列和非键列之间的关系。也就是说非键列必须依赖整个组合键。51Testing软件测试网coEJMNh,E

  这里,采用了复合组件来消除同一个作者写了多本审查合格的图书的可能性。审稿网址依赖于审稿者ID,这也是整个复合键的一部分。51Testing软件测试网h,`)X5l e(_ ?:P

  该表目前不遵从第二范式:

1P)fCv!I!U5k4A&A0

1Yrt"O*?0

ISBN51Testing软件测试网~"YQJ N

Reviewer ID51Testing软件测试网 f/G+r8XTP-_

Summary

2hu7uB@ y0

Reviewer_URL51Testing软件测试网7R hY-Yig}}

1590593324

fax t pGjs0

3

4eLi;L9Pf"D0

A great book!51Testing软件测试网7|ZLP;h5Fo7L8j%w5M

http://www.openwin.org

y}][1e0

51Testing软件测试网LS n0Q.a:z

  第四步:第三范式(3NF)51Testing软件测试网yx"c X)z

  这一范式要求所有列都直接依赖于主键。如果某一列依赖于另一列并最终依赖于主键,那么这种表就不符合第三范式。

y\cT_-r0

  在“Publisher”表中,“City”和“State”实际上是与邮政编码独立的,而不是“Publisher_ID”。51Testing软件测试网#n|Q{ M,x4PC!D

S1Z']Eckw P!Y0

Publisher_ID

/iV7@2y2zv o0

Name

(qrV)nEY%A0

Address51Testing软件测试网8zp,o KW

City

^wYds+]t0

State51Testing软件测试网 vBg5K/lT

Zip

xd"O7A2Ae-r8F0

1

gU#g@2NbNo0

Apress51Testing软件测试网;Ld"A%m]-oh9[1vS

2580, Ninth street, station 219

5k5c:~:pX+VX2R0

Berkeley

&Q%|'E]%^[5H:gM0

California

/j3t*q$C1QHT|0

9471051Testing软件测试网%Z4N"pmODdoX!w

51Testing软件测试网Q@&nFP

  要遵守第三范式,我们必须把这些信息移动到“Publisher”表之外:

'RX^,v {N?a0

51Testing软件测试网9gPspO7APk

Zip51Testing软件测试网S%lr\T{})l/L

City

Rx]8A v-I9_![0

State51Testing软件测试网(s2R4^} r%Tp

94710

#Zg~;z:iT;no0

Berkeley51Testing软件测试网ZbnaUm{

California

@yM)l w;G,sU]p*]0

51Testing软件测试网[s&i6V,z5]7|

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


TAG: MySQL mysql

 

评分:0

我来说两句

Open Toolbar