ÓÑÇéÌáʾ£ºÈç¹û±¾ÍøÒ³´ò¿ªÌ«Âý»òÏÔʾ²»ÍêÕû£¬Çë³¢ÊÔÊó±êÓÒ¼ü¡°Ë¢Ð¡±±¾ÍøÒ³£¡
µÚÈýµç×ÓÊé ·µ»Ø±¾ÊéĿ¼ ¼ÓÈëÊéÇ© ÎÒµÄÊé¼Ü ÎÒµÄÊéÇ© TXTÈ«±¾ÏÂÔØ ¡ºÊղص½ÎÒµÄä¯ÀÀÆ÷¡»

VB2008´ÓÈëÃŵ½¾«Í¨(PDF¸ñʽӢÎÄ°æ)-µÚ96²¿·Ö

¿ì½Ý²Ù×÷: °´¼üÅÌÉÏ·½Ïò¼ü ¡û »ò ¡ú ¿É¿ìËÙÉÏÏ·­Ò³ °´¼üÅÌÉ쵀 Enter ¼ü¿É»Øµ½±¾ÊéĿ¼ҳ °´¼üÅÌÉÏ·½Ïò¼ü ¡ü ¿É»Øµ½±¾Ò³¶¥²¿! Èç¹û±¾ÊéûÓÐÔĶÁÍ꣬ÏëÏ´μÌÐø½Ó×ÅÔĶÁ£¬¿ÉʹÓÃÉÏ·½ "Êղص½ÎÒµÄä¯ÀÀÆ÷" ¹¦ÄÜ ºÍ "¼ÓÈëÊéÇ©" ¹¦ÄÜ£¡




¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡o¡¡¡¡To¡¡improve¡¡throughput£»¡¡you¡¡can¡¡take¡¡a¡¡snapshot¡¡of¡¡the¡¡data¡£¡¡



¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡o¡¡¡¡Higher¡­level¡¡synchronization¡¡abstractions¡¡are¡¡the¡¡reader/writer¡¡and¡¡producer/consumer¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡architectures¡£¡¡


¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­Page¡¡391¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡C¡¡HA¡¡P¡¡TE¡¡R¡¡¡¡¡¡1¡¡3¡¡¡¡¡¡¡ö¡¡¡¡¡¡¡¡L¡¡E¡¡AR¡¡N¡¡IN¡¡G¡¡¡¡¡¡AB¡¡O¡¡U¡¡T¡¡¡¡¡¡M¡¡U¡¡L¡¡T¡¡IT¡¡HR¡¡E¡¡AD¡¡IN¡¡G¡¡369¡¡



¡¡¡¡¡¡¡¡¡¡o¡¡¡¡Reader/writer¡¡locks¡¡are¡¡exclusive¡¡locks£»¡¡but¡¡they¡¡separate¡¡code¡¡that¡¡reads¡¡from¡¡code¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡that¡¡writes¡£¡¡To¡¡improve¡¡code¡¡efficiency£»¡¡reader/writer¡¡locks¡¡allow¡¡multiple¡¡readers£»¡¡but¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡only¡¡a¡¡single¡¡writer¡£¡¡Reader/writer¡¡locks¡¡are¡¡effective¡¡only¡¡if£»¡¡for¡¡the¡¡most¡¡part£»¡¡you¡¡are¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡reading¡¡data¡£¡¡



¡¡¡¡¡¡¡¡¡¡o¡¡¡¡Producer/consumer¡¡locks¡¡split¡¡the¡¡task¡¡of¡¡producing¡¡and¡¡consuming¡¡data¡¡into¡¡two¡¡sepa

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡rate¡¡steps¡£¡¡The¡¡¡¡API¡¡uses¡¡the¡¡producer/consumer¡¡concept¡¡extensively£»¡¡examples¡¡are¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Windows¡£Forms¡¡and¡¡IAsyncResult¡£¡¡



¡¡¡¡¡¡¡¡¡¡o¡¡¡¡Deadlocks¡¡occur¡¡because¡¡timing¡¡changes¡¡cause¡¡your¡¡code¡¡to¡¡not¡¡be¡¡deterministic¡£¡¡



¡¡¡¡¡¡¡¡¡¡o¡¡¡¡Deadlocks¡¡can¡¡be¡¡partially¡¡avoided¡¡using¡¡Monitors£»¡¡but¡¡the¡¡most¡¡effective¡¡way¡¡of¡¡avoiding¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡deadlocks¡¡is¡¡to¡¡use¡¡the¡¡producer/consumer¡¡development¡¡technique¡£¡¡This¡¡is¡¡because¡¡the¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡producer/consumer¡¡architecture¡¡takes¡¡the¡¡approach¡¡of¡¡handing¡¡off¡¡data£»¡¡rather¡¡than¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡sharing¡¡data¡£¡¡



¡¡¡¡¡¡¡¡¡¡o¡¡¡¡Applications¡¡that¡¡multitask¡¡effectively¡¡are¡¡applications¡¡that¡¡have¡¡been¡¡designed¡¡using¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡logic£»¡¡rather¡¡than¡¡development¡¡techniques¡¡where¡¡you¡¡think¡¡up¡¡the¡¡code¡¡as¡¡you¡¡go¡¡along¡£¡¡



Some¡¡Things¡¡for¡¡You¡¡to¡¡Do¡¡



The¡¡following¡¡is¡¡an¡¡exercise¡¡to¡¡help¡¡you¡¡apply¡¡what¡¡you¡¡learned¡¡in¡¡this¡¡chapter¡£¡¡



¡¡¡¡¡¡¡¡¡¡1¡£¡¡¡¡Write¡¡a¡¡general¡¡architecture¡¡that¡¡generates¡¡a¡¡series¡¡using¡¡multiple¡¡threads¡£¡¡For¡¡the¡¡first¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡series£»¡¡generate¡¡the¡¡square¡¡of¡¡all¡¡numbers¡¡between¡¡1¡¡and¡¡100¡£¡¡For¡¡the¡¡second¡¡series£»¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡generate¡¡the¡¡Fibonacci¡¡series¡£¡¡That¡¡is£»¡¡after¡¡two¡¡starting¡¡values£»¡¡each¡¡number¡¡is¡¡the¡¡sum¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡of¡¡the¡¡two¡¡preceding¡¡numbers¡£¡¡The¡¡first¡¡Fibonacci¡¡numbers¡¡are¡¡0£»¡¡1£»¡¡1£»¡¡2£»¡¡3£»¡¡5£»¡¡8£»¡¡13£»¡¡21£»¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡34£»¡¡55£»¡¡89£»¡¡144£»¡¡233£»¡¡377£»¡¡610£»¡¡987£»¡¡1597£»¡¡2584£»¡¡4181£»¡¡6765£»¡¡10946£»¡¡17711£»¡¡28657£»¡¡46368£»¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡75025£»¡¡121393£»¡¡196418£»¡¡and¡¡317811¡£¡¡Outline¡¡the¡¡limits¡¡of¡¡multithreading¡¡when¡¡generating¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡a¡¡series¡£¡¡


¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­Page¡¡392¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­


¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­Page¡¡393¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­

C¡¡¡¡H¡¡¡¡A¡¡¡¡P¡¡¡¡T¡¡¡¡E¡¡¡¡R¡¡¡¡¡¡¡¡¡¡1¡¡¡¡4¡¡



¡¡¡ö¡¡¡ö¡¡¡ö¡¡



Learning¡¡About¡¡Relational¡¡¡¡

¡¡Database¡¡Data¡¡



Literally¡¡hundreds¡¡of¡¡techniques£»¡¡tips£»¡¡tricks£»¡¡and¡¡libraries¡¡are¡¡associated¡¡with¡¡relational¡¡data

bases¡£¡¡Covering¡¡relational¡¡databases¡¡would¡¡take¡¡an¡¡entire¡¡a¡¡book£»¡¡and¡¡in¡¡fact£»¡¡many¡¡books¡¡are¡¡¡¡

devoted¡¡to¡¡that¡¡subject¡£¡¡This¡¡chapter¡¡will¡¡cover¡¡the¡¡basics¡¡and¡¡give¡¡you¡¡enough¡¡knowledge¡¡to¡¡¡¡

read¡¡and¡¡write¡¡to¡¡a¡¡database¡£¡¡

¡¡¡¡¡¡¡¡¡¡The¡¡focus¡¡of¡¡this¡¡chapter¡¡is¡¡to¡¡demonstrate¡¡accessing¡¡relational¡¡databases¡¡with¡¡ADO¡¡¡¡

and¡¡the¡¡Visual¡¡Studio¡¡Dataset¡¡Designer¡£¡¡Since¡¡we¡¯ll¡¡need¡¡a¡¡database¡¡to¡¡work¡¡with£»¡¡you¡¯ll¡¡also¡¡¡¡

learn¡¡how¡¡to¡¡create¡¡a¡¡database¡¡with¡¡Visual¡¡Basic¡¡Express¡£¡¡¡¡

¡¡¡¡¡¡¡¡¡¡A¡¡relational¡¡database¡¡stores¡¡data£»¡¡such¡¡as¡¡the¡¡lottery¡¡numbers¡¡in¡¡Chapter¡¡10¡¯s¡¡example¡£¡¡¡¡

Building¡¡on¡¡that¡¡lottery¡­prediction¡¡example£»¡¡in¡¡this¡¡chapter£»¡¡you¡¯ll¡¡see¡¡how¡¡to¡¡create¡¡a¡¡database¡¡¡¡

application¡¡that¡¡reads¡¡and¡¡writes¡¡the¡¡lottery¡¡numbers£»¡¡and¡¡associates¡¡winners¡¡with¡¡a¡¡particular¡¡¡¡

lottery¡¡drawing¡£¡¡



Understanding¡¡Relational¡¡Databases¡¡



As¡¡a¡¡beginner¡¡developer£»¡¡one¡¡of¡¡your¡¡greatest¡¡challenges¡¡will¡¡be¡¡how¡¡to¡¡manage¡¡relational¡¡database¡¡¡¡

data¡£¡¡A¡¡relational¡¡database¡¡is¡¡an¡¡old¡¡piece¡¡of¡¡technology¡£¡¡The¡¡relational¡¡model¡¡on¡¡which¡¡it¡¡is¡¡based¡¡¡¡

was¡¡written¡¡in¡¡about¡¡1969¡¡£¨according¡¡to¡¡the¡¡relational¡¡model¡¡entry¡¡at¡¡http£º//en¡£wikipedia¡£org/¡¡

wiki/Relational_model£©¡£¡¡A¡¡relational¡¡database¡¡is¡¡defined¡¡as¡¡follows¡¡£¨http£º//en¡£wikipedia¡£org/¡¡

wiki/Relational_database£©£º¡¡



¡¡¡¡¡¡¡¡¡¡Strictly£»¡¡¡¡a¡¡¡¡relational¡¡¡¡database¡¡¡¡is¡¡¡¡merely¡¡¡¡a¡¡¡¡collection¡¡¡¡of¡¡¡¡relations¡¡¡¡£¨frequently¡¡¡¡called¡¡

¡¡¡¡¡¡¡¡¡¡tables£©¡£¡¡Other¡¡items¡¡are¡¡frequently¡¡considered¡¡part¡¡of¡¡the¡¡database£»¡¡as¡¡they¡¡help¡¡to¡¡organize¡¡

¡¡¡¡¡¡¡¡¡¡and¡¡¡¡structure¡¡¡¡the¡¡¡¡data£»¡¡¡¡in¡¡¡¡addition¡¡¡¡to¡¡¡¡forcing¡¡¡¡the¡¡¡¡database¡¡¡¡to¡¡¡¡conform¡¡¡¡to¡¡¡¡a¡¡¡¡set¡¡¡¡of¡¡

¡¡¡¡¡¡¡¡¡¡requirements¡£¡¡



Relational¡¡Database¡¡Tables¡¡



A¡¡relational¡¡database¡¡is¡¡a¡¡collection¡¡of¡¡tables¡£¡¡When¡¡you¡¡were¡¡reading¡¡and¡¡writing¡¡a¡¡file¡¡in¡¡¡¡

Chapter¡¡10¡¯s¡¡example£»¡¡you¡¡were¡¡actually¡¡reading¡¡and¡¡writing¡¡a¡¡table¡¡of¡¡lottery¡¡numbers£»¡¡which¡¡¡¡

looked¡¡something¡¡like¡¡this£º¡¡



¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡371¡¡


¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­Page¡¡394¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­

372¡¡¡¡¡¡¡¡¡¡¡¡¡¡CH¡¡AP¡¡T¡¡E¡¡R¡¡¡¡¡¡1¡¡4¡¡¡¡¡¡¡ö¡¡¡¡¡¡¡¡L¡¡E¡¡A¡¡R¡¡N¡¡I¡¡N¡¡G¡¡¡¡¡¡A¡¡B¡¡OU¡¡T¡¡¡¡¡¡R¡¡E¡¡L¡¡A¡¡TI¡¡O¡¡N¡¡AL¡¡¡¡¡¡DA¡¡TA¡¡B¡¡AS¡¡E¡¡¡¡¡¡D¡¡AT¡¡A¡¡



¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡2000¡£05¡£31¡¡5¡¡6¡¡13¡¡23¡¡25¡¡37¡¡43¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡2000¡£06¡£03¡¡7¡¡10¡¡11¡¡18¡¡32¡¡41¡¡5¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡2000¡£06¡£07¡¡15¡¡23¡¡24¡¡28¡¡38¡¡39¡¡45¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡2000¡£06¡£10¡¡1¡¡3¡¡12¡¡23¡¡29¡¡33¡¡27¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡2000¡£06¡£14¡¡2¡¡4¡¡13¡¡19¡¡39¡¡45¡¡26¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡2000¡£06¡£17¡¡3¡¡8¡¡17¡¡19¡¡21¡¡25¡¡35¡¡



¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡The¡¡data¡¡is¡¡arranged¡¡as¡¡a¡¡table£»¡¡and¡¡thus¡¡could¡¡be¡¡easily¡¡converted¡¡into¡¡a¡¡relational¡¡data

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡base¡¡table¡£¡¡In¡¡relational¡¡database¡­speak£»¡¡each¡¡row¡¡in¡¡the¡¡file¡¡corresponds¡¡to¡¡a¡¡row¡¡of¡¡data¡£¡¡But¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡to¡¡create¡¡a¡¡row¡¡of¡¡data£»¡¡you¡¡need¡¡fields£»¡¡each¡¡of¡¡which¡¡is¡¡also¡¡in¡¡a¡¡column¡£¡¡A¡¡relational¡¡database¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡table¡¡is¡¡a¡¡grid¡¡of¡¡rows¡¡and¡¡columns¡£¡¡When¡¡working¡¡with¡¡a¡¡relational¡¡database£»¡¡you¡¡don¡¯t¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡manipulate¡¡columns£»¡¡you¡¡manipulate¡¡individual¡¡rows¡£¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡What¡¡distinguishes¡¡a¡¡relational¡¡database¡¡is¡¡that¡¡you¡¡can¡¡bine¡¡tables¡¡and¡¡create¡¡more¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡plicated¡¡data¡¡structures¡£¡¡It¡¡is¡¡the¡¡relationships¡¡£¨called¡¡relations£©¡¡between¡¡pieces¡¡of¡¡data¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡that¡¡make¡¡a¡¡relational¡¡database¡¡so¡¡powerful¡£¡¡For¡¡the¡¡lottery¡¡data£»¡¡a¡¡relation¡¡could¡¡be¡¡who¡¡won¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡the¡¡jackpot¡¡on¡¡the¡¡draw¡¡dates¡£¡¡Modifying¡¡the¡¡table¡¡to¡¡include¡¡the¡¡person¡¡who¡¡won¡¡would¡¡look¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡this£º¡¡



¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡2000¡£05¡£31¡¡nobody¡¡5¡¡6¡¡13¡¡23¡¡25¡¡37¡¡43¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡2000¡£06¡£03¡¡nobody¡¡7¡¡10¡¡11¡¡18¡¡32¡¡41¡¡5¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡2000¡£06¡£07¡¡nobody¡¡15¡¡23¡¡24¡¡28¡¡38¡¡39¡¡45¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡2000¡£06¡£10¡¡jack¡¡1¡¡3¡¡12¡¡23¡¡29¡¡33¡¡27¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡2000¡£06¡£14¡¡nobody¡¡2¡¡4¡¡13¡¡19¡¡39¡¡45¡¡26¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡2000¡£06¡£17¡¡nobody¡¡3¡¡8¡¡17¡¡19¡¡21¡¡25¡¡35¡¡



¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡For¡¡the¡¡most¡¡part£»¡¡no¡¡one¡¡won¡¡the¡¡jackpot¡£¡¡But¡¡on¡¡June¡¡10£»¡¡2000¡¡£¨2000¡£06¡£10£©£»¡¡a¡¡person¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡named¡¡Jack¡¡won¡¡the¡¡jackpot¡£¡¡You¡¡might¡¡know¡¡a¡¡Jack¡£¡¡I¡¡might¡¡know¡¡a¡¡Jack¡£¡¡But¡¡would¡¡he¡¡be¡¡the¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡same¡¡Jack£¿¡¡Probably¡¡not¡£¡¡So¡¡to¡¡distinguish¡¡winner¡¡Jack¡¡from¡¡another¡¡Jack£»¡¡you¡¡would¡¡need¡¡his¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡full¡¡name£»¡¡address£»¡¡and¡¡other¡¡details¡£¡¡But¡¡where¡¡do¡¡you¡¡put¡¡this¡¡extra¡¡information£¿¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Do¡¡you¡¡put¡¡the¡¡information¡¡about¡¡Jack¡¡into¡¡the¡¡lottery¡¡data¡¡table£¿¡¡Or¡¡do¡¡you¡¡create¡¡another¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡table£¿¡¡The¡¡answer¡¡is¡¡that¡¡you¡¡create¡¡another¡¡table¡£¡¡But¡¡since¡¡you¡¡are¡¡working¡¡with¡¡files£»¡¡it¡¡will¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡be¡¡a¡¡file£»¡¡not¡¡a¡¡table¡£¡¡The¡¡file¡¡will¡¡be¡¡called¡¡jack¡£txt¡¡because¡¡the¡¡winner¡¡of¡¡the¡¡lottery¡¡jackpot¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡was¡¡Jack¡£¡¡The¡¡jack¡£txt¡¡file¡¡could¡¡contain¡¡the¡¡following¡¡information¡£¡¡



¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Jack¡¡Smith¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Address¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡City¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Country¡¡



¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡The¡¡information¡¡in¡¡jack¡£txt¡¡and¡¡the¡¡information¡¡in¡¡the¡¡lottery¡¡data¡¡file¡¡have¡¡a¡¡relation¡£¡¡The¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡relation¡¡is¡¡the¡¡winner¡¡of¡¡the¡¡jackpot¡£¡¡This¡¡is¡¡what¡¡a¡¡relational¡¡database¡¡is¡¡all¡¡about¡£¡¡The¡¡reason¡¡you¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡use¡¡a¡¡relational¡¡database¡¡and¡¡not¡¡files¡¡that¡¡cross¡­reference¡¡each¡¡other¡¡is¡¡because¡¡a¡¡relational¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡database¡¡is¡¡extremely¡¡efficient¡¡at¡¡managing¡¡tables¡¡and¡¡relations¡£¡¡The¡¡techniques¡¡demonstrated¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡in¡¡Chapter¡¡10¡¡are¡¡nowhere¡¡near¡¡as¡¡efficient¡¡and¡¡effective¡¡as¡¡using¡¡a¡¡relational¡¡database¡£¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡Relational¡¡databases¡¡are¡¡quite¡¡capable¡¡of¡¡handling¡¡terabytes¡¡of¡¡data¡£¡¡Additionally£»¡¡relational¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡databases¡¡are¡¡capable¡¡of¡¡building¡¡efficient¡¡relations¡¡that¡¡span¡¡terabytes¡¡of¡¡data¡£¡¡


¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­Page¡¡395¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­¡­

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡C¡¡HA¡¡P¡¡TE¡¡R¡¡¡¡¡¡1¡¡4¡¡¡¡¡¡¡ö¡¡¡¡¡¡¡¡L¡¡E¡¡AR¡¡N¡¡I¡¡N¡¡G¡¡¡¡¡¡AB¡¡O¡¡U¡¡T¡¡¡¡R¡¡E¡¡L¡¡AT¡¡IO¡¡N¡¡A¡¡L¡¡¡¡¡¡D¡¡AT¡¡AB¡¡A¡¡SE¡¡¡¡¡¡D¡¡A¡¡TA¡¡373¡¡



Database¡¡Relations¡¡



Relations¡¡are¡¡very¡¡powerful£»¡¡but¡¡they¡¡can¡¡also¡¡make¡¡things¡¡extremely¡¡plicated¡£¡¡When¡¡you¡¡¡¡

split¡¡tables¡¡and¡¡create¡¡relations¡¡between¡¡the¡¡tables£»¡¡you¡¡are¡¡normalizing¡¡the¡¡data¡£¡¡Database¡¡¡¡

normalization¡¡is¡¡defined¡¡as¡¡follows¡¡£¨http£º//en¡£wikipedia¡£org/wiki/Database_normalization£©£º¡¡



¡¡¡¡¡¡¡¡¡¡Database¡¡¡¡normalization¡¡¡¡is¡¡¡¡a¡¡¡¡technique¡¡¡¡for¡¡¡¡designing¡¡¡¡relational¡¡¡¡database¡¡¡¡tables¡¡¡¡to¡¡

¡¡¡¡¡¡¡¡¡¡minimize¡¡¡¡duplication¡¡¡¡of¡¡¡¡information¡¡¡¡and£»¡¡¡¡in¡¡¡¡so¡¡¡¡doing£»¡¡¡¡to¡¡¡¡safeguard¡¡¡¡the¡¡¡¡database¡¡

¡¡¡¡¡¡¡¡¡¡against¡¡¡¡certain¡¡¡¡types¡¡¡¡of¡¡¡¡logical¡¡¡¡or¡¡¡¡structural¡¡¡¡problems£»¡¡¡¡namely¡¡¡¡data¡¡¡¡anomalies¡£¡¡¡¡For¡¡

¡¡¡¡¡¡¡¡¡¡example£»¡¡when¡¡multiple¡¡instances¡¡of¡¡a¡¡given¡¡piece¡¡of¡¡information¡¡occur¡¡in¡¡a¡¡table£»¡¡the¡¡

¡¡¡¡¡¡¡¡¡¡possibility¡¡exists¡¡that¡¡these¡¡instances¡¡will¡¡¡¡not¡¡be¡¡kept¡¡consistent¡¡when¡¡the¡¡data¡¡within¡¡

¡¡¡¡¡¡¡¡¡¡¡¡the¡¡¡¡table¡¡¡¡is¡¡¡¡updated£»¡¡¡¡leading¡¡¡¡to¡¡¡¡a¡¡¡¡loss¡¡¡¡of¡¡¡¡data¡¡¡¡integrity¡£¡¡¡¡A¡¡¡¡table¡¡¡¡that¡¡¡¡is¡¡¡¡sufficiently¡¡

¡¡¡¡¡¡¡¡¡¡normalized¡¡is¡¡less¡¡vulnerable¡¡to¡¡problems¡¡of¡¡this¡¡kind£»¡¡because¡¡its¡¡structure¡¡reflects¡¡the¡¡

¡¡¡¡¡¡¡¡¡¡basic¡¡¡¡assumptions¡¡¡¡for¡¡¡¡when¡¡¡¡multiple¡¡¡¡instances¡¡¡¡of¡¡¡¡the¡¡¡¡same¡¡¡¡information¡¡¡¡should¡¡¡¡be¡¡

¡¡¡¡¡¡¡¡¡¡¡¡represented¡¡by¡¡a¡¡single¡¡instance¡¡only¡£¡¡



¡¡¡¡¡¡¡¡¡¡For¡¡example£»¡¡the¡¡data¡¡on¡¡the¡¡winner¡¡and¡¡the¡¡data¡¡on¡¡the¡¡lottery¡¡ticket¡¡are¡¡kept¡¡in¡¡separate¡¡¡¡

tables£»¡¡making¡¡the¡¡overall¡¡data¡¡structure¡¡more¡¡efficient¡¡from¡¡a¡¡maintenance¡¡and¡¡performance¡¡¡¡

point¡¡of¡¡view¡£¡¡

¡¡¡¡¡¡¡¡¡¡Creating¡¡relations¡¡between¡¡tables¡¡is¡¡a¡¡form¡¡of¡¡referencing£»¡¡where¡¡one¡¡table¡¡says¡¡informa

tion¡¡here¡¡references¡¡information¡¡in¡¡another¡¡table¡£¡¡The¡¡referencing¡¡is¡¡carried¡¡out¡¡using¡¡columns¡¡¡¡

of¡¡one¡¡table¡¡that¡¡are¡¡cross¡­referenced¡¡with¡¡columns¡¡of¡¡another¡¡table¡£¡¡

¡¡¡¡¡¡¡¡¡¡The¡¡lottery¡¡ticket¡¡example¡¡is¡¡interesting¡¡because¡¡of¡¡the¡¡relations¡¡between¡¡the¡¡lottery¡¡draws¡¡¡¡

and¡¡the¡¡winners£»¡¡which¡¡could¡¡be¡¡of¡¡two¡¡types£º¡¡



¡¡¡¡¡¡¡¡¡¡o¡¡¡¡One¡¡draw¡¡to¡¡many¡¡winners£º¡¡When¡¡a¡¡lottery¡¡ticket¡¡is¡¡drawn£»¡¡there¡¡can¡¡be¡¡many¡¡winners¡£¡¡



¡¡¡¡¡¡¡¡¡¡o¡¡¡¡One¡¡winner¡¡to¡¡many¡¡draws£º¡¡Even¡¡though¡¡it¡¡is¡¡improbable£»¡¡one¡¡winner¡¡could¡¡win¡¡¡¡

¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡¡multiple¡¡draws¡£¡¡



¡¡¡¡¡¡¡¡¡¡In¡¡the¡¡file¡¡example£»¡¡you¡¡saw¡¡the¡¡one¡­winner¡­to¡­many¡­draws¡¡relation¡£¡¡You¡¡probably¡¡did¡¡¡¡

not¡¡think¡¡it¡¡was¡¡that¡¡type¡¡of¡¡relation£»¡¡and¡¡more¡¡likely¡¡thought¡¡it¡¡was¡¡a¡¡one¡­draw¡­to¡­one¡­winner¡¡¡¡

relation¡£¡¡But¡¡consider¡¡the¡¡following¡¡text¡¡file£»¡¡where¡¡jack¡¡is¡¡referenced¡¡twice¡£¡¡



2000¡£05¡£31¡¡nobody¡¡5¡¡6¡¡13¡¡23¡¡25¡¡37¡¡43¡¡

2000¡£06¡£03¡¡jack¡¡7¡¡10¡¡11¡¡18¡¡32¡¡41¡¡5¡¡

2000¡£06¡£07¡¡nobody¡¡15¡¡23¡¡24¡¡28¡¡38¡¡39¡¡45¡¡

2000¡£06¡£10¡¡jack¡¡1¡¡3¡¡12¡¡23¡¡29¡¡33¡¡27¡¡

2000¡£06¡£14¡¡nobody¡¡2¡¡4¡¡13¡¡19¡¡39¡¡45¡¡26¡¡

2000¡£06¡£17¡¡nobody¡¡3¡¡8¡¡17¡¡19¡¡21¡¡25¡¡35¡¡



¡¡¡¡¡¡¡¡¡¡The¡¡table¡¡of¡¡draws¡¡has¡¡the¡¡ability¡¡to¡¡reference¡¡the¡¡same¡¡winner¡¡twice£»¡¡which¡¡means¡¡the¡¡¡¡

relation¡¡of¡¡one¡¡winner¡¡to¡¡many¡¡draws¡¡is¡¡possible¡£¡¡To¡¡add¡¡the¡¡relation¡¡of¡¡one¡¡draw¡¡to¡¡many¡¡¡¡

winners£»¡¡the¡¡table¡¡would¡¡need¡¡to¡¡be¡¡modified¡¡like¡¡this£º¡¡



2000¡£05¡£31¡¡nobody¡¡5¡¡6¡¡13¡¡23¡¡25¡¡37¡¡43¡¡

2000¡£06¡£03¡¡jack¡¡jill¡¡7¡¡10¡¡11¡¡18¡¡32¡¡41¡¡5¡¡

2000¡£06¡£
·µ»ØĿ¼ ÉÏÒ»Ò³ ÏÂÒ»Ò³ »Øµ½¶¥²¿ ÔÞ£¨0£© ²È£¨0£©
¿ì½Ý²Ù×÷: °´¼üÅÌÉÏ·½Ïò¼ü ¡û »ò ¡ú ¿É¿ìËÙÉÏÏ·­Ò³ °´¼üÅÌÉ쵀 Enter ¼ü¿É»Øµ½±¾ÊéĿ¼ҳ °´¼üÅÌÉÏ·½Ïò¼ü ¡ü ¿É»Øµ½±¾Ò³¶¥²¿!
ÎÂÜ°Ìáʾ£º ο´Ð¡ËµµÄͬʱ·¢±íÆÀÂÛ£¬Ëµ³ö×Ô¼ºµÄ¿´·¨ºÍÆäËüС»ï°éÃÇ·ÖÏíÒ²²»´íŶ£¡·¢±íÊéÆÀ»¹¿ÉÒÔ»ñµÃ»ý·ÖºÍ¾­Ñé½±Àø£¬ÈÏÕæдԭ´´ÊéÆÀ ±»²ÉÄÉΪ¾«ÆÀ¿ÉÒÔ»ñµÃ´óÁ¿½ð±Ò¡¢»ý·ÖºÍ¾­Ñé½±ÀøŶ£¡