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

四步实现MySQL数据库规范化

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

  第一步:建立第一范式51Testing软件测试网x6u'T&k/CE O\

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

!cN_"x;wI&u&{p.W0

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

  把表变成第一范式的一种方法就是把表中包含的各实体分割成多个独立的表。在我们的例子中,会产生“Book”表,“Author”表,“Subject”表和“Publisher”表。51Testing软件测试网#T`}$ICe\$KB n

  “Book”表:51Testing软件测试网$u8|/^,gTK%P(B

J+yM'tHi%_9@0

ISBN51Testing软件测试网nBtGKc?6P7E

Title

U z5x3r6Hw%I0

Pages51Testing软件测试网#Z5Q H4g+~)c Yf2@

159059332451Testing软件测试网 E nf9^}

Beginning MySQL Database Design and Optimization

B [3nf$LRQ0

52051Testing软件测试网#}"s5fd#se.Y9zG m

51Testing软件测试网a-Y4t/d.|&m

  “Author”表 :

gg]/`lCq0

S*oO|9cI#W0

Author_ID

U e8U.`-`(@F']0

First Name51Testing软件测试网f(}-mT"Tr ]/S*N ka

Last Name51Testing软件测试网7V2F@*q9{?Gq{"F

151Testing软件测试网a[{M0DhnN8_'z

Chad51Testing软件测试网6~:X X#Cc$@:`IK

Russell51Testing软件测试网;_u7m1A7R/a

251Testing软件测试网4XpY7~|YtK

Jon

5L)G6]1xl1`4m1n0

Stephens

NG/v{ O;v&G0

351Testing软件测试网&g j)z:r"WK Y S

Mike

/sE[Rd'y0

Hilyer

~ IQjsoQk0

;T Y7Vw"j0

  “Subject”表:

Fs(H5xj_-@0

51Testing软件测试网3_nfpt"]

Subject _ID

7r5CR0u[| l{0

Last_name51Testing软件测试网 Z$jS I4o5I*f3FC

1

`6P&F_${T0

Russell51Testing软件测试网K"K m {8W cG"Uk

251Testing软件测试网)q yX,L1azx

Stephens51Testing软件测试网 oPo2kv9b4U

51Testing软件测试网U&s4mT;Huc

  “Publisher”表:

M1k(@*Xu.Kw bU2P0

AT Z Lm^,[p0

Publisher_ID

)H7I!wO M/m.D^ g0

Name51Testing软件测试网 BT*_*D6S2uit-\

Address

:V?1v)D&d.K0

City51Testing软件测试网^"NT?dSo2k Y

State51Testing软件测试网{x&YQA[aqKf

Zip51Testing软件测试网s%F!a[4E)` ~

1

yso&SJ-|0

Apress51Testing软件测试网.k/k$m&q~7G

2   580, Ninth street, station 21951Testing软件测试网7s@ hD4nZ/J

Berkeley

lu"[.W+ayR^)}3m4W(W0

California51Testing软件测试网,K&V;U#{)V\

9471051Testing软件测试网.gVP&\THN

dp%AJe#BQ0

  第二步:定义关系

%k{1O&H(_H sR-b4_5e0

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

u\)M&`a]o T$t0
  •   一对一(或零)关系(例如:婚姻情况)。
  •   一对多(或零)关系(例如:子女情况)。
  •   多对多关系(例如:facebook好友关系)。

  “book”表可以与“Author”表有多对多的关系。51Testing软件测试网;F J#Q2I1TT1Dg z!{2HW

  “Author”表可以有许多书,一本图书可以有一个以上的作者。51Testing软件测试网,F7t"U o?/Fn

  “Book”表可以与“Subject”表有多对多的关系。51Testing软件测试网X a%gN"?f

  许多图书可能适合多种类型主题,也有许多主题有许多书。51Testing软件测试网OjX%Q y;o O

  多对多关系必须通过“链接”表实现。51Testing软件测试网3ae(NEu1qrvJ;ht1a.I

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

W9M-spJ[mK0

51Testing软件测试网(X }:H nPYh5_ `Y j

ISBN51Testing软件测试网/sw@ B5{]

Subject_ID

j6OF:hp6o0

1590593324

B!q Dn&SM/w0

151Testing软件测试网(rI\3HO+Lj J!Q

1590593324

$GRBf8? I4M W;Yt0

251Testing软件测试网[$o'f)I?}nJ Q

2ee:c:Ls T0

  “Book”表与“Subject”表的多对多关系:

0S EZ7B*z J&aj3L&^0

#@E1KrN\I|5u0

ISBN51Testing软件测试网8p8]1t%v4I;G[7l

Subject_ID

st2d6O-_tb ]&r0

1590593324

"SOhQEU_:E0

151Testing软件测试网aCr |7]V Z

1590593324

uZ#|,M js6G0

2

9H4t1[/`#Ur1Y?@Y0

*t R5l[7V0

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

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

7j{7TJ9nSjt2eL0

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

"tO |?5_)`&P L0

  表中引入的外键代表了“许多”的概念,指向另一个表的主键。因为“book”表代表了许多一对多的关系,“Publisher”表的主键值就增加作为了一个外键列“Publisher_ID”。

x:T8C'hIsp0

51Testing软件测试网$sdOh6te%e"R-y

ISBN

-_$eT|}YRf Z0

Title

(K0~#H1~ WJ1N&SR0

Pages51Testing软件测试网9S.rz9D'V'r9j

Publisher_ID51Testing软件测试网V:P5H i7['NM

159059332451Testing软件测试网k_aMP Mn1z

Beginning MySQL Database Design and Optimization

l)b nt,xt0

52051Testing软件测试网N+n!iY-?"l2o S

,~4d.\$U#LG!?Kt0

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

:e"L(|Z#\0

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

5IIOX m"?8@ {0

  这里,采用了复合组件来消除同一个作者写了多本审查合格的图书的可能性。审稿网址依赖于审稿者ID,这也是整个复合键的一部分。51Testing软件测试网 C2D0m)enBTm}0F

  该表目前不遵从第二范式:51Testing软件测试网DdbG(o4t-vT

9xK_7` q-t0

ISBN51Testing软件测试网!gJ-@6fR8a8l!c;B

Reviewer ID51Testing软件测试网D}q6YN)bz#Jh9v

Summary51Testing软件测试网a'Q$AyQH c ?{0D

Reviewer_URL51Testing软件测试网:n.n,]db

1590593324

3T*Qr,D2A5\1S&}i0

3

#u}\#^4L,l:K!HX0

A great book!51Testing软件测试网(a nga#iDU

http://www.openwin.org51Testing软件测试网6A!D'Mh+G!N4AL

-\}1h_7K,c3O0

  第四步:第三范式(3NF)51Testing软件测试网 C^@jf)}.R

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

5A3SaS$j-gx0

  在“Publisher”表中,“City”和“State”实际上是与邮政编码独立的,而不是“Publisher_ID”。51Testing软件测试网!C5A v}(J*F6H

o$luM/u1lO0

Publisher_ID51Testing软件测试网;K9Q-r!KT WLd1m-}:P

Name

P].x`D4Gx)N@-t0

Address

BQ[M3lq&o+u p-I(f0

City

$HW:x~2V0

State

8`K%Ej,@'T!a#I6I0

Zip

J2eO0RCyVkq0

151Testing软件测试网8Sb)}%p/j

Apress

!MdM hmh0

2580, Ninth street, station 219

hj9p6`)P#@gP&g0

Berkeley51Testing软件测试网-__ [pM{/hd

California51Testing软件测试网"`{ w0y*R6R@'y

9471051Testing软件测试网u9k+x9x7`7_

51Testing软件测试网CX8uGP ZU%T

  要遵守第三范式,我们必须把这些信息移动到“Publisher”表之外:51Testing软件测试网)e EN2C/~2M

'h$ar:}2D(RA%E0

Zip

8r'exZ8W#VL0

City

:e{ `F P-o ucF0

State51Testing软件测试网'pH;A];f

9471051Testing软件测试网[c@q[)|L E/y

Berkeley

U7xXSN^wX0

California

9ie?;cIG(px0

x|`t|D0

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

"`+o$px#L1Y&seM0

TAG: MySQL mysql

 

评分:0

我来说两句

Open Toolbar