




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
1、建立物理模型第1頁,共86頁,2022年,5月20日,8點19分,星期三Contents在SQL Server中建立物理模型(Creating the Physical Model with SQL Server) 索引方面的考慮(Indexing Considerations)建立抽象層(Creating an Abstraction Layer in SQL Server)第2頁,共86頁,2022年,5月20日,8點19分,星期三Creating the Physical Model with SQL Server是時候生成數據庫了,本節先介紹SQL Server對象的命名規則(建議),
2、再討論物理模型的建立.命名原則(Naming Guidelines) 生成物理模型(Deriving the Physical Model)實現商業規則(Implementing Business Rules in the Physical Model)第3頁,共86頁,2022年,5月20日,8點19分,星期三Naming Guidelines在創建物理模型時,使用命名原則極度重要,可能存在數百種命名標準,使用哪一種無所謂,關鍵是要有.標準可以指示對象的類型.如果table均以tbl打頭,而view用vw打頭,那么用戶一看名稱就知道操縱的是表還是視圖.這可以節約很多時間,特別是在查找表現不好
3、的T-SQL代碼時.評價標準: (1)是否易用易記; (2)別人能不能理解; (3)標準是否保持一致. 即不能老是變來變去.第4頁,共86頁,2022年,5月20日,8點19分,星期三General Naming Guidelines本課程后邊使用的標準.不在對象名中用空格(Never Use Spaces in Object Names)不在對象名中用連字符(-)(Never Use Hyphens in Object Names)不得用SQL Server關鍵字來命名對象(Do Not Name Objects Using SQL Server Keywords)命名時盡量短一點(Keep
4、 the Names Short)合理使用大小寫(Using Case in Your Names)SELECT where, and, name, dateFROM INSERTWHERE and = 1AND where = Omaha會報錯,但若改為:SELECT where, and, name, dateFROM INSERTWHERE and = 1AND where = Omaha這是正確的,但顯然可讀性很差第5頁,共86頁,2022年,5月20日,8點19分,星期三Naming Tables命名方法:”tbl_”后跟一個有意義的名字.Mountain View Music數據庫
5、中的部分表:tbl_ordertbl_customertbl_producttbl_employee另外,對表達多對多聯系的表,表示為:tbl_表1_表2,如:tbl_customer_address第6頁,共86頁,2022年,5月20日,8點19分,星期三Naming Columns列名不要前綴,它是前綴規則中唯一的例外.第7頁,共86頁,2022年,5月20日,8點19分,星期三Naming Views用”vw_”作為一個描述性名字的前綴.若視圖數據來自于多個表,則把各表名用”_”分開,例如:vw_customer_product第8頁,共86頁,2022年,5月20日,8點19分,星期
6、三Naming Stored Procedures存儲過程用前綴”prc_”,也可用其它前綴,但是最好別用”sp_”,因為它是Microsoft在SQL Server中用來為系統存儲過程取名用的,免得造成混淆.第9頁,共86頁,2022年,5月20日,8點19分,星期三Naming User-Defined Functions用戶定義函數用前綴”udf_”或其它. 不要用”fn_”,因為系統用了.第10頁,共86頁,2022年,5月20日,8點19分,星期三Naming Triggers用前綴”trg_”跟一描述性文字第11頁,共86頁,2022年,5月20日,8點19分,星期三Naming
7、Indexes以“idx_”為前綴第12頁,共86頁,2022年,5月20日,8點19分,星期三Naming User-Defined Data Types直接取一個描述性的名字,不用前綴第13頁,共86頁,2022年,5月20日,8點19分,星期三Naming Primary Keys and Foreign Keys主碼用前綴”PK_”后跟表名;外碼前綴“FK_”+參照表名+”_”+被參照表名第14頁,共86頁,2022年,5月20日,8點19分,星期三Naming Constraints缺省值約束用前綴”DF_”,后跟表名和列名check約束用前綴”CK_”唯一性約束用前綴“UNQ_”第
8、15頁,共86頁,2022年,5月20日,8點19分,星期三Creating the Physical Model with SQL Server是時候生成數據庫了,本節先介紹SQL Server對象的命名規則(建議),再討論物理模型的建立.命名原則(Naming Guidelines)生成物理模型(Deriving the Physical Model) 實現商業規則(Implementing Business Rules in the Physical Model)第16頁,共86頁,2022年,5月20日,8點19分,星期三Deriving the Physical Model需要注意,
9、表和實體未必是一對一的關系,因為實體是對現實世界建模,而表要附合關系數據庫的理論建立物理模型的過程是,先為每個實體建一張表,然后再分裂或者組合表Using Entities to Model Tables Using Relationships to Model Keys Using Attributes to Model Columns第17頁,共86頁,2022年,5月20日,8點19分,星期三Using Entities to Model Tables(1)可以依賴軟件工具來把邏輯模式轉換為物理模型。也可以手工直接到SQL Server中去做。這里用的方法是先把所有實體分成若干個子模型(
10、submodel),這樣就不用一次面對所有的實體。為Mountain View Music建立的子模型有:Products 包含所有關于產品和供應商的細節Inventory 包含公司物理庫存的細節Orders 包含與訂購、支付和客戶相關的實體Web Session 包含實現web購物車相關的實體Lists 包含實現查找表的兩個實體MVM的完整模型與子模型舉例第18頁,共86頁,2022年,5月20日,8點19分,星期三Using Entities to Model Tables(2)在建立物理模型時,一次處理一個邏輯子模型.注意有的實體出現在多個子模型中,應把它放入真正所屬的子模型中處理.下邊
11、,首先處理子模型中的實體并找出其中物理模型中的位置,稍后再處理聯系.第19頁,共86頁,2022年,5月20日,8點19分,星期三Products Submodel有六個實體需要處理本例屬于比較簡單的情況,每個實體對應到一張表,初建的物理模型如下圖(一開始只有表名和主碼)第20頁,共86頁,2022年,5月20日,8點19分,星期三Products Submodel initial physical model第21頁,共86頁,2022年,5月20日,8點19分,星期三Inventory Submodel與Products子模型比較相似,也沒有多少工作可做第22頁,共86頁,2022年,5月
12、20日,8點19分,星期三Inventory Submodel initial physical model注意到Vendors 和 Products是第二次出現,對它們啥也不需要做第23頁,共86頁,2022年,5月20日,8點19分,星期三Orders Submodel這是整個模型中最復雜的部分,包含12個實體.如圖所示.其中,Products和Employees已經處理過了, Shipments, ShippingMethods, ShippingCarriers 和 Order Details可以直接轉換為表.對于Customers, 希望為每個客戶存儲多個地址,故需要把地址信息分離成
13、單獨的表,并與Customers建立聯系.如圖.Orders和Employees實體也有相似的地址問題,可以暫時為它們加上聯系.最后,還要考察Payments實體的子類型結構.第24頁,共86頁,2022年,5月20日,8點19分,星期三Payments實體的子類型結構(1)如前所述,實現子類型有三種方法:用一個表實現超類型和所有的子類型.為每個子類型建一張表,把超類型的數據加入到每個子類型表中.把超類型用一張表實現,各子類型用另外的表實現.( Implement the supertype as a table and all the subtypes as additional table
14、s.)這里選擇第一種方法.如果選用第二/三種方法,聯系將變得非常的復雜.由此得到Payments表結構如下:第25頁,共86頁,2022年,5月20日,8點19分,星期三Payments實體的子類型結構(2)注意到這個表中的問題,不少屬性是可選的(允許NULL值),如何保證三種支付方式一定存在一種呢?稍后討論商業規則時再說.第26頁,共86頁,2022年,5月20日,8點19分,星期三Orders Submodel physical model至此,也Order有關的所有表基本成形了,如下圖所示.第27頁,共86頁,2022年,5月20日,8點19分,星期三Web Session and Li
15、sts Submodel最后是兩個小的子模型,其中,web session只有一個新實體shopping cart, 它作為Customers 和 Products的連接,存儲客戶購買的產品,顯然向表轉換得加入Customers ID和Product ID.Lists Submodel中是兩個用于查找的表: Lists 和List Items, 它們的作用是為前臺應用提供一個場所存儲相關的數據列表,如訂單狀態或各種產品屬性. 只需要直接轉換.到此,所有的邏輯模型實體都找到了其物理模型中的歸屬,下邊處理聯系,即通過聯系來找出碼.第28頁,共86頁,2022年,5月20日,8點19分,星期三Der
16、iving the Physical Model需要注意,表和實體未必是一對一的關系,因為實體是對現實世界建模,而表要附合關系數據庫的理論建立物理模型的過程是,先為每個實體建一張表,然后再分裂或者組合表Using Entities to Model TablesUsing Relationships to Model Keys Using Attributes to Model Columns第29頁,共86頁,2022年,5月20日,8點19分,星期三Using Relationships to Model Keys已經看到,我們使用屬性objid作為每個實體的主碼名字。外碼的名字使用被引用
17、的表名跟上“_objid”。例:加上外碼的orders子模型第30頁,共86頁,2022年,5月20日,8點19分,星期三Deriving the Physical Model需要注意,表和實體未必是一對一的關系,因為實體是對現實世界建模,而表要附合關系數據庫的理論建立物理模型的過程是,先為每個實體建一張表,然后再分裂或者組合表Using Entities to Model TablesUsing Relationships to Model KeysUsing Attributes to Model Columns 第31頁,共86頁,2022年,5月20日,8點19分,星期三Using A
18、ttributes to Model Columns使用實體的屬性來對表屬性建模。需要注意的是,由于存在實體的拆分和組合,屬性也存在合并和分拆到相應表的問題。也需要注意數據類型,如果前邊的工作完全按照本課程中的要求做了,那么屬性建模非常簡單,建模軟件可以完成所有的事情-拷過去就行了。可以看出,買一個好的建模軟件是非常重要的。這樣,你要做的僅僅按照標準改名字。第32頁,共86頁,2022年,5月20日,8點19分,星期三Creating the Physical Model with SQL Server是時候生成數據庫了,本節先介紹SQL Server對象的命名規則(建議),再討論物理模型的建
19、立.命名原則(Naming Guidelines)生成物理模型(Deriving the Physical Model)實現商業規則(Implementing Business Rules in the Physical Model) 第33頁,共86頁,2022年,5月20日,8點19分,星期三在物理模型中實現商業規則在SQL Server中實現盡可能多的商業規則可能是一種比較好的方案。(因為我們不信任應用程序?)本節介紹利用SQL Server來實現商業規則的各種方案:Using Constraints to Implement Business Rules Using Triggers
20、to Implement Business RulesImplementing Advanced Cardinality第34頁,共86頁,2022年,5月20日,8點19分,星期三使用約束來實現商業規則約束是控制進入數據庫的數據的機制,這里介紹三種約束:Default - 為屬性提供缺省值Unique 指定屬性中的值保持唯一Check 根據要求自定義屬性應滿足的條件第35頁,共86頁,2022年,5月20日,8點19分,星期三Default Constraints添加default約束的代碼:ALTER TABLE dbo.tbl_employeeADD CONSTRAINT DF_stat
21、usDEFAULT 1 FOR status使用自動義函數來產生缺省值:ALTER TABLE dbo.tbl_orderADD CONSTRAINT DF_ordernumberDEFAULT dbo.udf_new_orderid() FOR ordernumber第36頁,共86頁,2022年,5月20日,8點19分,星期三Check Constraints用來保證裝入數據庫的數據確實是你所需要的。前邊介紹的customers表中,homephone, workphone, mobilephone都是允許為空的,但我們要求至少提供一個電話號碼,可以使用如下代碼添加check約束:ALTE
22、R TABLE dbo.tbl_customer WITH CHECKADD CONSTRAINT CK_phone_numberCHECK (homephone IS NOT NULL OR workphone IS NOT NULL OR mobilephone IS NOT NULL)第37頁,共86頁,2022年,5月20日,8點19分,星期三Unique Constraints用來保證列沒有重復值,可作用于一列或者多列.例:ALTER TABLE dbo.tbl_orderADD CONSTRAINT UNQ_ordernumber UNIQUE NONCLUSTERED (orde
23、rnumber)所以在選擇了主碼之后,要評估所有的候選碼,它們是實施唯一性約束的最好的對象.第38頁,共86頁,2022年,5月20日,8點19分,星期三在物理模型中實現商業規則在SQL Server中實現盡可能多的商業規則可能是一種比較好的方案。(因為我們不信任應用程序?)本節介紹利用SQL Server來實現商業規則的各種方案:Using Constraints to Implement Business RulesUsing Triggers to Implement Business Rules Implementing Advanced Cardinality第39頁,共86頁,20
24、22年,5月20日,8點19分,星期三Using Triggers to Implement Business RulesUsing triggers, you can write custom T-SQL code to run after something has happened to a table.Triggers can be set up to run after an INSERT, UPDATE, or DELETE or even instead of one of these actions.Keep in mind, however, that triggers fi
25、re as part of the transaction that started them, and they fire each time the action occurs. 可能導致性能低下.第40頁,共86頁,2022年,5月20日,8點19分,星期三MVM中的觸發器前文中用一個表來實現實體Payments,必須使用某種支付方式(支付方式不為空),當使用某種支付方式的時候,需要保證與該支付方式相對應的屬性不得為空。例如,當選用信用卡支付時,相關的屬性the credit card number, expiration date, type, and credit card veri
26、fication (CCV) code不能為空。可以用觸發器來實現這樣的要求。使用觸發器來實現商業規則可以得到更健壯的系統,盡管這些規則可以用應用程序代碼來實現。第41頁,共86頁,2022年,5月20日,8點19分,星期三在物理模型中實現商業規則在SQL Server中實現盡可能多的商業規則可能是一種比較好的方案。(因為我們不信任應用程序?)本節介紹利用SQL Server來實現商業規則的各種方案:Using Constraints to Implement Business RulesUsing Triggers to Implement Business RulesImplementin
27、g Advanced Cardinality 第42頁,共86頁,2022年,5月20日,8點19分,星期三Implementing Advanced Cardinality一到多的聯系相對簡單,前邊已經討論過,多到多的聯系可以通過兩個一到多的聯系和一個聯系表來實現。現在介紹一對一的聯系以及“更高級的”如一對二的聯系。例:一個學校有多個學院,若有規則一個學院只有一個院長,每個院長只能是一個學院的院長。可建立模型如下:顯然這是一個一對多的聯系,如何保證一對一的特性呢?即一個人只能是一個學院的院長可以使用觸發器來實現:第43頁,共86頁,2022年,5月20日,8點19分,星期三保證學院與院長一對
28、一聯系的觸發器ALTER TRIGGER trg_one_dean_per_collegeON tbl_collegeFOR INSERT, UPDATEASDECLARE college_count intSELECT college_count = COUNT(tbl_college.id)FROM tbl_collegeJOIN tbl_facultyON tbl_college.dean_id = tbl_faculty.idWHERE tbl_faculty.id = (SELECT dean_id FROM INSERTED)IF college_count 1BEGINRAISE
29、RROR(This faculty member is dean of another college,11,1)ROLLBACKEND第44頁,共86頁,2022年,5月20日,8點19分,星期三Pitfalls如果college表中數據很多,每次插入數據都要執行觸發器代碼,可能導致較差的性能。可以考慮使用instead of觸發器,在插入前評估本次插入。但每個表的每個動作只能定義一個instead of 觸發器。一個構建良好的商業規則層,表現總是優于觸發器。第45頁,共86頁,2022年,5月20日,8點19分,星期三Contents在SQL Server中建立物理模型(Creating
30、the Physical Model with SQL Server)索引方面的考慮(Indexing Considerations) 建立抽象層(Creating an Abstraction Layer in SQL Server)第46頁,共86頁,2022年,5月20日,8點19分,星期三Indexing Considerations索引的作用是加快檢索數據的速度。本節討論什么是索引,如何確定要建立的索引,如何實現。Indexing Overview Database Usage Requirements Determining the Appropriate IndexesImple
31、menting Indexes in SQL Server第47頁,共86頁,2022年,5月20日,8點19分,星期三Indexing Overview討論索引前,需要對SQL Server 2008如何把數據存儲到磁盤上有一個粗略的了解。數據庫以文件的形式存儲,每個數據庫至少有兩個文件(數據文件和日志文件各一)數據文件內部包含若干個extents(分區?),每個extents包含8個pages(頁面?),每個pages占用8K空間,每個page通常有自己的標識符(identifier),記錄在頁面上按插入數據庫的順序存儲。第48頁,共86頁,2022年,5月20日,8點19分,星期三Wha
32、t Are Indexes?By default, when you create a new table in a SQL Server database, the server assigns a starting number of extents to that table. When you start inserting data, it adds rows of data to the pages inside the extents.Simply put, an index is a referencing set of pointers to rows of data.Ind
33、exes physically exist on disk, and thus they take up disk space separately from, and in addition to, your actual table data.第49頁,共86頁,2022年,5月20日,8點19分,星期三索引的類型The two basic index types are clustered and nonclustered indexes. All indexes that you define on your tables will be one of these two types.
34、Clustered indexes actually restructure the data on disk.A nonclustered index is one that simply stores pointers to the pages that contain the rows of data you are looking for.SQL Server 2008還提供了其它類型的索引.第50頁,共86頁,2022年,5月20日,8點19分,星期三Other Index TypesUnique indexesIndexes with Included Columns : Cons
35、ider using this feature when youre building indexes to satisfy very specific queries and the index has gotten too large.XML IndexesSpatialFull-Text IndexesIndexed Views第51頁,共86頁,2022年,5月20日,8點19分,星期三Indexing Considerations索引的作用是加快檢索數據的速度。本節討論什么是索引,如何確定要建立的索引,如何實現。Indexing OverviewDatabase Usage Requ
36、irements Determining the Appropriate IndexesImplementing Indexes in SQL Server第52頁,共86頁,2022年,5月20日,8點19分,星期三Database Usage RequirementsReads versus WritesTransaction Data第53頁,共86頁,2022年,5月20日,8點19分,星期三Indexing Considerations索引的作用是加快檢索數據的速度。本節討論什么是索引,如何確定要建立的索引,如何實現。Indexing OverviewDatabase Usage R
37、equirements Determining the Appropriate Indexes Implementing Indexes in SQL Server第54頁,共86頁,2022年,5月20日,8點19分,星期三Determining the Appropriate IndexesReviewing Data Access PatternsBalancing IndexesCovering IndexesIndex StatisticsIndex Maintenance Considerations第55頁,共86頁,2022年,5月20日,8點19分,星期三Indexing C
38、onsiderations索引的作用是加快檢索數據的速度。本節討論什么是索引,如何確定要建立的索引,如何實現。Indexing OverviewDatabase Usage Requirements Determining the Appropriate IndexesImplementing Indexes in SQL Server 第56頁,共86頁,2022年,5月20日,8點19分,星期三Implementing Indexes in SQL ServerNaming Guidelinesidx_Customer_LastName_FirstNameCreating IndexesC
39、REATE NONCLUSTERED INDEX idx_Customer_LastName_FirstNameON Customer (LastName ASC, FirstName ASC)WITH (FILLFACTOR = 70,SORT_IN_TEMPDB = ON,ONLINE = ON)N IndexFileGroupFilegroups: Filegroups are a method of storing database data files in a separated fashion.Setting Up Index MaintenanceRebuilds versus
40、 Reorganization第57頁,共86頁,2022年,5月20日,8點19分,星期三Contents在SQL Server中建立物理模型(Creating the Physical Model with SQL Server)索引方面的考慮(Indexing Considerations)建立抽象層(Creating an Abstraction Layer in SQL Server) 第58頁,共86頁,2022年,5月20日,8點19分,星期三Creating an Abstraction Layer in SQL Server現在,可以把數據庫交給數據庫管理員進行實施和管理了。
41、但是,大多數的應用程序員都未必知道怎樣以最好的方式訪問和使用數據庫。因此,還應該做一項工作建立抽象層。What Is an Abstraction Layer?Why Use an Abstraction Layer?An Abstraction Layers Relationship to the Logical ModelAn Abstraction Layers Relationship to Object-Oriented ProgrammingImplementing an Abstraction Layer第59頁,共86頁,2022年,5月20日,8點19分,星期三What Is
42、 an Abstraction Layer?In general terms, an abstraction layer is a way of hiding the complex details about the functionality of a process.抽象層可以看成一個用戶接口,這里的用戶可能是一個程序。一般抽象層被實現為一個軟件層供用戶或其它程序訪問。例如windows硬件抽象層(HAL),OSI模型,開放圖形庫(OpenGL)等。在數據庫中,抽象層的作用是隱藏模式的復雜性。在SQL Server中的抽象層由視圖,存儲過程,用戶定義函數和幾個其它的SQL Server對
43、象組成。對于定義良好的抽象層,任何用戶或程序不能直接訪問物理表,任何事情都通過抽象層來處理。第60頁,共86頁,2022年,5月20日,8點19分,星期三Why Use an Abstraction Layer?抽象層屏蔽了數據庫結構的復雜性,至少有這幾個好處:提供了一種管理安全性的方法,該方法不損害數據庫的數據建立了可擴展的數據庫提供了最大限度的靈活性。第61頁,共86頁,2022年,5月20日,8點19分,星期三Security(1)建立抽象層為安全性控制提供了更多的選擇。表中可能包含敏感數據,涉及用戶隱私,還可能包含用戶登錄的口令。例如customer表。第62頁,共86頁,2022年,
44、5月20日,8點19分,星期三Security(2)可以創建視圖屏蔽數據。CREATE VIEW vw_customer_detailASSELECT email ,customer_id ,firstname ,lastname ,homephone ,workphone ,mobilephoneFROM tbl_customer第63頁,共86頁,2022年,5月20日,8點19分,星期三Security(3)另外,數據庫建好后,將來可能向其中添加隱私數據,例如身份證號碼。使用抽象層,必須額外添加才能訪問這些數據。(當然,前提是你在定義視圖時沒有使用 “select * ” 這樣的子句。)
45、第64頁,共86頁,2022年,5月20日,8點19分,星期三Extensibility and Flexibility(1)可擴展性指將來修改數據模型的方便程度。靈活性指在不造成重大影響的情況下可以修改模型多少內容。一般說來靈活的模型總是有好的可擴展性,但也并不總是如此。抽象層把應用程序與物理數據隔離開來,它幾乎允許你在不影響應用程序的情況下做任何事。只要所有的應用和用戶都通過視圖來讀數據,通過存儲過程來操縱數據,當修改發生時,只需要對視圖和存儲過程作出相應的調整。第65頁,共86頁,2022年,5月20日,8點19分,星期三Extensibility and Flexibility(2)修
46、改SQL Server代碼與修改應用程序代碼有什么區別?SQL 代碼不用編譯,意思是你可以隨時修改,而不用等到夜深人靜的時候。只有一個數據庫,而應用程序被修改后要重新編譯和部署。第66頁,共86頁,2022年,5月20日,8點19分,星期三An Abstraction Layers Relationship to the Logical ModelWhen its time to build your abstraction layer, you should find that it more closely ties to the logical model than to the phy
47、sical model.要記住邏輯模型比物理模型更加“用戶友好”。不要為一個表創建四個存儲過程分別用于插入、刪除、更新和查詢。而是應該創建一個過程來存儲實體,創建一個過程來插入和更新。第67頁,共86頁,2022年,5月20日,8點19分,星期三An Abstraction Layers Relationship to Object-Oriented ProgrammingOOP的核心概念是對象,而抽象層與邏輯模型緊緊地聯系在一起,其中心是實體. 實體與對象很接近,表現在實體的屬性與對象的屬性幾乎是一一對應的,但對象有方法(methods),實體沒有,反映到抽象層,可以用存儲過程,當對象要操縱
48、其數據,例如order對象要存儲訂單,可以調用一個存儲過程向數據庫插入.若你的數據庫與一個應用開發項目緊密地結合在一起, 建議使用對象模型來指導抽象層的建立.第68頁,共86頁,2022年,5月20日,8點19分,星期三Implementing an Abstraction Layer實現抽象層指在數據庫中創建對象(包括視圖,存儲過程和函數)來作為應用程序代碼與核心數據庫對象的中介.ViewsStored ProceduresOther Components of an Abstraction Layer第69頁,共86頁,2022年,5月20日,8點19分,星期三Views使用視圖的目的是想
49、基于用戶的需求以一種有意義的方式把實體展示給最終用戶.創建視圖時一定要清楚用戶能不能真正理解展示在其面前的數據.創建視圖來使應用程序邏輯更簡捷是一個好主意.避免使用”select *”語法和不帶值列表的insert語句.查看客戶(customer)數據的視圖第70頁,共86頁,2022年,5月20日,8點19分,星期三視圖的例子(1)CREATE VIEW vw_customersASSELECTobjid,email,customer_id,firstname,lastname,homephone,workphone,mobilephoneFROM tbl_customer第71頁,共86頁
50、,2022年,5月20日,8點19分,星期三視圖的例子(2)CREATE VIEW vw_customer_addressesASSELECTaddress_objid = objid,address_label,addressline1,addressline2,city,region,zipcode,customer_objidFROM tbl_addressWHERE customer_objid IS NOT NULL第72頁,共86頁,2022年,5月20日,8點19分,星期三Stored Procedures(1)存儲過程有著與視圖類似的規則。創建存儲過程的時候,考慮一下它們試圖影
51、響的實體。可以考慮創建一個標準來控制怎樣和為何創建存儲過程。正確實施存儲過程與環境和自身選擇有關,沒有絕對正確的答案。常見的做法是為每個實體創建一個存儲過程,它向所有相關的表更新或插入數據。第73頁,共86頁,2022年,5月20日,8點19分,星期三Stored Procedures(2)例:為MVM中的Customer實體存儲變更的步驟確定記錄是否已經存在、若不存在,則插入若存在,則更新返回插入或更新的信息相應的存儲過程如下:ALTER PROCEDURE prc_save_customeremail varchar(50),customer_id char(10),firstname v
52、archar(50),lastname varchar(50)第74頁,共86頁,2022年,5月20日,8點19分,星期三Stored Procedures(3),homephone varchar(15),workphone varchar(15),mobilephone varchar(15),addresses CustomerAddress ReadOnly,customer_objid int OUTPUTASMERGE tbl_customer AS pri_customerUSING(SELECT customer_id = customer_id)AS source_cust
53、omer(customer_id)第75頁,共86頁,2022年,5月20日,8點19分,星期三ON(pri_customer.customer_id =source_customer.customer_id)WHEN NOT MATCHED THENINSERT (email,customer_id,firstname,lastname,homephone,workphone,mobilephone)第76頁,共86頁,2022年,5月20日,8點19分,星期三VALUES (email,customer_id,firstname,lastname,homephone,workphone,m
54、obilephone)WHEN MATCHED THENUPDATESET email=email,firstname=firstname,lastname=lastname,homephone=homephone,workphone=workphone,mobilephone=mobilephone;第77頁,共86頁,2022年,5月20日,8點19分,星期三SELECT customer_objid = objidFROM tbl_customerWHERE customer_id = customer_id;MERGE tbl_address AS current_addressesU
55、SING(SELECT customer_objid = customer_objid,address_label,addressline1,addressline2,city,region,country,zipcode,is_deletedFROM addresses)第78頁,共86頁,2022年,5月20日,8點19分,星期三AS source_addresses(customer_objid,address_label,addressline1,addressline2,city,region,country,zipcode,is_deleted)ON(current_addresses.address_label =source_addresses.address_labelANDcurrent_addresses.customer_objid =source_addresses.customer_objid)第79頁,共86頁,2022年,5月20日,8點19分,星期三WHEN NOT MATCHED THENINSERT (address_label,addressline1,addressline2,city,regio
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 工作中的有效溝通與合作能力培養
- 工作中的時間管理藝術與實踐經驗分享
- 工作場所心理健康關懷
- 工業領域中的熱管理新材料探索
- 工程制造中的精確測量與數學計算
- 工作流程優化中的設備管理關鍵點
- 工廠教育培訓提升員工技能的新途徑
- 工程機械的遠程監控和故障診斷技術應用
- 工廠電氣節能改造的案例分析
- 工程機械的保養與維修技巧
- 2025年涼山州昭覺縣選聘社區工作者題庫帶答案分析
- 非法傾倒處置固體廢物整治實施方案
- 2025合同范本電子產品購銷合同
- 2025國開《調劑學(本)》形考任務1234答案
- 2025年通信工程與技術考試試卷及答案
- 2025年員工持股平臺合伙協議
- JG/T 100-1999塔式起重機操作使用規程
- 2024-2025學年下學期初中道德與法治七年級期末復習試卷(含答案)
- 防范和打擊非法金融活動競賽試題庫500題(含答案)
- 2025年中國ORC低溫余熱發電系統行業市場現狀及未來發展前景預測報告
- 2025年江蘇南通市通州區八年級生物二模試卷
評論
0/150
提交評論