第一步:建立第一范式51Testing软件测试网
fk\fu7v%cb
数据库规范化流程需要让数据遵守先进的设计范式,而且除非前面的级别被满足了,否则更高级别的数据库规范程度是不可能实现的。第一范式是数据库规范化的基本层级。51Testing软件测试网
WeGE [9j9BC
对于第一范式(1NF),要确保表中的每一列是原子性的;也就是说是唯一的,不包含值集。在我们的例子中,“作者”和“主题”不符合这一点。
+y l
H1{\uE-Cp0 把表变成第一范式的一种方法就是把表中包含的各实体分割成多个独立的表。在我们的例子中,会产生“Book”表,“Author”表,“Subject”表和“Publisher”表。
;X)`T1rjs3U6Fg,d
]0 “Book”表:51Testing软件测试网9IL7U l"N
6wW'A5| ]+{{0ISBN51Testing软件测试网&rfM4ME+H | Title51Testing软件测试网3Q6Lv6^#GR/n-u@|;p$J3e | Pages51Testing软件测试网.^IL4|)O-c3{{U r |
159059332451Testing软件测试网kCe,At qc]!e | Beginning MySQL Database Design and Optimization51Testing软件测试网ARF6v:} 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_zS|(S0 | First Name :bgC)@)p0 | Last Name .Qqj
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 mLY2r5@3p;}"R0 | Mike51Testing软件测试网j(rEfn|.[&jV[} | Hilyer51Testing软件测试网)S0\gEw ^v |
!qByrjT
h0 “Subject”表:
BW1LL!QUa0H5l n)Jcz0Subject _ID51Testing软件测试网vS&oJ OWu | Last_name51Testing软件测试网c3kx7E.TW V,H |
1 !hS9`.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\2JCT051Testing软件测试网 Z't`8J@|*Yw/}
Publisher_ID 8o-[gFJ0H0 | Name51Testing软件测试网!a.^K0L+z%b7zw | Address51Testing软件测试网'c7U$b!Tm x#L | City51Testing软件测试网7] l~ m~J$fO | State51Testing软件测试网k4lO` J%g+r | Zip V$a k`;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 |G nM{ | 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!Hp0ISBN51Testing软件测试网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'@@#`0ISBN 1P%tF[Y%}'F @aw0 | Subject_ID51Testing软件测试网;E
k[,L.P1B(?.`.@S |
1590593324 E1?kvE5s0 | 1 8y*t:H c"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软件测试网0V y}
WPmV8BO#B
在删除出版社时,根据对那些书的审查要求,所有相关图书可能需要相应删除。而作者不必删除掉。
wQNjQ0 表中引入的外键代表了“许多”的概念,指向另一个表的主键。因为“book”表代表了许多一对多的关系,“Publisher”表的主键值就增加作为了一个外键列“Publisher_ID”。51Testing软件测试网 jk(Y c
_:M
Y*m
R{KKa3V%v#O.v]0ISBN51Testing软件测试网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.WMlQ*b
第三步:实现第二范式(2NF)
3h.{;eR0A2e
Q FM0 第二范式(2NF)削减掉了表中的重复或多于数据,把它们存储在新表中,并在表之间建立关系。在数据库规范化中,第二范式是关于组合键列和非键列之间的关系。也就是说非键列必须依赖整个组合键。51Testing软件测试网 c oEJMNh,E
这里,采用了复合组件来消除同一个作者写了多本审查合格的图书的可能性。审稿网址依赖于审稿者ID,这也是整个复合键的一部分。51Testing软件测试网h,`)X5l e(_
?:P
该表目前不遵从第二范式:
1P)fCv!I!U5k4A&A01Y rt"O*?0ISBN51Testing软件测试网~"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|ZL P;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!Y0Publisher_ID /iV7@2y2zv
o0 | Name (qrV)nEY%A0 | Address51Testing软件测试网8zp,o
KW | City ^wYds+]t0 | State51Testing软件测试网 vBg5K/lT | Zip xd"O7A2Ae-r8F0 |
1 g U#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?a051Testing软件测试网9gPspO7APk
Zip51Testing软件测试网S%lr\T{})l/L | City Rx]8Av-I9_![0 | State51Testing软件测试网(s2R4^}r%Tp |
94710 #Zg~;z:iT;no0 | Berkeley51Testing软件测试网ZbnaUm{ | California @yM)lw;G,sU]p*]0 |
51Testing软件测试网[s&i6V,z5]7|
通过数据库规范化,我们使各表都遵守了比较先进的范式。这样,每个表都代表一个实体,我们也获得了降低冗余,减少异常以及提升效率的好处。51Testing软件测试网5gb~6XBsZ3d_