




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
建立物理模型第1頁,課件共86頁,創(chuàng)作于2023年2月Contents在SQLServer中建立物理模型(CreatingthePhysicalModel
withSQLServer)
√索引方面的考慮(IndexingConsiderations)建立抽象層(CreatinganAbstractionLayer
inSQLServer)第2頁,課件共86頁,創(chuàng)作于2023年2月CreatingthePhysicalModel
withSQLServer是時候生成數(shù)據(jù)庫了,本節(jié)先介紹SQLServer對象的命名規(guī)則(建議),再討論物理模型的建立.命名原則(NamingGuidelines)√生成物理模型(DerivingthePhysicalModel)實現(xiàn)商業(yè)規(guī)則(ImplementingBusinessRulesinthePhysicalModel)第3頁,課件共86頁,創(chuàng)作于2023年2月NamingGuidelines在創(chuàng)建物理模型時,使用命名原則極度重要,可能存在數(shù)百種命名標準,使用哪一種無所謂,關鍵是要有.標準可以指示對象的類型.如果table均以tbl打頭,而view用vw打頭,那么用戶一看名稱就知道操縱的是表還是視圖.這可以節(jié)約很多時間,特別是在查找表現(xiàn)不好的T-SQL代碼時.評價標準:(1)是否易用易記;(2)別人能不能理解;(3)標準是否保持一致.即不能老是變來變去.第4頁,課件共86頁,創(chuàng)作于2023年2月GeneralNamingGuidelines本課程后邊使用的標準.不在對象名中用空格(NeverUseSpacesinObjectNames)不在對象名中用連字符(-)(NeverUseHyphensinObjectNames)不得用SQLServer關鍵字來命名對象(DoNotNameObjectsUsingSQLServerKeywords)命名時盡量短一點(KeeptheNamesShort)合理使用大小寫(UsingCaseinYourNames)SELECTwhere,and,name,dateFROMINSERTWHEREand=1ANDwhere='Omaha‘會報錯,但若改為:SELECT[where],[and],name,dateFROM[INSERT]WHERE[and]=1AND[where]='Omaha‘這是正確的,但顯然可讀性很差第5頁,課件共86頁,創(chuàng)作于2023年2月NamingTables命名方法:”tbl_”后跟一個有意義的名字.MountainViewMusic數(shù)據(jù)庫中的部分表:tbl_ordertbl_customertbl_producttbl_employee另外,對表達多對多聯(lián)系的表,表示為:tbl_表1_表2,如:tbl_customer_address第6頁,課件共86頁,創(chuàng)作于2023年2月NamingColumns列名不要前綴,它是前綴規(guī)則中唯一的例外.第7頁,課件共86頁,創(chuàng)作于2023年2月NamingViews用”vw_”作為一個描述性名字的前綴.若視圖數(shù)據(jù)來自于多個表,則把各表名用”_”分開,例如:vw_customer_product第8頁,課件共86頁,創(chuàng)作于2023年2月NamingStoredProcedures存儲過程用前綴”prc_”,也可用其它前綴,但是最好別用”sp_”,因為它是Microsoft在SQLServer中用來為系統(tǒng)存儲過程取名用的,免得造成混淆.第9頁,課件共86頁,創(chuàng)作于2023年2月NamingUser-DefinedFunctions用戶定義函數(shù)用前綴”udf_”或其它.不要用”fn_”,因為系統(tǒng)用了.第10頁,課件共86頁,創(chuàng)作于2023年2月NamingTriggers用前綴”trg_”跟一描述性文字.第11頁,課件共86頁,創(chuàng)作于2023年2月NamingIndexes以“idx_”為前綴.第12頁,課件共86頁,創(chuàng)作于2023年2月NamingUser-DefinedDataTypes直接取一個描述性的名字,不用前綴第13頁,課件共86頁,創(chuàng)作于2023年2月NamingPrimaryKeysandForeignKeys主碼用前綴”PK_”后跟表名;外碼前綴“FK_”+參照表名+”_”+被參照表名第14頁,課件共86頁,創(chuàng)作于2023年2月NamingConstraints缺省值約束用前綴”DF_”,后跟表名和列名check約束用前綴”CK_”唯一性約束用前綴“UNQ_”第15頁,課件共86頁,創(chuàng)作于2023年2月CreatingthePhysicalModel
withSQLServer是時候生成數(shù)據(jù)庫了,本節(jié)先介紹SQLServer對象的命名規(guī)則(建議),再討論物理模型的建立.命名原則(NamingGuidelines)生成物理模型(DerivingthePhysicalModel)√實現(xiàn)商業(yè)規(guī)則(ImplementingBusinessRulesinthePhysicalModel)第16頁,課件共86頁,創(chuàng)作于2023年2月DerivingthePhysicalModel需要注意,表和實體未必是一對一的關系,因為實體是對現(xiàn)實世界建模,而表要附合關系數(shù)據(jù)庫的理論.建立物理模型的過程是,先為每個實體建一張表,然后再分裂或者組合表.UsingEntitiestoModelTables√UsingRelationshipstoModelKeysUsingAttributestoModelColumns第17頁,課件共86頁,創(chuàng)作于2023年2月UsingEntitiestoModelTables(1)可以依賴軟件工具來把邏輯模式轉換為物理模型。也可以手工直接到SQLServer中去做。這里用的方法是先把所有實體分成若干個子模型(submodel),這樣就不用一次面對所有的實體。為MountainViewMusic建立的子模型有:Products-包含所有關于產(chǎn)品和供應商的細節(jié)Inventory-包含公司物理庫存的細節(jié)Orders-包含與訂購、支付和客戶相關的實體WebSession-包含實現(xiàn)web購物車相關的實體Lists-包含實現(xiàn)查找表的兩個實體MVM的完整模型與子模型舉例第18頁,課件共86頁,創(chuàng)作于2023年2月UsingEntitiestoModelTables(2)在建立物理模型時,一次處理一個邏輯子模型.注意有的實體出現(xiàn)在多個子模型中,應把它放入真正所屬的子模型中處理.下邊,首先處理子模型中的實體并找出其中物理模型中的位置,稍后再處理聯(lián)系.第19頁,課件共86頁,創(chuàng)作于2023年2月ProductsSubmodel有六個實體需要處理本例屬于比較簡單的情況,每個實體對應到一張表,初建的物理模型如下圖(一開始只有表名和主碼)第20頁,課件共86頁,創(chuàng)作于2023年2月ProductsSubmodel–initialphysicalmodel第21頁,課件共86頁,創(chuàng)作于2023年2月InventorySubmodel與Products子模型比較相似,也沒有多少工作可做第22頁,課件共86頁,創(chuàng)作于2023年2月InventorySubmodel–initialphysicalmodel注意到Vendors和Products是第二次出現(xiàn),對它們啥也不需要做第23頁,課件共86頁,創(chuàng)作于2023年2月OrdersSubmodel這是整個模型中最復雜的部分,包含12個實體.如圖所示.其中,Products和Employees已經(jīng)處理過了,Shipments,ShippingMethods,ShippingCarriers和OrderDetails可以直接轉換為表.對于Customers,希望為每個客戶存儲多個地址,故需要把地址信息分離成單獨的表,并與Customers建立聯(lián)系.如圖.Orders和Employees實體也有相似的地址問題,可以暫時為它們加上聯(lián)系.最后,還要考察Payments實體的子類型結構.第24頁,課件共86頁,創(chuàng)作于2023年2月Payments實體的子類型結構(1)如前所述,實現(xiàn)子類型有三種方法:用一個表實現(xiàn)超類型和所有的子類型.為每個子類型建一張表,把超類型的數(shù)據(jù)加入到每個子類型表中.把超類型用一張表實現(xiàn),各子類型用另外的表實現(xiàn).(Implementthesupertypeasatableandallthesubtypesasadditionaltables.)這里選擇第一種方法.如果選用第二/三種方法,聯(lián)系將變得非常的復雜.由此得到Payments表結構如下:第25頁,課件共86頁,創(chuàng)作于2023年2月Payments實體的子類型結構(2)注意到這個表中的問題,不少屬性是可選的(允許NULL值),如何保證三種支付方式一定存在一種呢?稍后討論商業(yè)規(guī)則時再說.第26頁,課件共86頁,創(chuàng)作于2023年2月OrdersSubmodel–physicalmodel至此,也Order有關的所有表基本成形了,如下圖所示.第27頁,課件共86頁,創(chuàng)作于2023年2月WebSessionandListsSubmodel最后是兩個小的子模型,其中,websession只有一個新實體shoppingcart,它作為Customers和Products的連接,存儲客戶購買的產(chǎn)品,顯然向表轉換得加入CustomersID和ProductID.ListsSubmodel中是兩個用于查找的表:Lists和ListItems,它們的作用是為前臺應用提供一個場所存儲相關的數(shù)據(jù)列表,如訂單狀態(tài)或各種產(chǎn)品屬性.只需要直接轉換.到此,所有的邏輯模型實體都找到了其物理模型中的歸屬,下邊處理聯(lián)系,即通過聯(lián)系來找出碼.第28頁,課件共86頁,創(chuàng)作于2023年2月DerivingthePhysicalModel需要注意,表和實體未必是一對一的關系,因為實體是對現(xiàn)實世界建模,而表要附合關系數(shù)據(jù)庫的理論.建立物理模型的過程是,先為每個實體建一張表,然后再分裂或者組合表.UsingEntitiestoModelTablesUsingRelationshipstoModelKeys√UsingAttributestoModelColumns第29頁,課件共86頁,創(chuàng)作于2023年2月UsingRelationshipstoModelKeys已經(jīng)看到,我們使用屬性objid作為每個實體的主碼名字。外碼的名字使用被引用的表名跟上“_objid”。例:加上外碼的orders子模型第30頁,課件共86頁,創(chuàng)作于2023年2月DerivingthePhysicalModel需要注意,表和實體未必是一對一的關系,因為實體是對現(xiàn)實世界建模,而表要附合關系數(shù)據(jù)庫的理論.建立物理模型的過程是,先為每個實體建一張表,然后再分裂或者組合表.UsingEntitiestoModelTablesUsingRelationshipstoModelKeysUsingAttributestoModelColumns√第31頁,課件共86頁,創(chuàng)作于2023年2月UsingAttributestoModelColumns使用實體的屬性來對表屬性建模。需要注意的是,由于存在實體的拆分和組合,屬性也存在合并和分拆到相應表的問題。也需要注意數(shù)據(jù)類型,如果前邊的工作完全按照本課程中的要求做了,那么屬性建模非常簡單,建模軟件可以完成所有的事情-拷過去就行了??梢钥闯觯I一個好的建模軟件是非常重要的。這樣,你要做的僅僅按照標準改名字。第32頁,課件共86頁,創(chuàng)作于2023年2月CreatingthePhysicalModel
withSQLServer是時候生成數(shù)據(jù)庫了,本節(jié)先介紹SQLServer對象的命名規(guī)則(建議),再討論物理模型的建立.命名原則(NamingGuidelines)生成物理模型(DerivingthePhysicalModel)實現(xiàn)商業(yè)規(guī)則(ImplementingBusinessRulesinthePhysicalModel)√第33頁,課件共86頁,創(chuàng)作于2023年2月在物理模型中實現(xiàn)商業(yè)規(guī)則在SQLServer中實現(xiàn)盡可能多的商業(yè)規(guī)則可能是一種比較好的方案。(因為我們不信任應用程序?)本節(jié)介紹利用SQLServer來實現(xiàn)商業(yè)規(guī)則的各種方案:UsingConstraintstoImplementBusinessRules√UsingTriggerstoImplementBusinessRulesImplementingAdvancedCardinality第34頁,課件共86頁,創(chuàng)作于2023年2月使用約束來實現(xiàn)商業(yè)規(guī)則約束是控制進入數(shù)據(jù)庫的數(shù)據(jù)的機制,這里介紹三種約束:Default-為屬性提供缺省值Unique–指定屬性中的值保持唯一Check–根據(jù)要求自定義屬性應滿足的條件第35頁,課件共86頁,創(chuàng)作于2023年2月DefaultConstraints添加default約束的代碼:ALTERTABLEdbo.tbl_employeeADDCONSTRAINTDF_statusDEFAULT1FORstatus使用自動義函數(shù)來產(chǎn)生缺省值:ALTERTABLEdbo.tbl_orderADDCONSTRAINT[DF_ordernumber]DEFAULTdbo.udf_new_orderid()FORordernumber 第36頁,課件共86頁,創(chuàng)作于2023年2月CheckConstraints用來保證裝入數(shù)據(jù)庫的數(shù)據(jù)確實是你所需要的。前邊介紹的customers表中,homephone,workphone,mobilephone都是允許為空的,但我們要求至少提供一個電話號碼,可以使用如下代碼添加check約束:ALTERTABLEdbo.tbl_customerWITHCHECKADDCONSTRAINTCK_phone_numberCHECK(([homephone]ISNOTNULLOR[workphone]ISNOTNULLOR[mobilephone]ISNOTNULL))第37頁,課件共86頁,創(chuàng)作于2023年2月UniqueConstraints用來保證列沒有重復值,可作用于一列或者多列.例:ALTERTABLEdbo.tbl_orderADDCONSTRAINTUNQ_ordernumberUNIQUENONCLUSTERED(ordernumber)所以在選擇了主碼之后,要評估所有的候選碼,它們是實施唯一性約束的最好的對象.第38頁,課件共86頁,創(chuàng)作于2023年2月在物理模型中實現(xiàn)商業(yè)規(guī)則在SQLServer中實現(xiàn)盡可能多的商業(yè)規(guī)則可能是一種比較好的方案。(因為我們不信任應用程序?)本節(jié)介紹利用SQLServer來實現(xiàn)商業(yè)規(guī)則的各種方案:UsingConstraintstoImplementBusinessRulesUsingTriggerstoImplementBusinessRules√ImplementingAdvancedCardinality第39頁,課件共86頁,創(chuàng)作于2023年2月UsingTriggerstoImplementBusinessRulesUsingtriggers,youcanwritecustomT-SQLcodetorunaftersomethinghashappenedtoatable.TriggerscanbesetuptorunafteranINSERT,UPDATE,orDELETEoreveninsteadofoneoftheseactions.Keepinmind,however,thattriggersfireaspartofthetransactionthatstartedthem,andtheyfireeachtimetheactionoccurs.可能導致性能低下.第40頁,課件共86頁,創(chuàng)作于2023年2月MVM中的觸發(fā)器前文中用一個表來實現(xiàn)實體Payments,必須使用某種支付方式(支付方式不為空),當使用某種支付方式的時候,需要保證與該支付方式相對應的屬性不得為空。例如,當選用信用卡支付時,相關的屬性thecreditcardnumber,expirationdate,type,andcreditcardverification(CCV)code不能為空??梢杂糜|發(fā)器來實現(xiàn)這樣的要求。使用觸發(fā)器來實現(xiàn)商業(yè)規(guī)則可以得到更健壯的系統(tǒng),盡管這些規(guī)則可以用應用程序代碼來實現(xiàn)。第41頁,課件共86頁,創(chuàng)作于2023年2月在物理模型中實現(xiàn)商業(yè)規(guī)則在SQLServer中實現(xiàn)盡可能多的商業(yè)規(guī)則可能是一種比較好的方案。(因為我們不信任應用程序?)本節(jié)介紹利用SQLServer來實現(xiàn)商業(yè)規(guī)則的各種方案:UsingConstraintstoImplementBusinessRulesUsingTriggerstoImplementBusinessRulesImplementingAdvancedCardinality√第42頁,課件共86頁,創(chuàng)作于2023年2月ImplementingAdvancedCardinality一到多的聯(lián)系相對簡單,前邊已經(jīng)討論過,多到多的聯(lián)系可以通過兩個一到多的聯(lián)系和一個聯(lián)系表來實現(xiàn)?,F(xiàn)在介紹一對一的聯(lián)系以及“更高級的”如一對二的聯(lián)系。例:一個學校有多個學院,若有規(guī)則一個學院只有一個院長,每個院長只能是一個學院的院長??山⒛P腿缦拢猴@然這是一個一對多的聯(lián)系,如何保證一對一的特性呢?即一個人只能是一個學院的院長可以使用觸發(fā)器來實現(xiàn):第43頁,課件共86頁,創(chuàng)作于2023年2月保證學院與院長一對一聯(lián)系的觸發(fā)器ALTERTRIGGERtrg_one_dean_per_collegeONtbl_collegeFORINSERT,UPDATEASDECLARE@college_countintSELECT@college_count=COUNT(tbl_college.id)FROMtbl_collegeJOINtbl_faculty ONtbl_college.dean_id=tbl_faculty.idWHEREtbl_faculty.id=(SELECTdean_idFROMINSERTED)IF@college_count>1BEGIN RAISERROR('Thisfacultymemberisdeanofanothercollege',11,1) ROLLBACKEND第44頁,課件共86頁,創(chuàng)作于2023年2月Pitfalls如果college表中數(shù)據(jù)很多,每次插入數(shù)據(jù)都要執(zhí)行觸發(fā)器代碼,可能導致較差的性能。可以考慮使用insteadof觸發(fā)器,在插入前評估本次插入。但每個表的每個動作只能定義一個insteadof觸發(fā)器。一個構建良好的商業(yè)規(guī)則層,表現(xiàn)總是優(yōu)于觸發(fā)器。第45頁,課件共86頁,創(chuàng)作于2023年2月Contents在SQLServer中建立物理模型(CreatingthePhysicalModel
withSQLServer)索引方面的考慮(IndexingConsiderations)√建立抽象層(CreatinganAbstractionLayer
inSQLServer)第46頁,課件共86頁,創(chuàng)作于2023年2月IndexingConsiderations索引的作用是加快檢索數(shù)據(jù)的速度。本節(jié)討論什么是索引,如何確定要建立的索引,如何實現(xiàn)。IndexingOverview√DatabaseUsageRequirementsDeterminingtheAppropriateIndexesImplementingIndexesinSQLServer第47頁,課件共86頁,創(chuàng)作于2023年2月IndexingOverview討論索引前,需要對SQLServer2008如何把數(shù)據(jù)存儲到磁盤上有一個粗略的了解。數(shù)據(jù)庫以文件的形式存儲,每個數(shù)據(jù)庫至少有兩個文件(數(shù)據(jù)文件和日志文件各一)數(shù)據(jù)文件內部包含若干個extents(分區(qū)?),每個extents包含8個pages(頁面?),每個pages占用8K空間,每個page通常有自己的標識符(identifier),記錄在頁面上按插入數(shù)據(jù)庫的順序存儲。第48頁,課件共86頁,創(chuàng)作于2023年2月WhatAreIndexes?Bydefault,whenyoucreateanewtableinaSQLServerdatabase,theserverassignsastartingnumberofextentstothattable.Whenyoustartinsertingdata,itaddsrowsofdatatothepagesinsidetheextents.Simplyput,anindexisareferencingsetofpointerstorowsofdata.Indexesphysicallyexistondisk,andthustheytakeupdiskspaceseparatelyfrom,andinadditionto,youractualtabledata.第49頁,課件共86頁,創(chuàng)作于2023年2月索引的類型Thetwobasicindextypesareclusteredandnonclusteredindexes.Allindexesthatyoudefineonyourtableswillbeoneofthesetwotypes.Clusteredindexesactuallyrestructurethedataondisk.Anonclusteredindexisonethatsimplystorespointerstothepagesthatcontaintherowsofdatayouarelookingfor.SQLServer2008還提供了其它類型的索引.第50頁,課件共86頁,創(chuàng)作于2023年2月OtherIndexTypesUniqueindexesIndexeswithIncludedColumns:Considerusingthisfeaturewhenyou’rebuildingindexestosatisfyveryspecificqueriesandtheindexhasgottentoolarge.XMLIndexesSpatialFull-TextIndexesIndexedViews第51頁,課件共86頁,創(chuàng)作于2023年2月IndexingConsiderations索引的作用是加快檢索數(shù)據(jù)的速度。本節(jié)討論什么是索引,如何確定要建立的索引,如何實現(xiàn)。IndexingOverviewDatabaseUsageRequirements√DeterminingtheAppropriateIndexesImplementingIndexesinSQLServer第52頁,課件共86頁,創(chuàng)作于2023年2月DatabaseUsageRequirementsReadsversusWritesTransactionData第53頁,課件共86頁,創(chuàng)作于2023年2月IndexingConsiderations索引的作用是加快檢索數(shù)據(jù)的速度。本節(jié)討論什么是索引,如何確定要建立的索引,如何實現(xiàn)。IndexingOverviewDatabaseUsageRequirementsDeterminingtheAppropriateIndexes√ImplementingIndexesinSQLServer第54頁,課件共86頁,創(chuàng)作于2023年2月DeterminingtheAppropriateIndexesReviewingDataAccessPatternsBalancingIndexesCoveringIndexesIndexStatisticsIndexMaintenanceConsiderations第55頁,課件共86頁,創(chuàng)作于2023年2月IndexingConsiderations索引的作用是加快檢索數(shù)據(jù)的速度。本節(jié)討論什么是索引,如何確定要建立的索引,如何實現(xiàn)。IndexingOverviewDatabaseUsageRequirementsDeterminingtheAppropriateIndexesImplementingIndexesinSQLServer√第56頁,課件共86頁,創(chuàng)作于2023年2月ImplementingIndexesinSQLServerNamingGuidelinesidx_Customer_LastName_FirstNameCreatingIndexesCREATENONCLUSTEREDINDEXidx_Customer_LastName_FirstNameONCustomer(LastNameASC,FirstNameASC)WITH(FILLFACTOR=70,SORT_IN_TEMPDB=ON,ONLINE=ON)NIndexFileGroupFilegroups:Filegroupsareamethodofstoringdatabasedatafilesinaseparatedfashion.SettingUpIndexMaintenanceRebuildsversusReorganization第57頁,課件共86頁,創(chuàng)作于2023年2月Contents在SQLServer中建立物理模型(CreatingthePhysicalModel
withSQLServer)索引方面的考慮(IndexingConsiderations)建立抽象層(CreatinganAbstractionLayer
inSQLServer)√第58頁,課件共86頁,創(chuàng)作于2023年2月CreatinganAbstractionLayer
inSQLServer現(xiàn)在,可以把數(shù)據(jù)庫交給數(shù)據(jù)庫管理員進行實施和管理了。但是,大多數(shù)的應用程序員都未必知道怎樣以最好的方式訪問和使用數(shù)據(jù)庫。因此,還應該做一項工作——建立抽象層。WhatIsanAbstractionLayer?WhyUseanAbstractionLayer?AnAbstractionLayer’sRelationshiptotheLogicalModelAnAbstractionLayer’sRelationshiptoObject-OrientedProgrammingImplementinganAbstractionLayer第59頁,課件共86頁,創(chuàng)作于2023年2月WhatIsanAbstractionLayer?Ingeneralterms,anabstractionlayerisawayofhidingthecomplexdetailsaboutthefunctionalityofaprocess.抽象層可以看成一個用戶接口,這里的用戶可能是一個程序。一般抽象層被實現(xiàn)為一個軟件層供用戶或其它程序訪問。例如windows硬件抽象層(HAL),OSI模型,開放圖形庫(OpenGL)等。在數(shù)據(jù)庫中,抽象層的作用是隱藏模式的復雜性。在SQLServer中的抽象層由視圖,存儲過程,用戶定義函數(shù)和幾個其它的SQLServer對象組成。對于定義良好的抽象層,任何用戶或程序不能直接訪問物理表,任何事情都通過抽象層來處理。第60頁,課件共86頁,創(chuàng)作于2023年2月WhyUseanAbstractionLayer?抽象層屏蔽了數(shù)據(jù)庫結構的復雜性,至少有這幾個好處:提供了一種管理安全性的方法,該方法不損害數(shù)據(jù)庫的數(shù)據(jù)建立了可擴展的數(shù)據(jù)庫提供了最大限度的靈活性。第61頁,課件共86頁,創(chuàng)作于2023年2月Security(1)建立抽象層為安全性控制提供了更多的選擇。表中可能包含敏感數(shù)據(jù),涉及用戶隱私,還可能包含用戶登錄的口令。例如customer表。第62頁,課件共86頁,創(chuàng)作于2023年2月Security(2)可以創(chuàng)建視圖屏蔽數(shù)據(jù)。CREATEVIEWvw_customer_detailASSELECTemail,customer_id,firstname,lastname,homephone,workphone,mobilephoneFROMtbl_customer第63頁,課件共86頁,創(chuàng)作于2023年2月Security(3)另外,數(shù)據(jù)庫建好后,將來可能向其中添加隱私數(shù)據(jù),例如身份證號碼。使用抽象層,必須額外添加才能訪問這些數(shù)據(jù)。(當然,前提是你在定義視圖時沒有使用“select*”這樣的子句。)第64頁,課件共86頁,創(chuàng)作于2023年2月ExtensibilityandFlexibility(1)可擴展性指將來修改數(shù)據(jù)模型的方便程度。靈活性指在不造成重大影響的情況下可以修改模型多少內容。一般說來靈活的模型總是有好的可擴展性,但也并不總是如此。抽象層把應用程序與物理數(shù)據(jù)隔離開來,它幾乎允許你在不影響應用程序的情況下做任何事。只要所有的應用和用戶都通過視圖來讀數(shù)據(jù),通過存儲過程來操縱數(shù)據(jù),當修改發(fā)生時,只需要對視圖和存儲過程作出相應的調整。第65頁,課件共86頁,創(chuàng)作于2023年2月ExtensibilityandFlexibility(2)修改SQLServer代碼與修改應用程序代碼有什么區(qū)別?SQL代碼不用編譯,意思是你可以隨時修改,而不用等到夜深人靜的時候。只有一個數(shù)據(jù)庫,而應用程序被修改后要重新編譯和部署。第66頁,課件共86頁,創(chuàng)作于2023年2月AnAbstractionLayer’sRelationshiptotheLogicalModelWhenit’stimetobuildyourabstractionlayer,youshouldfindthatitmorecloselytiestothelogicalmodelthantothephysicalmodel.要記住邏輯模型比物理模型更加“用戶友好”。不要為一個表創(chuàng)建四個存儲過程分別用于插入、刪除、更新和查詢。而是應該創(chuàng)建一個過程來存儲實體,創(chuàng)建一個過程來插入和更新。第67頁,課件共86頁,創(chuàng)作于2023年2月AnAbstractionLayer’sRelationshiptoObject-OrientedProgrammingOOP的核心概念是對象,而抽象層與邏輯模型緊緊地聯(lián)系在一起,其中心是實體.實體與對象很接近,表現(xiàn)在實體的屬性與對象的屬性幾乎是一一對應的,但對象有方法(methods),實體沒有,反映到抽象層,可以用存儲過程,當對象要操縱其數(shù)據(jù),例如order對象要存儲訂單,可以調用一個存儲過程向數(shù)據(jù)庫插入.若你的數(shù)據(jù)庫與一個應用開發(fā)項目緊密地結合在一起,建議使用對象模型來指導抽象層的建立.第68頁,課件共86頁,創(chuàng)作于2023年2月ImplementinganAbstractionLayer實現(xiàn)抽象層指在數(shù)據(jù)庫中創(chuàng)建對象(包括視圖,存儲過程和函數(shù))來作為應用程序代碼與核心數(shù)據(jù)庫對象的中介.ViewsStoredProceduresOtherComponentsofanAbstractionLayer第69頁,課件共86頁,創(chuàng)作于2023年2月Views使用視圖的目的是想基于用戶的需求以一種有意義的方式把實體展示給最終用戶.創(chuàng)建視圖時一定要清楚用戶能不能真正理解展示在其面前的數(shù)據(jù).創(chuàng)建視圖來使應用程序邏輯更簡捷是一個好主意.避免使用”select*”語法和不帶值列表的insert語句.查看客戶(customer)數(shù)據(jù)的視圖第70頁,課件共86頁,創(chuàng)作于2023年2月視圖的例子(1)CREATEVIEWvw_customersASSELECT objid ,email ,customer_id ,firstname ,lastname ,homephone ,workphone ,mobilephoneFROMtbl_customer第71頁,課件共86頁,創(chuàng)作于2023年2月視圖的例子(2)CREATEVIEWvw_customer_addressesASSELECT address_objid=objid ,address_label ,addressline1 ,addressline2 ,city ,region ,zipcode ,customer_objidFROMtbl_addressWHEREcustomer_objidISNOTNULL第72頁,課件共86頁,創(chuàng)作于2023年2月StoredProcedures(1)存儲過程有著與視圖類似的規(guī)則。創(chuàng)建存儲過程的時候,考慮一下它們試圖影響的實體??梢钥紤]創(chuàng)建一個標準來控制怎樣和為何創(chuàng)建存儲過程。正確實施存儲過程與環(huán)境和自身選擇有關,沒有絕對正確的答案。常見的做法是為每個實體創(chuàng)建一個存儲過程,它向所有相關的表更新或插入數(shù)據(jù)。第73頁,課件共86頁,創(chuàng)作于2023年2月StoredProcedures(2)例:為MVM中的Customer實體存儲變更的步驟確定記錄是否已經(jīng)存在、若不存在,則插入若存在,則更新返回插入或更新的信息相應的存儲過程如下:ALTERPROCEDUREprc_save_customer@emailvarchar(50),@customer_idchar(10),@firstnamevarchar(50),@lastnamevarchar(50)第74頁,課件共86頁,創(chuàng)作于2023年2月StoredProcedures(3),@homephonevarchar(15),@workphonevarchar(15),@mobilephonevarchar(15),@addressesCustomerAddressReadOnly,@customer_objidintOUTPUTASMERGEtbl_customerASpri_customer USING ( SELECTcustomer_id=@customer_id ) ASsource_customer(customer_id)第75頁,課件共86頁,創(chuàng)作于2023年2月ON ( pri_customer.customer_id= source_customer.customer_id )WHENNOTMATCHEDTHENINSERT(email, customer_id, firstname, lastname, homephone, workphone, mobilephone)第76頁,課件共86頁,創(chuàng)作于2023年2月VALUES(@email, @customer_id, @firstname, @lastname, @homephone, @workphone, @mobilephone)WHENMATCHEDTHEN UPDATE SETemail=@email, firstname=@firstname, lastname=@lastname, homephone=@homephone, workphone=@workphone, mobilephone=@mobilephone;第77頁,課件共86頁,創(chuàng)作于2023年2月SELECT@customer_objid=objidFROMtbl_customerWHEREcustomer_id=@customer_id;MERGEtbl_addressAScurrent_addresses USING ( SELECTcustomer_objid=@customer_objid, address_label, addressline1, addressline2, city, region, country, zipcode, is_deleted FROM@addresses )第78頁,課件共86頁,創(chuàng)作于2023年2月
ASsource_addresses(customer_objid, address_label, addressline1, addressline2, city, region, country, zipcode, is_deleted) ON ( current_addresses.address_label= source_addresses.address_label AND current_addresses.customer_objid= source_addresses.customer_objid)第79頁,課件共86頁,創(chuàng)作于2023年2月WHENNOTMATCHEDTHEN INSERT(address_label, addressline1, addressline2, c
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度家居建材配送承包服務協(xié)議
- 2025年度智能設備租賃合同中發(fā)票開具、技術支持及維護服務的約定
- 2025年度校地合作框架協(xié)議-現(xiàn)代服務業(yè)合作開發(fā)合同
- 二零二五年度股東借款給公司長期投資及收益共享協(xié)議
- 二零二五年度業(yè)主委托物業(yè)公共區(qū)域清潔維護合同
- 二零二五年度醫(yī)療機構崗位聘用協(xié)議書(臨床醫(yī)學專業(yè))
- 2025年度新能源項目墊資合作協(xié)議
- 2025年度無財產(chǎn)分割協(xié)議及離婚后共同財產(chǎn)管理協(xié)議
- 二零二五年度新型商業(yè)綜合體門面租賃服務合同
- 2025年度輔導班知識產(chǎn)權與品牌使用權轉讓合同
- 2025年海域使用權租賃合同
- 四年級希望杯歷年數(shù)學競賽試題與答案1-13屆+奧數(shù)分類專項練習集等
- 《走近世界民間美術》 課件 2024-2025學年人美版(2024)初中美術七年級下冊
- (2025春)人教版三年級數(shù)學下冊全冊教案
- 河南2025年02月鄭州市公安機關公開招考1200名警務輔助人員筆試歷年典型考題(歷年真題考點)解題思路附帶答案詳解
- 2025年江蘇省高職單招《職測》高頻必練考試題庫400題(含答案)
- 河北單招考試三類職業(yè)適應性測試考試題與答案
- 手機開發(fā)流程圖
- 隊列隊形比賽評分標準
- 生產(chǎn)礦井儲量管理規(guī)程
- 實木家具工藝標準(全流程)
評論
0/150
提交評論