聞怡
(長安大學(xué) 信息學(xué)院,陜西 西安710064)
ASPNETDB的理論分析與開發(fā)實踐
聞怡
(長安大學(xué) 信息學(xué)院,陜西 西安710064)
文中從理論方面論述了ASPNETDB的基本原理,基本結(jié)構(gòu),論述了以面向?qū)ο蠹败浖こ趟枷耄焖俑咝ч_發(fā)應(yīng)用軟件的基本思路,論述了后臺數(shù)據(jù)庫與前臺工作界面的關(guān)系與工作原理,論述了數(shù)據(jù)庫模板的擴(kuò)展,數(shù)據(jù)模式的規(guī)范化與數(shù)學(xué)基礎(chǔ),并從開發(fā)實踐方面實現(xiàn)了ASPNET的具體應(yīng)用。
ASPPNETDB;關(guān)系模式;范式;關(guān)系表;注冊;數(shù)據(jù)完整性
目前軟件開發(fā)已經(jīng)告別了傳統(tǒng)的手工勞動階段,進(jìn)入了工業(yè)化、組件化、分工協(xié)作、團(tuán)隊化作業(yè)的時代,在這個過程中技術(shù)人員經(jīng)過了不斷嘗試和大量探索,但是在軟件開發(fā)的工業(yè)化道路上還有許多亟待解決的問題,一是程序開發(fā)人員成長不規(guī)范,沒有嚴(yán)格按軟件工程思想進(jìn)行塑造;二是協(xié)作精神不強(qiáng),自我為中心現(xiàn)象比較嚴(yán)重,致使軟件結(jié)合不嚴(yán),兼容性較差;三是更有一些老的程序員、系統(tǒng)分析員還有較濃的傳統(tǒng)觀念習(xí)慣于個人手工作坊式開發(fā)等一些問題。為此,本文通過分析一個通用低層子系統(tǒng),并結(jié)合開發(fā)實踐,再次提出軟件工程的思想,向讀者展示出軟件快速開發(fā)的組件技術(shù)、模塊化思想和分工協(xié)作理念。
隨著計算機(jī)技術(shù)廣泛應(yīng)用到社會生活的各個領(lǐng)域,使得軟件開發(fā)需求持續(xù)攀升,已然不是一個手工個體的勞動,而是一個團(tuán)隊作業(yè)的、相互協(xié)作的集體的創(chuàng)造性勞動,因此快速開發(fā)、提高效率是一個亟待解決的問題。如何達(dá)到此目的,當(dāng)然面向?qū)ο蟮乃枷耄浖こ痰乃枷胧腔镜?、必需的,可是這些概念有時比較務(wù)虛,在Microsoft的ASP.NET中已經(jīng)按工程化思想提供了一個基礎(chǔ)架構(gòu),目的是讓用戶高效開發(fā),但是很多開發(fā)人員還是撇開這樣一個好的架構(gòu),從零開始,又回到了手工作坊式開發(fā)的原始階段,那么,如何才能將軟件工程思想具體化,本文就以Microsoft公司的ASP.Net開發(fā)平臺提供的ASPNETDB為基礎(chǔ),論述如何具體高效開發(fā)應(yīng)用軟件的基本思路與具體方法。
Microsoft Asp.net為了使用戶能按照軟件工程的思想高效開發(fā)應(yīng)用軟件,提供了一個基礎(chǔ)架構(gòu),其架構(gòu)的低層設(shè)計了一個完整通用的數(shù)據(jù)庫系統(tǒng)。
為適應(yīng)大多數(shù)應(yīng)用的通用需求,該數(shù)據(jù)庫對用戶數(shù)據(jù)的笛卡爾乘積作了具體分析,形成了十一張數(shù)據(jù)庫表,每張表都是一個元組的集合,都可以進(jìn)行關(guān)系代數(shù)的并、交、差、連接、投影、選擇等基本運(yùn)算。同時,每張表的列屬性都是不可再分的原子型數(shù)據(jù),因此都符合第一范式,即1NF,并且,每張表中的非主列屬性都依賴與該表主屬性,因此都符合第二范式,即2NF,最后,每張表中的非主列屬性集都無傳遞依賴于主屬性,因此都符合第三范式,即3NF。如圖1是從十一張表中隨意取出的一張表,可以看到,各個列屬性均是符合三大范式的。其它十張表也都符合三大范式,因此,這十一張表內(nèi)及表間都可以進(jìn)行嚴(yán)格的關(guān)系代數(shù)的各種運(yùn)算。
表間還建立了關(guān)系模型,有一對一關(guān)系,例如aspnet_Users與aspnet_Membership之間的關(guān)系,一對多關(guān)系,例如aspnet_Paths與aspnet_Applications之間的關(guān)系,多對多關(guān)系,例如aspnet_Users與aspnet_UserInRoles與aspnet_Roles之間的關(guān)系。
圖1 用戶表Fig.1 User table
數(shù)據(jù)庫共有十一張表,七十七個字段,表間關(guān)系如圖2所示。
圖2 表間關(guān)系Fig.2 Realation tables
上圖是整個數(shù)據(jù)庫的全貌,這個數(shù)據(jù)庫適應(yīng)了百分之九十以上的應(yīng)用需求,開發(fā)人員可以在上述基礎(chǔ)上根據(jù)自己應(yīng)用的需求進(jìn)行定制、擴(kuò)充。本文不可能論述該數(shù)據(jù)庫的所有方面,只將其主要方面的應(yīng)用進(jìn)行剖析,以期解決讀者所需。
如圖1是用戶表結(jié)構(gòu),該表是應(yīng)用的基礎(chǔ),幾乎所有的應(yīng)用軟件、網(wǎng)站系統(tǒng)都要用到用戶表,用戶登錄也是基本功能,為了規(guī)范開發(fā)者行為,提高開發(fā)效率,Asp.net以面向?qū)ο蟮姆椒?,提供了登錄組件如圖3所示,配合數(shù)據(jù)庫實體完成登錄功能,具體實現(xiàn)過程如下:aspnet_Users中存有用戶信息,搜集用戶輸入后比對正確與否,給出是否可以登錄的功能實現(xiàn),但是這個過程不需要用戶寫一句代碼就可以輕松實現(xiàn),高效完成。
用戶注冊相對復(fù)雜,收集用戶輸入后,存入相應(yīng)數(shù)據(jù)庫表中,如圖4所示,用戶名存入aspnet_Users表中,電子郵件存、密碼和確認(rèn)密碼都存入aspnet_Membership表中,在創(chuàng)建用戶時,還會生成一些后臺信息存入十一張表的相應(yīng)表中,參考圖2。這個過程首先要對用戶數(shù)據(jù)和生成的后臺數(shù)據(jù)進(jìn)行分析,以表間關(guān)系為紐帶,把不同的數(shù)據(jù)按照一定的規(guī)則存入數(shù)據(jù)庫相應(yīng)的表中,但是這個過程也不需要用戶寫一句代碼,就可輕松、高效完成。
圖3 用戶登錄Fig.3 User login
圖4 新建用戶Fig.4 New user
ASPNETDB數(shù)據(jù)庫有四張表是與應(yīng)用問題緊密相關(guān)的,其完整的結(jié)構(gòu)形式如圖5所示。Aspnet_Users是用戶信息表,aspnet_Membership是成員信息表,aspnet_Roles是角色信息表,aspnet_UsersInRoles是用戶與角色關(guān)系表,首先四張表都符合第2.1節(jié)所論述的理論理論基礎(chǔ),其次Aspnet_Users表與aspnet_Membership是一對一關(guān)系,這樣我們可以把這兩張表理解為一張大表,從表結(jié)構(gòu)內(nèi)容來看,已經(jīng)涵蓋了用戶信息的較全面的內(nèi)容,諸如用記標(biāo)識、用戶姓名、移動電話、用戶郵箱,用戶密碼及確認(rèn)密碼、密碼問題、問題答案、創(chuàng)建日期、用戶說明等等,不一一嗦述。但是如圖4所示,默認(rèn)創(chuàng)建創(chuàng)建用戶組件只使用了其中的四項內(nèi)容,這時有許多開發(fā)者由于沒有搞清楚數(shù)據(jù)庫結(jié)構(gòu),及后臺數(shù)據(jù)庫與界面組件之間的對應(yīng)關(guān)系,認(rèn)為Asp.net提供的模板不全,要么撇開基礎(chǔ)模板從零開始做起,要么自己另寫數(shù)據(jù)提供程序,所有這些做法都沒有從軟件工程的角度去繼承事先提供的高效模板,沒有以面向?qū)ο蟮乃枷肴ナ褂没驈氐资褂媒M件來開發(fā)應(yīng)用軟件,而是以傳統(tǒng)的面向過程的思想,以手工的方式從零或部分從零開始,逐句開發(fā)。
圖5 表結(jié)構(gòu)Fig.5 Table structure
如圖 5 中 Aspnet_Users,aspnet_UsersInRoles,asnet_Roles這三張表描述了用戶與角色之間的關(guān)系,以aspnet_UsersIn-Roles為中間關(guān)系表,決定了一個用戶可以有若干種角色,一個角色也可以適用于多個用戶這樣的關(guān)系。當(dāng)我們使用這個基礎(chǔ)結(jié)構(gòu)時,便可以很方便地把某個用戶與某種資源之間的權(quán)限關(guān)系進(jìn)行設(shè)置,使用的是網(wǎng)站管理工具,如圖6所示。不用寫一行代碼即可完成用戶的權(quán)限分配,否則,也得以手工的方式,以傳統(tǒng)的面向過程的思想,逐句開發(fā)。不但不夠規(guī)范,而且使軟件的健壯性很弱,開發(fā)效率很低。
圖6 網(wǎng)站管理Fig.6 Website management
針對部分開發(fā)人員出現(xiàn)的上述問題,文中提供以下思路與方法。
現(xiàn)在我們已經(jīng)用數(shù)學(xué)的高度把數(shù)據(jù)庫的基本原理搞清楚,從低層結(jié)構(gòu)的角度把數(shù)據(jù)之間的關(guān)系分析透徹,那么就可以針對我們自己應(yīng)用問題的需要,開發(fā)一個完善用戶信息的收集界面,把收集到的用戶信息,按表間關(guān)系的基本原則存入各相關(guān)數(shù)據(jù)庫表中,這里需要注意的是,一要理解各數(shù)據(jù)庫表的作用,邏輯上完整的數(shù)據(jù),到數(shù)據(jù)庫中要分散存入到不同數(shù)據(jù)庫表中,不能破壞數(shù)據(jù)的邏輯整體性;二是要分析透應(yīng)用數(shù)據(jù)的內(nèi)在聯(lián)系,存入表中的數(shù)據(jù)不能違反主、外鍵的數(shù)據(jù)完整性約束,做到這兩點是軟件開發(fā)人員的責(zé)任。
如果應(yīng)用問題復(fù)雜,基礎(chǔ)結(jié)構(gòu)所提供的數(shù)據(jù)項不能滿足需要,這時我們可以擴(kuò)展ASPNETDB的基礎(chǔ)結(jié)構(gòu),從aspnet_Users表以主鍵UserId向外擴(kuò)展一張表,我們暫且稱為用戶信息附加表,該表與aspnet_Users是一一對應(yīng)關(guān)系,即把用戶表橫向擴(kuò)展,以滿足應(yīng)用需求。
ASPNETDB數(shù)據(jù)庫基礎(chǔ)結(jié)構(gòu)只是一個通用結(jié)構(gòu),它涉及到用戶管理,諸如用戶的新增與刪除,用戶信息的修改;角色管理,諸如角色的新增與刪除,角色的修改;安全管理,諸如用戶的授權(quán),資源訪問規(guī)則等一般性問題,而解決最終用戶的專業(yè)應(yīng)用問題才是軟件開發(fā)的目的,那么怎么實現(xiàn)應(yīng)用數(shù)據(jù)數(shù)據(jù)庫和ASPNETDB的關(guān)聯(lián)就成為主要問題了。
首先,用戶應(yīng)用問題可能很復(fù)雜,數(shù)據(jù)結(jié)構(gòu)龐大,那么就要對用戶數(shù)據(jù)進(jìn)行分析、取舍,進(jìn)行規(guī)范化處理,最低應(yīng)符合三大范式要求,根據(jù)實際情況建立實體聯(lián)系模型,將復(fù)雜的數(shù)據(jù)關(guān)系,歸一化到一對一、一對多、多對多關(guān)系上來,在歸一化過程中,確定頂層表、中層表、低層表,至此,用戶數(shù)據(jù)便設(shè)計完成。類似于ASPNETDB數(shù)據(jù)庫各表中頂層表是aspnet_Users,低層表是 aspnet_PersonalitionAllUsers,aspnet_Profile,aspnet_Application,其它表都是中層表。
其次,應(yīng)用數(shù)據(jù)的關(guān)系表集的頂層表與ASPNETDB的頂層表以鍵的形式進(jìn)行關(guān)系,至于是一對一關(guān)聯(lián),還是二對多關(guān)系,抑或是多對多關(guān)系,還要根據(jù)實際應(yīng)用進(jìn)行確定。這樣,用戶應(yīng)用數(shù)據(jù)就和ASPNETDB數(shù)據(jù)關(guān)聯(lián)為一個數(shù)據(jù)庫整體,可以進(jìn)行任意的數(shù)據(jù)處理了。
最后,整體數(shù)據(jù)庫的應(yīng)用問題便是全體數(shù)據(jù)的增、刪、改、查操作,要符合關(guān)系數(shù)據(jù)庫的基本原則,保持?jǐn)?shù)據(jù)完整性、一致性、正確性、事務(wù)性。
在先進(jìn)的軟件工具輔助下,程序員已經(jīng)被極大的解放了,因此,充分利用現(xiàn)有工具,提高開發(fā)質(zhì)量和效率應(yīng)視為程序員的職責(zé),在面向?qū)ο蠛蛙浖こ趟枷胫笇?dǎo)下,以構(gòu)建而不僅是編寫代碼的方式來開發(fā)應(yīng)用軟件,應(yīng)該成為基礎(chǔ)而不只是概念。程序開發(fā)者應(yīng)該拿出更多精力分析應(yīng)用系統(tǒng)結(jié)構(gòu)的合理性、完整性、通用性、可擴(kuò)展性、安全性,而不是僅局限于從零開始于編寫程序代碼。本文從ASPNETDB這個基礎(chǔ)結(jié)構(gòu)出發(fā),論述了應(yīng)用軟件快速開發(fā)理論和實踐,以食讀者。
[1]王旭輝.Excel數(shù)據(jù)導(dǎo)入數(shù)據(jù)庫的設(shè)計實現(xiàn) [J].現(xiàn)代電子技術(shù),2013(12):71-73.
WANG Xu-hui,Import data from excel to database based on.Net Platform[J]Modern Electronic Technique 2013(12):71-73.
[2]趙娟.C++語言的軟件復(fù)用機(jī)制 [J].現(xiàn)代電子技術(shù),2012(15):73-74.
ZHAO Juan.Software using c++language mechanism[J].Modern Electronic Technique,2012(15):73-74.
[3][美]CharlesPetzold.Microsoft C#Windows Program[M],北京:北京大學(xué)出版社,2002.
[4][意]Dino Esposito ASP.NET 3.5核心編程[M].北京:清華大學(xué)出版社,2009.
[5]章立民.SQL Server2005數(shù)據(jù)庫開發(fā)實戰(zhàn)[M].北京:機(jī)械工業(yè)出版社,2009.
[6][美]Simon Robinson Professional C#,3rd Edition[M].北京:清華大學(xué)出版社,2005.
[7]王珊.數(shù)據(jù)庫系統(tǒng)原理教程[M].北京:清華大學(xué)出版社,2005.
The theoretical analysis and the development of the ASPNETDB practice
WEN Yi
(College of Information Engineering,Chang′an University,Xi'an 710064,China)
This paper discusses the basic principle of ASPNETDB from theory aspect,the basic structure,discusses the objectoriented and software engineering idea,the basic idea of fast and efficient development of application software,this paper discusses the background database and the front desk interface of work and working principle of the database template is discussed,and the extension,the standardization of the data model and the mathematical foundation,and from the aspects of development practices to achieve the ASPNET concrete application.
ASPPNETDB;relational schema;paradigm;a relational table;registered;data integrity
TP392
A
1674-6236(2014)17-103-03
2013-10-23 稿件編號:201310154
聞 怡(1971—),女,江蘇江陰人,工程師。研究方向:計算機(jī)網(wǎng)絡(luò)信息技術(shù)。