SQL Server數(shù)據(jù)庫與.NET聯(lián)通概述
此文章主要向大家講述的是SQL Server數(shù)據(jù)庫與.NET與Visual Studio的聯(lián)通的介紹,隨著SQL Server 2008數(shù)據(jù)庫的的上市,微軟另兩款開發(fā)產(chǎn)品.NET Framework 3.5與Visual Studio 2008也同步發(fā)布中文版Service Pack 1。
包含傳聞已久的微軟ORM(Object Relational Mapping)解決方案──ADO.NET Entity Framework,而LINQ,隨著SQL Server 2008的上市,微軟另兩款開發(fā)產(chǎn)品.NET Framework 3.5及Visual Studio 2008也同步發(fā)布中文版Service Pack 1,包含傳聞已久的微軟ORM(Object Relational Mapping)解決方案──ADO.NET Entity Framework,而LINQ(Language Integrated Query)也將增加支持存取Entity Framework對(duì)象的LINQ To Entities。
此外, ADO.NET Data Services也是新的,包含比SOAP(Simple Object Access Protocol)通訊協(xié)議更簡(jiǎn)單的REST(Representational State Transfer)存取模式,可滿足傾向簡(jiǎn)單應(yīng)用Web Services的Web開發(fā)者。
事實(shí)上,Visual Studio必須升級(jí)才能與SQL Server 2008無縫掛接,微軟的.NET與SQL Server研發(fā)團(tuán)隊(duì),有越來越緊密合作的趨勢(shì),操作SQL Server數(shù)據(jù)庫***用的開發(fā)工具是Visual Studio,而.NET Framework目前支持最完整的數(shù)據(jù)庫也是SQL Server數(shù)據(jù)庫,可以看出微軟企圖利用彼此捆綁的策略,拉抬兩者市場(chǎng)份額的野心。
而SQL Server 2008本身跟程序開發(fā)有關(guān)的部分,比較重要的改變是增加許多新的數(shù)據(jù)方式,包括FileStream及Geography、Geometry等空間數(shù)據(jù)格式。FileStream可以存放文件的Metadata,并指定存放文件的實(shí)體目錄。而空間數(shù)據(jù)方式則包含許多函數(shù),幫助開發(fā)者處理點(diǎn)/線/面的空間計(jì)算。
對(duì)象與關(guān)系型數(shù)據(jù)對(duì)應(yīng)的解決方案
LINQ與ADO.NET Entity Framework在微軟是由兩個(gè)不同的團(tuán)隊(duì)研發(fā),功能上看似有些重迭,但實(shí)際上是要解決現(xiàn)今程序開發(fā)上,所面臨的不同問題。
LINQ提供統(tǒng)一操作各種數(shù)據(jù)集合的模式;而ADO.NET Entity Framework則是提供對(duì)象導(dǎo)向開發(fā)者,對(duì)象與關(guān)系型數(shù)據(jù)對(duì)應(yīng)的解決方案。
相對(duì)于對(duì)象導(dǎo)向程序開發(fā)的思維,在發(fā)明SQL的年代,并沒有對(duì)象導(dǎo)向的觀念,所以SQL語法一點(diǎn)也不對(duì)象導(dǎo)向。而習(xí)慣用對(duì)象思考,并希望對(duì)象導(dǎo)向觀念與關(guān)系型數(shù)據(jù)庫可以平順整合的開發(fā)者,會(huì)希望有一套ORM解決方案。
而ORM的目的,是企圖幫助開發(fā)者從對(duì)象導(dǎo)向程序開發(fā)的角度,單純地思考類別之間的繼承及參照關(guān)系,而不需要知道實(shí)體的數(shù)據(jù)是如何分散在不同的數(shù)據(jù)表,以及對(duì)象背后對(duì)應(yīng)哪些數(shù)據(jù)表,甚至SQL指令的組成,也交由平臺(tái)處理。
ADO.NET Entity Framework就是微軟的ORM解決方案,事實(shí)上,ORM在Java及PHP等陣營早有對(duì)應(yīng)的解決方案,所以微軟在這方面的腳步并不算是很快。
ORM的價(jià)值
ADO.NET Entity Framework中的“Entity(數(shù)據(jù)實(shí)體)”,是指對(duì)象化的數(shù)據(jù)記錄。使用數(shù)據(jù)實(shí)體而不直接連接數(shù)據(jù)庫的好處,在于開發(fā)者不必使用SQL指令,而是透過對(duì)象的方法(Method)存取數(shù)據(jù)庫,藉以簡(jiǎn)化程序設(shè)計(jì)的復(fù)雜度,并提升程序代碼重復(fù)使用的機(jī)會(huì)。
以客戶數(shù)據(jù)為例,在數(shù)據(jù)庫有Customer和Customer Detail兩個(gè)數(shù)據(jù)表(Table),運(yùn)用ADO.NET Entity Framework,可以把2個(gè)數(shù)據(jù)表對(duì)應(yīng)(Mapping)成一個(gè)Customer數(shù)據(jù)實(shí)體,也就是對(duì)象類別,開發(fā)者只需呼叫Customer類別的Insert、Update和Delete等Method,并輸入必要的參數(shù),那么ADO.NET Entity Framework即自動(dòng)產(chǎn)生對(duì)應(yīng)的SQL語法,一對(duì)多地新增、修改及刪除Customer和Customer Detail數(shù)據(jù)表中的數(shù)據(jù)。
對(duì)象與數(shù)據(jù)表的對(duì)應(yīng),除了一對(duì)多的情況,也可能是多對(duì)一甚至多對(duì)多的復(fù)雜對(duì)應(yīng)。例如一個(gè)Employee數(shù)據(jù)表,在業(yè)務(wù)面因?yàn)閷傩圆煌?,而拆成Manager、Employee和新人等3個(gè)不同的類別。
由于ORM需要對(duì)應(yīng)SQL Server數(shù)據(jù)庫與對(duì)象的關(guān)聯(lián),還要處理對(duì)象之間的繼承關(guān)系,使得應(yīng)用上存在一定的復(fù)雜度,因此,設(shè)計(jì)工具扮演的角色,相形之下變得重要,如果它無法使對(duì)應(yīng)關(guān)系的設(shè)定,盡可能地簡(jiǎn)單而直覺,就會(huì)減損使用ORM的好處。
Visual Studio 2008升級(jí)至SP1之后,將提供可視化的精靈及操作工具,處理數(shù)據(jù)實(shí)體與數(shù)據(jù)庫的對(duì)應(yīng)。主要的功能包括透過實(shí)體數(shù)據(jù)模型(Entity Data Model)導(dǎo)入現(xiàn)有數(shù)據(jù)庫的數(shù)據(jù)表,再以此為基礎(chǔ),設(shè)定數(shù)據(jù)表之間的關(guān)聯(lián),然后經(jīng)由概念模型(Conceptual Model)處理數(shù)據(jù)表與數(shù)據(jù)實(shí)體兩者的對(duì)應(yīng)。
這些作法的背后,實(shí)際上底層是透過3個(gè)XML文件記錄數(shù)據(jù)實(shí)體、數(shù)據(jù)庫結(jié)構(gòu)及兩者之間的對(duì)應(yīng)關(guān)系。不過,Visual Studio的操作界面,將透過圖形化的設(shè)計(jì)工具簡(jiǎn)化對(duì)應(yīng)的難度。
概念模型與ER Model不同
微軟所謂的概念模型,與過去設(shè)計(jì)數(shù)據(jù)庫架構(gòu)常見的ER Model(Entity Relationship Model,實(shí)體關(guān)系模型)并不相同。
ER Model以圖形化的方式,描述實(shí)體數(shù)據(jù)表之間的一對(duì)一、一對(duì)多或多對(duì)多關(guān)系,是屬于實(shí)體的數(shù)據(jù)庫模型。而概念模型則貼近系統(tǒng)分析階段的思維,以業(yè)務(wù)的角度看待數(shù)據(jù)實(shí)體。
從這里也可以看出對(duì)象導(dǎo)向與SQL Server數(shù)據(jù)庫設(shè)計(jì)理念的不同之處。
數(shù)據(jù)庫設(shè)計(jì)時(shí),為了避免同樣的數(shù)據(jù)重復(fù)存在于多個(gè)數(shù)據(jù)表,造成空間的浪費(fèi)及維護(hù)的困難,所以必須歷經(jīng)正規(guī)化過程。
例如員工基本數(shù)據(jù)包含親屬數(shù)據(jù),但設(shè)計(jì)關(guān)系型數(shù)據(jù)庫時(shí)為了正規(guī)化,親屬數(shù)據(jù)可能被拆出來,成為另一個(gè)數(shù)據(jù)表,而兩者透過主鍵(Primary Key)和外部索引鍵(Foreign Key)建立一對(duì)多關(guān)系。
使用ER Model就會(huì)是兩個(gè)數(shù)據(jù)表透過一對(duì)多關(guān)系連接,而進(jìn)入概念模型之后,就對(duì)象導(dǎo)向的觀點(diǎn),將是以一個(gè)數(shù)據(jù)實(shí)體代表員工,其中會(huì)有一個(gè)屬性是親屬數(shù)據(jù)的集合。而在概念模型的背后,是員工這個(gè)數(shù)據(jù)實(shí)體,一對(duì)多地對(duì)應(yīng)到數(shù)據(jù)庫的員工數(shù)據(jù)及親屬數(shù)據(jù)兩個(gè)數(shù)據(jù)表。
【編輯推薦】
- SQL Server數(shù)據(jù)轉(zhuǎn)換服務(wù)利用與導(dǎo)入式格式的描述
- SQL Server性能進(jìn)行提高的4項(xiàng)技術(shù)概述
- 正確維護(hù)Sql Server表索引的2個(gè)步驟
- SQL Server數(shù)據(jù)庫的N多注意事項(xiàng)
- SQL ServerCoalesce的大量使用的具體描述