版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
根據(jù)領(lǐng)域模型分析數(shù)據(jù)模型MappingfromtheClassModeltotheRelationalModel從類模型映射到關(guān)系模型Havingdescribedthetwodomainsofinterestandthenotationtobeused,wecannowturnourattentionastohowtomaportranslatefromonedomaintotheother.Thestrategyandsequencepresentedbelowismeanttobesuggestiveratherthanproscriptive-adaptthestepsandprocedurestoyourpersonalrequirementsandenvironment.在需要對(duì)兩個(gè)領(lǐng)域建模時(shí),現(xiàn)在我們可以關(guān)注如何從一個(gè)領(lǐng)域映射或轉(zhuǎn)換映射到另一個(gè)領(lǐng)域。以下的策略和方法,就是要啟發(fā),而不是強(qiáng)制的步驟和程序應(yīng)用到您的個(gè)人需求和環(huán)境。ModelClassesFirstlywewillassumeweareengineeringanewrelationaldatabaseschemafromaclassmodelwehavecreated.Thisisobviouslytheeasiestdirectionasthemodelsremainunderourcontrolandwecanoptimisetherelationaldatamodeltotheclassmodel.Intherealworlditmaybethatyouneedtolayeraclassmodelontopofalegacydatamodel-amoredifficultsituationandonethatpresentsitsownchallenges.Forthecurrentdiscussionwillfocusonthefirstsituation.Ataminimum,yourclassmodelshouldcaptureassociations,inheritanceandaggregationbetweenelements.1.類建模首先,我們將假設(shè)從已創(chuàng)建的類模型生成一個(gè)新的關(guān)系數(shù)據(jù)庫(kù)模型。這顯然是最容易的,可控制的,可以通過關(guān)系數(shù)據(jù)庫(kù)模型反向優(yōu)化類模型。在現(xiàn)實(shí)世界中可能你需要將類模型作為數(shù)據(jù)模型的上層,這是更困難的情況,也對(duì)自己提出了一個(gè)挑戰(zhàn)。對(duì)于目前的討論將集中在第一種情況。至少,你的類模型應(yīng)捕元素之間的聯(lián)系、繼承和聚集關(guān)系。IdentifypersistentobjectsHavingbuiltourclassmodelweneedtoseparateitintothoseelementsthatrequirepersistenceandthosethatdonot.Forexample,ifwehavedesignedourapplicationusingtheModel-View-Controllerdesignpattern,thenonlyclassesinthemodelsectionwouldrequirepersistentstate.確認(rèn)持久對(duì)象已建成的類模型,我們需要區(qū)分這些元素,那些需要持久化和那些不是。例如,如果我們?cè)O(shè)計(jì)我們的應(yīng)用程序使用Model-View-Controller設(shè)計(jì)模式,那么只有MODEL模型部分需要持久化狀態(tài)。
AssumeeachpersistentclassmapstoonerelationaltableAfairlybigassumption,butonethatworksinmostcases(leavingtheinheritanceissueasideforthemoment).Inthesimplestmodelaclassfromthelogicalmodelmapstoarelationaltable,eitherinwholeorinpart.Thelogicalextensionofthisisthatasingleobject(orinstanceofaclass)mapstoasingletablerow.假設(shè)一個(gè)持久化類映射一個(gè)關(guān)系表大多數(shù)情況下,這都是一個(gè)合理的假設(shè),除去繼承問題以外(暫且不考慮)。在最簡(jiǎn)單的模型中,邏輯模型中的一個(gè)類映射一個(gè)關(guān)系表的全部或一部分。這種邏輯的延伸是一個(gè)單一的對(duì)象(或類的實(shí)例)映射關(guān)系表中的一行數(shù)據(jù)。選擇一個(gè)繼承策略從面向?qū)ο竽P娃D(zhuǎn)化成關(guān)系模型的過程中,繼承可能是最有問題的關(guān)系和邏輯結(jié)構(gòu)。關(guān)系空間本質(zhì)上是平面結(jié)構(gòu),每一個(gè)實(shí)體自我實(shí)現(xiàn),而對(duì)象模型通常為多層次擴(kuò)展的類結(jié)構(gòu)。多層級(jí)類模型可能有多層次繼承的屬性和行為,最終結(jié)果,運(yùn)行時(shí)功能齊全的對(duì)象。有三種基本方式對(duì)繼承關(guān)系轉(zhuǎn)換成關(guān)系模型:Eachclasshierarchyhasasinglecorrespondingtablethatcontainsalltheinheritedattributesforallelements-thistableisthereforetheunionofeveryclassinthehierarchy.Forexample,Person,Parent,ChildandGrandchildmayallformasingleclasshierarchy,andelementsfromeachwillappearinthesamerelationaltable;類層次結(jié)構(gòu)有只有一個(gè)相應(yīng)的表,包含所有元素的所有繼承的屬性。因此這個(gè)表是類層次結(jié)構(gòu)中所有類的聯(lián)合。例如,人,父母,子女和孫子都可能形成一個(gè)單一的類層次結(jié)構(gòu),單所有元素將出現(xiàn)在同一個(gè)關(guān)系表中;Eachclassinthehierarchyhasacorrespondingtableofonlytheattributesaccessiblebythatclass(includinginheritedattributes).Forexample,ifChildisinheritedfromPersononly,thenthetablewillcontainelementsofPersonandChildonly;層次結(jié)構(gòu)中每個(gè)類都有一個(gè)相應(yīng)的表。表中包含類所要訪問的所有屬性(包括繼承的屬性)。例如,如果孩子繼承人,則該表將包含個(gè)人與兒童所有的元素;Eachgenerationintheclasshierarchyhasatablecontainingonlythatgeneration'sactualattributes.Forexample,ChildwillmaptoasingletablewithChildattributesonly在類結(jié)構(gòu)中,每一層有一個(gè)表,包含這一層的實(shí)際屬性。例如,Child將映射大偶一個(gè)簡(jiǎn)單表,只包含漢字的屬性。Therearecasestobemadeforeachapproach,butIwouldsuggestthesimplest,easiesttomaintainandlesserrorproneisthethirdoption.Thefirstoptionprovidesthebestperformanceatrun-timeandthesecondisacompromisebetweenthefirstandlast.Thefirstoptionflattensthehierarchyandlocatesallattributesinonetable-convenientforupdatesandretrievalsofanyclassinthehierarchy,butdifficulttoauthenticateandmaintain.Businessrulesassociatedwitharowarehardtoimplement,aseachrowmaybeinstantiatedasanyobjectinthehierarchy.Thedependenciesbetweencolumnscanbecomequitecomplicated.Inaddition,anupdatetoanyclassinthehierarchywillpotentiallyimpacteveryotherclassinthehierarchy,ascolumnsareadded,deletedormodifiedfromthetable.以上的方法都有成功的案例,但我認(rèn)為最簡(jiǎn)單,最容易維護(hù)和減少出錯(cuò)是第三個(gè)選擇。第一個(gè)選項(xiàng)提供在運(yùn)行時(shí)的最佳性能,第二個(gè)是第一個(gè)和最后一個(gè)方法的妥協(xié)。第一個(gè)選項(xiàng)把層次結(jié)構(gòu)變成了平面結(jié)構(gòu),定義所有屬性在一個(gè)表中-便于更新和檢索層次結(jié)構(gòu)中任何類,但難以驗(yàn)證和維護(hù)。與行相關(guān)的業(yè)務(wù)規(guī)則難以實(shí)現(xiàn),因?yàn)槊啃锌梢宰鳛閷哟谓Y(jié)構(gòu)中任何對(duì)象實(shí)例化。列間的依賴關(guān)系可能會(huì)變得非常復(fù)雜。此外,在更新層次結(jié)構(gòu)中的任何類將有可能影響層次結(jié)構(gòu)中的所有其他類,例如對(duì)表進(jìn)行添加,刪除或修改列。Thesecondoptionisacompromisethatprovidesbetterencapsulationandeliminatesemptycolumns.However,achangetoaparentclassmayneedtobereplicatedinmanychildtables.Evenworse,theparentaldataintwoormorechildclassesmayberedundantlystoredinmanytables;ifaparent'sattributesaremodified,thereisconsiderableeffortinlocatingdependentchildrenandupdatingtheaffectedrows.第二種選擇是一個(gè)妥協(xié)方案,提供更好的封裝和消除空列。但是,對(duì)父類的改變可能需要重復(fù)對(duì)多個(gè)子表的進(jìn)行修改。更糟的是,在兩個(gè)或更多孩子的父類數(shù)據(jù)可能冗余存儲(chǔ)在多個(gè)表中,如果一個(gè)父類的屬性被修改,那么定位產(chǎn)生影響的行數(shù)據(jù)的子表,并進(jìn)行修改,將需要非常大的工作。Thethirdoptionmoreaccuratelyreflectstheobjectmodel,witheachclassinthehierarchymappedtoitsownindependenttable.Updatestoparentsorchildrenarelocalisedinthecorrectspace.Maintenanceisalsorelativelyeasier,asanymodificationofanentityisrestrictedtoasinglerelationaltablealso.Thedownsideistheneedtore-constructthehierarchyatrun-timetoaccuratelyre-createachildclass'sstate.AChildobjectmayrequireaPersonmembervariabletorepresenttheirmodelparentage.Asbothrequireloading,twodatabasecallsarerequiredtoinitialiseoneobject.Asthehierarchydeepens,withmoregenerations,thenumberofdatabasecallsrequiredtoinitialiseorupdateasingleobjectincreases.第三個(gè)方案更準(zhǔn)確地反映了對(duì)象模型,在層次結(jié)構(gòu)中每個(gè)類映射到它自己獨(dú)立的表中。父類和子類的更新定位于正確的空間。維護(hù)也相對(duì)容易,任何一個(gè)實(shí)體的改變也能限制到一個(gè)單一的關(guān)系表中。不利的一面是,在運(yùn)行時(shí)需要重新構(gòu)造層次結(jié)構(gòu),以準(zhǔn)確的重建子類的狀態(tài)。子對(duì)象可能需要一個(gè)角色成員變量來表示他們的父子模型關(guān)系。初始化一個(gè)對(duì)象時(shí)需要兩個(gè)表同時(shí)加載,兩次數(shù)據(jù)庫(kù)調(diào)用。對(duì)于多層結(jié)構(gòu),初始化或更新一個(gè)簡(jiǎn)單對(duì)象時(shí),數(shù)據(jù)庫(kù)調(diào)用的數(shù)量增加。Itisimportanttounderstandtheissuesthatarisewhenyoumapinheritanceontoarelationalmodel,soyoucandecidewhichsolutionisrightforyou.重要的是要了解把繼承關(guān)系映射到關(guān)系模型可能出現(xiàn)的問題,以便決定哪個(gè)解決方案最適合您。ForeachclassaddauniqueobjectidentifierInboththerelationalandtheobjectworld,thereistheneedtouniquelyidentifyanobjectorentity.Intheobjectmodel,non-persistentobjectsatrun-timearetypicallyidentifiedbydirectreferenceorbyapointertotheobject.Onceanobjectiscreated,wecanrefertoitbyitsrun-timeidentity.However,ifwewriteoutanobjecttostorage,theproblemishowtoretrievetheexactsameinstanceondemand.ThemostconvenientmethodistodefineanOID(objectidentifier)thatisguaranteedtobeuniqueinthenamespaceofinterest.Thismaybeattheclass,packageorsystemlevel,dependingonactualrequirements.為每個(gè)類添加唯一對(duì)象標(biāo)識(shí)E3在關(guān)系和對(duì)象世界中,都需要唯一標(biāo)識(shí)一個(gè)對(duì)象或?qū)嶓w。在對(duì)象模型中,在運(yùn)行時(shí),非持久性對(duì)象通常由直接引用或者指針進(jìn)行標(biāo)識(shí)。一旦對(duì)象被創(chuàng)建,我們能夠參考它通過它的運(yùn)行時(shí)標(biāo)識(shí)。但是,如果我們把對(duì)象輸出到存儲(chǔ)介質(zhì)中,問題是當(dāng)需要時(shí),如何準(zhǔn)確的重新獲取相同的實(shí)例。最簡(jiǎn)便的方法是定義一個(gè)OID(對(duì)象標(biāo)識(shí)符),是保證在關(guān)注的命名空間唯一性。也可能是在類,包或系統(tǒng)級(jí)中根據(jù)實(shí)際要求進(jìn)行定義。AnexampleofasystemlevelOIDmightbeaGUID(globallyuniqueidentifier)createdwithMicrosoft's'guidgen'tool;eg.{A1A68E8E-CD92-420b-BDA7-118F847B71EB}.AclasslevelOIDmightbeimplementedusingasimplenumeric(eg.32bitcounter).Ifanobjectholdsreferencestootherobjects,itmaydosousingtheirOID.Acompleterun-timescenariocanthenbeloadedfromstoragereasonablyefficiently.AnimportantpointabouttheOIDvaluesaboveisthattheyhavenoinherentmeaningbeyondsimpleidentity.Theyareonlylogicalpointersandnothingmore.Intherelationalmodel,thesituationisoftenquitedifferent.一個(gè)系統(tǒng)級(jí)的OID可能是一個(gè)微軟的'guidgen'工具創(chuàng)建的GUID(全局唯一標(biāo)識(shí)符);例如。{A1A68E8E-CD92-420b-BDA7-118F847B71EB}。類級(jí)別的OID可能是通過使用一個(gè)簡(jiǎn)單的數(shù)字(如32位計(jì)數(shù)器)。如果一個(gè)對(duì)象包含其他對(duì)象的引用,它可以使用他們的OID。在運(yùn)行時(shí),一個(gè)完整結(jié)構(gòu)可以從存儲(chǔ)介質(zhì)中被合理有效載入。一個(gè)關(guān)于上述OID值重要的一點(diǎn)是,他們沒有超越作為簡(jiǎn)單標(biāo)識(shí)以外的含義。他們是唯一合乎邏輯的指針而已。在關(guān)系模型中,情況往往大不相同。Identityintherelationalmodelisnormallyimplementedwithaprimarykey.Aprimarykeyisasetofcolumnsinatablethattogetheruniquelyidentifyarow.Forexample,nameandaddressmayuniquelyidentifya'Customer'.Whereotherentities,suchasa'Salesperson',referencethe'Customer',theyimplementaforeignkeybasedonthe'Customer'primarykey.Theproblemwiththisapproachforourpurposesistheimpactofhavingbusinessinformation(suchascustomernameandaddress)embeddedintheidentifier.Imaginethreeorfourtablesallhaveforeignkeysbasedonthecustomerprimarykey,andasystemchangerequiresthecustomerprimarykeytochange(forexampletoinclude'customertype').Theworkrequiredtomodifyboththe'customer'tableandtheentitiesrelatedbyforeignkeyisquitelarge.在關(guān)系模型中的標(biāo)識(shí)通常作為一個(gè)主鍵。主鍵是一個(gè)表中唯一標(biāo)識(shí)一行的列集合。例如,姓名和地址可以唯一地標(biāo)識(shí)一個(gè)'客戶'。當(dāng)其他實(shí)體,例如,一個(gè)'推銷員',參考'客戶'時(shí),以'客戶'的主鍵為基礎(chǔ),創(chuàng)建一個(gè)外鍵的。用這個(gè)方法的問題是有業(yè)務(wù)信息在標(biāo)識(shí)中(如客戶名稱和地址),可能跟真實(shí)目的產(chǎn)生沖突。想象一下,三個(gè)或四個(gè)表中都有外鍵和基于客戶表的主鍵,如果一個(gè)系統(tǒng)需要改變客戶表的主鍵(例如包括'客戶類型')。修改'客戶'表和通過外鍵關(guān)聯(lián)的實(shí)體的工作是相當(dāng)大的。Ontheotherhand,ifanOIDwasimplementedastheprimarykeyandformedtheforeignkeyforothertables,thescopeofthechangeislimitedtotheprimarytableandtheimpactofthechangeisthereforemuchless.Also,inpractice,aprimarykeybasedonbusinessdatamaybesubjecttochange.Forexampleacustomermaychangeaddressorname.Inthiscasethechangesmustbepropagatedcorrectlytoallotherrelatedentities,nottomentionthedifficultyofchanginginformationthatispartoftheprimarykey.另一方面,如果OID作為主鍵,形成了對(duì)其他表的外鍵,更改范圍僅限于主表,改變的影響要少得多。此外,在實(shí)踐中,基于業(yè)務(wù)數(shù)據(jù)的主鍵可能會(huì)有所變動(dòng)。例如,一個(gè)客戶可能會(huì)變更地址或名稱。在這種情況下,更改必須正確地傳播到所有其他相關(guān)的實(shí)體,改變主鍵的一部分是更困難的。AnOIDalwaysreferstothesameentity-nomatterwhatotherinformationchanges.Intheaboveexample,acustomermaychangenameoraddressandtherelatedtablesrequirenochange.Whenmappingobjectmodelsintorelationaltables,itisoftenmoreconvenienttoimplementabsoluteidentityusingOID'sratherthanbusinessrelatedprimarykeys.TheOIDasprimaryandforeignkeyapproachwillusuallygivebetterloadandupdatetimesforobjectsandminimisemaintenanceeffort.Inpractice,abusinessrelatedprimarykeymightbereplacedwith:Auniquenessconstraintorindexonthecolumnsconcerned;Businessrulesembeddedintheclassbehaviour;Acombinationof1and2.Again,thedecisiontousemeaningfulkeysorOID'swilldependontheexactrequirementsofthesystembeingdeveloped.一個(gè)OID通常指的是同一個(gè)實(shí)體-無論什么其他信息發(fā)生變化。在上述例子中,客戶可能會(huì)改變名稱或地址以及相關(guān)的表不需要改變。當(dāng)映射對(duì)象模型到關(guān)系表中,用OID作為絕對(duì)標(biāo)識(shí)比使用業(yè)務(wù)相關(guān)主鍵實(shí)現(xiàn)往往更方便。OID作為主鍵和外鍵通常會(huì)更好的提供加載和更新對(duì)象的方法,減少維護(hù)工作量。在實(shí)踐中,業(yè)務(wù)相關(guān)的主鍵可能被替換為:?在相關(guān)列上建立唯一性約束和索引?業(yè)務(wù)規(guī)則嵌入到類行為中;?建立1和2的聯(lián)系.同樣,決定使用有意義的鑰匙或OID的依賴于對(duì)系統(tǒng)發(fā)展的真實(shí)需求。MapattributestocolumnsIngeneralwewillmapthesimpledataattributesofaclasstocolumnsintherelationaltable.Forexampleatextandnumberfieldmayrepresentaperson'snameandagerespectively.Thissortofdirectmappingshouldposenoproblem-simplyselecttheappropriatedatatypeinthevendor'srelationalmodeltohostyourclassattribute.Forcomplexattributes(ie.attributesthatareotherobjects)usetheapproachdetailedbelowforhandlingassociationsandaggregation.屬性映射到列字段中。一般我們會(huì)把類中簡(jiǎn)單數(shù)據(jù)屬性映射到關(guān)系表中的列字段中。例如,一個(gè)人的名字和年齡可以分別表示成文本和數(shù)字類型。這種直接映射應(yīng)不成問題-只需在關(guān)系模型中選擇適當(dāng)?shù)臄?shù)據(jù)類型來承載類的屬性。對(duì)于復(fù)雜屬性(即其他對(duì)象的屬性集合)的使用方法在下面處理關(guān)聯(lián)和聚合關(guān)系的部分進(jìn)行詳細(xì)說明。MapassociationstoforeignkeysMorecomplexclassattributes(ie.thosewhichrepresentotherclasses),areusuallymodelledasassociations.Anassociationisastructuralrelationshipbetweenobjects.Forexample,aPersonmayliveatanAddress.WhilethiscouldbemodelledasaPersonhasCity,StreetandZipattributes,inboththeobjectandtherelationalworldweareinclinedtostructurethisinformationasaseparateentity,anAddress.Intheobjectdomainanaddressrepresentsauniquephysicalobject,possiblywithauniqueOID.Intherelational,anaddressmaybearowinanAddresstable,withotherentitieshavingaforeignkeytotheAddressprimarykey.Inbothmodelsthen,thereisthetendencytomovetheaddressinformationintoaseparateentity.Thishelpstoavoidredundantdataandimprovesmaintainability.Soforeachassociationintheclassmodel,considercreatingaforeignkeyfromthechildtotheparenttable.更復(fù)雜的類屬性(即表示其他類集合),通常建模為關(guān)聯(lián)關(guān)系。關(guān)聯(lián)關(guān)系是對(duì)象之間的結(jié)構(gòu)關(guān)系。例如,一個(gè)人可能在一個(gè)地址上居住。雖然這可以建模成一個(gè)人包含城市,街道和郵編屬性,無論在對(duì)象和關(guān)系世界,我們傾向于地址信息結(jié)構(gòu)作為一個(gè)單獨(dú)的實(shí)體。在對(duì)象領(lǐng)域,一個(gè)地址表示一個(gè)唯一的的物理對(duì)象,可能擁有一個(gè)唯一的OID。在關(guān)系領(lǐng)域中,一個(gè)地址可能是一個(gè)地址表中的一行,其他實(shí)體通過外鍵關(guān)聯(lián)到地址的主鍵上。在這兩種模型,有一個(gè)趨勢(shì),地址信息作為一個(gè)單獨(dú)的實(shí)體。這有助于避免冗余數(shù)據(jù),提高可維護(hù)性。因此,在類模型中的每個(gè)關(guān)聯(lián)關(guān)系,將考慮創(chuàng)建從子表到主表的外鍵關(guān)系。&MapAggregationandCompositionAggregationandcompositionrelationshipsaresimilartotheassociationrelationshipandmaptotablesrelatedbyprimary-foreignkeypairs.Therearehowever,somepointstobearinmind.Ordinaryaggregation(theweakform)modelsrelationshipssuchasaPersonresidesatoneormoreAddresses.Inthisinstance,morethanonepersoncouldliveatthesameaddress,andifthePersonceasedtoexist,theAddressesassociatedwiththemwouldstillexist.Thisexampleparallelsthemany-to-manyrelationshipinrelationalterminology,andisusuallyimplementedasaseparatetablecontainingamappingofprimarykeysfromonetabletotheprimarykeysofanother.8.關(guān)聯(lián)映射到主鍵上聚集和組成關(guān)系和關(guān)聯(lián)關(guān)系相似,也是通過一對(duì)主外建關(guān)系映射到關(guān)系表中。然而,一些要點(diǎn)需要注意。普通聚合模型關(guān)系(弱形式),比如一個(gè)人居住在一個(gè)或多個(gè)地址。在這種情況下,不止一個(gè)人可以生活在同一個(gè)地址,如果人不再存在,與之相關(guān)的地址依然存在。這個(gè)例子中類似于關(guān)系模型中的多對(duì)多關(guān)系,通常是作為一個(gè)單獨(dú)表來實(shí)現(xiàn),包含從一個(gè)表的主鍵映射到另一個(gè)表的主鍵的關(guān)系。Asecondexampleoftheweakformofaggregationiswhereanentityhasuseorexclusiveownershipofanother.Forexample,aPersonentityaggregatesasetofshares.ThisimpliesaPersonmaybeassociatedwithzeroormoresharesfromaSharetable,buteachSharemaybeassociatedwithzerooronePerson.IfthePersonceasestoexist,theSharesbecomeun-ownedorarepassedtoanotherPerson.Intherelationalworld,thiscouldbeimplementedaseachSharehavingan'owner'columnwhichstoredaPersonID(orOID).第二個(gè)作為弱形式聚集的例子就是一個(gè)實(shí)體和它使用或者專屬的事物。例如,一個(gè)人書體聚合了他的股票的集合。這意味著一個(gè)人可能擁有零或者更多來自股票表的股票,但每個(gè)股份可能屬于零或者一人。如果這個(gè)人不再存在,其股份就成為沒有擁有者或者分給另一個(gè)人。在這種關(guān)系世界,這可以被實(shí)現(xiàn)為每個(gè)股票有一個(gè)存儲(chǔ)人的ID(或者OID)的‘擁有者'列。Thestrongformofaggregation,however,hasimportantintegrityconstraintsassociatedwithit.Composition,impliesthatanentityiscomposedofparts,andthosepartshaveadependentrelationshiptothewhole.Forexample,aPersonmayhaveidentifyingdocumentssuchasaPassport,BirthCertificate,Driver'sLicense&etc.APersonentitymaybecomposedofthesetofsuchidentifyingdocuments.IfthePersonisdeletedfromthesystem,thentheidentifyingdocumentsmustbedeletedalso,astheyaremappedtoauniqueindividual.較強(qiáng)的聚合形式,和它相關(guān)的約束具有重要的完整性。組合關(guān)系,意味著一個(gè)實(shí)體整體由部分組成,這些部分有需要扶養(yǎng)的與整體的關(guān)系。例如,唯一標(biāo)識(shí)一個(gè)人實(shí)體的證明可以是護(hù)照,出生證明,駕駛執(zhí)照等,人的實(shí)體可以由以上的人的身份證明組成。如果此人從系統(tǒng)中被刪除,則身份證明也必須同時(shí)刪除,因?yàn)樗鼈冇成涞揭粋€(gè)唯一的個(gè)體。IfweignoretheOIDissueforthemoment,aweakaggregationcouldbeimplementedusingeitheranintermediatetable(forthemany-to-manycase)orwithaforeignkeyintheaggregatedclass/table(one-to-manycase).Inthecaseofthemany-to-manyrelationship,iftheparentisdeleted,theentriesintheintermediatetableforthatentitymustalsobedeletedalso.Inthecaseoftheone-to-manyrelationship,iftheparentisdeleted,theforeignkeyentry(ie.'owner')mustbecleared.如果我們暫時(shí)忽略的OID的問題,一個(gè)弱的聚合關(guān)系可以用一個(gè)中間表(多對(duì)多的情況)或者在聚合類/表中建立外鍵(一對(duì)多的情況)來實(shí)現(xiàn)。在多對(duì)多關(guān)系時(shí),如果父對(duì)象被刪除,在中間表中該實(shí)體相關(guān)的數(shù)據(jù)也必須被刪除。在一對(duì)多關(guān)系時(shí),如果父對(duì)象被刪除,外鍵對(duì)應(yīng)的實(shí)體(即'擁有者')必須被清除。Inthecaseofcomposition,theuseofaforeignkeyismandatory,withtheaddedconstraintthatondeletionoftheparentthepartmustbedeletedalso.Logicallythereisalsotheimplicationwithcompositionthattheprimarykeyofthepartformspartoftheprimarykeyofthewhole-forexample,aPerson'sprimarykeymaycomposedoftheiridentifyingdocumentsID's.Inpracticethiswouldbecumbersome,butthelogicalrelationshipholdstrue.在組合的情況下,被強(qiáng)制使用外鍵,增加父數(shù)據(jù)被刪除部分?jǐn)?shù)據(jù)也必須被刪除的約束。在邏輯上組合關(guān)系也存在部分的主鍵構(gòu)成整體的主鍵的一部分-例如,人實(shí)體的主鍵由他的唯一識(shí)別證明組成。在實(shí)踐中,這將是十分麻煩的,但邏輯關(guān)系是成立的。DefinerelationshiprolesForeachassociationtyperelationship,eachendoftherelationshipmaybefurtherspecifiedwithroleinformation.Typically,youwillincludethePrimaryKeyconstraintnameandtheForeignKeyConstraintname.Figure6illustratesthisconcept.Thislogicallydefinestherelationshipbetweenthetwoclasses.Inaddition,youmayspecifyadditionalconstraints(eg.{NotNULL})ontheroleandcardinalityconstraints(eg.0..n).9.定義關(guān)系角色對(duì)于每一個(gè)關(guān)聯(lián)關(guān)系類型,每個(gè)關(guān)系的結(jié)束需要進(jìn)一步指定角色信息。通常,您將包括主鍵約束的名稱和外鍵約束的名稱。下圖說明了這一概念。這在邏輯上定義了兩個(gè)類之間的關(guān)系。此外,您可以指定其他的限制(如不為空)在角色和基數(shù)的限制(如0..n)的。ModelbehaviourWenowcometoanotherdifficultissue:whethertomapsomeorallclassbehaviourtothefunctionalcapabilitiesprovidedbydatabasevendorsintheformoftriggers,storedprocedures,uniquenessanddataconstraints,andrelationalintegrity.Anon-persistentobjectmodelwouldtypicallyimplementallthebehaviourrequiredinoneormoreprogramminglanguages(eg.JavaorC++).Eachclasswillbegivenitsrequiredbehaviourandresponsibilitiesintheformofpublic,protectedandprivatemethods.10.行為模型現(xiàn)在我們討論另一個(gè)棘手的問題:是否需要通過數(shù)據(jù)庫(kù)廠商提供的觸發(fā)器,存儲(chǔ)過程,唯一性約束,數(shù)據(jù)完整性的形式,對(duì)部分或全部行為映射到類的功能上。非持久性對(duì)象模型通常會(huì)實(shí)現(xiàn)通過一種或多種程序語言(如Java或C++)實(shí)現(xiàn)以上所有行為所需的行為。每個(gè)類為它的行為和責(zé)任設(shè)定公共,受保護(hù)和私有方法。RelationaldatabasesfromdifferentvendorstypicallyincludesomeformofprogrammableSQLbasedscriptinglanguagetoimplementdatamanipulation.Thetwocommonexamplesaretriggersandstoredprocedures.Whenwemixtheobjectandrelationalmodels,thedecisionisusuallywhethertoimplementallthebusinesslogicintheclassmodel,ortomovesometotheoftenmoreefficienttriggersandstoredproceduresimplementedintherelationalDBMS.Fromapurelyobject-orientedpointofview,theanswerisobviouslytoavoidtriggersandstoredproceduresandplaceallbehaviourintheclasses.Thislocalisesbehaviour,providesforacleanerdesign,GmplifiesmaintenanceandprovidesgoodportabilitybetweenDBMSvendors.來自不同廠商的關(guān)系型數(shù)據(jù)庫(kù)通常包含一些可編程基于SQL的腳本語言的形式來實(shí)現(xiàn)數(shù)據(jù)操作。有兩個(gè)常見的例子是觸發(fā)器和存儲(chǔ)過程。當(dāng)我們混合使用對(duì)象和關(guān)系模型,通常需要決定所有的業(yè)務(wù)邏輯是在類模型中實(shí)現(xiàn),還是移到關(guān)系數(shù)據(jù)庫(kù)DBMS中效率高的觸發(fā)器和存儲(chǔ)過程中實(shí)現(xiàn)。從一個(gè)純粹的面向?qū)ο蠼嵌葋砜?,答案顯然是要避免觸發(fā)器和存儲(chǔ)過程,并將所有行為放置在類中。這種本地化的行為,提供了一個(gè)更簡(jiǎn)潔的設(shè)計(jì),便于維護(hù)和在DBMS供應(yīng)商之間提供良好的可移植性。Intherealworld,thebottomlinemaybescalingto100'sor1000'softransactionspersecond,somethingstoredproceduresandtriggersarepurposedesignedfor.Ifpurityofdesign,portability,maintenanceandflexibilityarethemaindrivers,localiseallbehaviourintheobjectmethods.在現(xiàn)實(shí)世界中,底線可能會(huì)控制在每秒100次1000次的處理范圍之內(nèi),會(huì)使用一些存儲(chǔ)過程和觸發(fā)器來進(jìn)行設(shè)計(jì)的。如果純?cè)O(shè)計(jì),便攜性,維護(hù)性和靈活性為主要驅(qū)動(dòng)力,將把所有行為本地化到對(duì)象方法中。Ifperformanceisanover-ridingconcern,considerdelegatingsomebehaviourtothemoreefficientDBMSscriptinglanguages.Beawarethoughthattheextratimetakentointegratetheobjectmodelwiththestoredproceduresinasafeway,includingissueswithremoteeffectsanddebugging,maycostmoreindevelopmenttimethansimplydeployingtomorecapablehardware.如果關(guān)注性能是壓倒一切的,可以考慮一些行為使用更有效的DBMS腳本語言。
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 經(jīng)典安全培訓(xùn)
- 智慧團(tuán)建培訓(xùn)
- 廣東省韶關(guān)市2023-2024學(xué)年三年級(jí)上學(xué)期期中英語試卷
- 廣東省江門市新會(huì)區(qū)大澤鎮(zhèn)沿江小學(xué)2024-2025學(xué)年一年級(jí)上學(xué)期期中語文中段綜合練習(xí)卷(無答案)
- 2024-2025學(xué)年山東省德州市德城區(qū)第十中學(xué)九年級(jí)上學(xué)期第一次月考物理試卷(含答案)
- 初二數(shù)學(xué)上學(xué)期期中考前測(cè)試卷(北師大版)含答案解析
- T-TSSP 038-2023 帶枝花椒機(jī)械化烘干及精.選生產(chǎn)技術(shù)規(guī)程
- T-ZFDSA 05-2024 丁香蜜米飲制作標(biāo)準(zhǔn)
- 搏擊基礎(chǔ)理論知識(shí)單選題100道及答案解析
- 家庭裝修樣板房
- 開發(fā)商與前期物業(yè)服務(wù)合同
- 公路安全防護(hù)工程交通安全設(shè)施施工組織設(shè)計(jì)
- (完整版)血壓監(jiān)測(cè)記錄表
- 2.8《食物在身體里的旅行》優(yōu)質(zhì)課件
- 淀粉樣腦血管病腦
- 師德及思想政治表現(xiàn) 教師政治思想師德表現(xiàn)【3篇】
- 蘇教版選修2《空間向量基本定理》教案及教學(xué)反思
- 造價(jià)課件八工業(yè)管道
- 駕駛員車輛管理制度15篇
- 同濟(jì)大學(xué)(高等數(shù)學(xué))-第三篇-常微分方程
- 中國(guó)移動(dòng)-安全-L3
評(píng)論
0/150
提交評(píng)論