于海雯++婁芳
摘要:該文介紹了如何使用UML進(jìn)行數(shù)據(jù)庫設(shè)計。首先建立靜態(tài)模型,然后根據(jù)映射策略將模型映射為數(shù)據(jù)庫表,最后使用觸發(fā)器、約束等來優(yōu)化建好的數(shù)據(jù)庫,以達(dá)到數(shù)據(jù)庫可以高效運行的目的。
關(guān)鍵詞:數(shù)據(jù)庫;統(tǒng)一建模語言;映射策略
中圖分類號:TP311 文獻(xiàn)標(biāo)識碼:A 文章編號:1009-3044(2014)35-8353-02
The Database Design Based on IT Project Case
YU Hai-wen, LOU Fang
(College of Information Engineering NanChang University,Nanchang 330000,China)
Abstract: This paper introduces how to use UML to design the database.。First establishes the static model,then according to the mapping strategy,model is mapped to a database table,and finally to optimize the built database using triggers and constraints,in order to achieve the purpose of database can be operate efficiently.
Key words: db; uml; mapping strategy
近年來,高校計算機專業(yè)學(xué)生通過在企業(yè)實習(xí),或參加校企合作的工程實訓(xùn)以提高高校畢業(yè)生專業(yè)技能。該文以“江西微軟技術(shù)中心”的項目實訓(xùn)案例“基于SNS的學(xué)習(xí)社區(qū)平臺”網(wǎng)站的數(shù)據(jù)庫設(shè)計為例,簡要談?wù)勗擃愴椖康臄?shù)據(jù)庫設(shè)計、實現(xiàn)的過程和方法。
為方便下面結(jié)合案例講述數(shù)據(jù)庫設(shè)計的相關(guān)問題,先簡要闡述下“基于SNS的學(xué)習(xí)社區(qū)平臺”的最基本的用戶需求:SNS即Social Networking Services,專指旨在幫助人們建立社會性網(wǎng)絡(luò)學(xué)習(xí)平臺的互聯(lián)網(wǎng)應(yīng)用服務(wù)。所面向的對象主要是各校學(xué)生及教師等。公共社區(qū)里,學(xué)生可以獲取老師提供的學(xué)習(xí)資源和教學(xué)資料,可以到資料庫已分類的資料里面下載并查閱;游客可以進(jìn)入公共社區(qū)看社區(qū)論壇;個人社區(qū)里,用戶與用戶之間可以交流互動,用戶可以有自己的個人空間,可以建立自己的好友圈,等。
1 數(shù)據(jù)庫設(shè)計一般流程
值得一提的是,在如今以面向?qū)ο鬄橹髁鞯木幊趟枷胫校妹嫦驅(qū)ο蟮乃枷雭磉M(jìn)行數(shù)據(jù)庫設(shè)計同樣重要。
數(shù)據(jù)庫設(shè)計的一般流程是:首先建立數(shù)據(jù)靜態(tài)模型,其次建立起靜態(tài)模型到關(guān)系數(shù)據(jù)庫的映射,之后進(jìn)行優(yōu)化,這其中包含有對復(fù)雜關(guān)系的手工處理,比如,實體關(guān)系中的多對一的關(guān)系的處理,等等;采用UML進(jìn)行數(shù)據(jù)庫設(shè)計,所用軟件:StarUML或Rose等,采用UML建模表現(xiàn)設(shè)計思想的好處在于:能夠直觀、清晰地表達(dá)數(shù)據(jù)庫模型的系統(tǒng)結(jié)構(gòu),易于開發(fā),縮短系統(tǒng)開發(fā)周期。
2 建立靜態(tài)模型
靜態(tài)模型是系統(tǒng)中最基本、最重要的模型,靜態(tài)模型一般用UML的類圖來表示,用來描述系統(tǒng)中類和對象以及類和對象之間的關(guān)系。后續(xù)的設(shè)計工作,都是在得到了一個完整的類圖后,才進(jìn)行下一步的設(shè)計工作。
其中,UML(United Model Language)即統(tǒng)一建模語言,其用例圖也是需求階段常用的分析和表現(xiàn)工具之一。常用的UML軟件有ROSE、starUML、MS Visio等等。
2.1 尋找類
根據(jù)用戶需求,尋找類;
比如,根據(jù)“基于SNS的學(xué)習(xí)社區(qū)平臺”的最基本的用戶需求,一種方案是:將整個系統(tǒng)劃分為:“個人空間”和“學(xué)習(xí)社區(qū)”2個系統(tǒng),根據(jù)它們的功能需求,可以抽象出如下類:管理員admin、用戶user、好友friend、日志diary、相冊album、相片photo、聊天消息chatMessage、社區(qū)community、社區(qū)管理員communityManager、資源resources、資源分類resourceDispatch、主貼post、回帖replies等。
其中,“資源”和“資源分類”2個類,學(xué)生設(shè)計時,一般會把“資源分類”作為“資源”類中的一個屬性,但這樣做意味著以后資源有新的分類時就不好處理了;
另外,“帖子”,其實可以做成自反關(guān)系,這樣,就可以不需“回帖”類。
因此,上述類識別的結(jié)果并不一定是最佳的,這與用戶需求也有直接的關(guān)系。
2.2 建立類圖
建立類圖的目的是直觀地了解類之間的關(guān)系;所用軟件:PowerDesigner15。
一般類很少單獨存在,圖1中,每個類的屬性都是類自有的,與其他類的關(guān)系不需要定義在類屬性中。比如,如果需表示某資源是哪個用戶上傳的,傳統(tǒng)數(shù)據(jù)庫表中會在用戶表定義時給出一個字段,比如ResourceId來說明,但本案例中,CDM圖用了面向?qū)ο笏枷耄呀?jīng)在圖1中表示了“資源”與“用戶”之間的關(guān)系,故用戶表的12個屬性中,不需定義ResourceId屬性,因為在以后生成PDM圖時,軟件會根據(jù)類之間的關(guān)系以外鍵給出。
3 模型到數(shù)據(jù)庫映射
一般情況下,根據(jù)映射策略是將一個實體類映射為一個表或多個表。每個實體類屬性記錄的是有關(guān)實體的信息,比如前面步驟識別出來的類,就恰恰映射為數(shù)據(jù)庫中的1或多個表;這也正是面向?qū)ο笏枷朐跀?shù)據(jù)庫設(shè)計中的運用。
3.1 映射策略
3.1.1 將實體類映射為表
將實體類映射到表主要考慮兩個問題:一是每個表一般有個主鍵,主鍵要明確定義,并且建議定義為主鍵的屬性不要有業(yè)務(wù)意義;另一個是類之間的各種關(guān)系的處理。主鍵的定義一般可以有兩種方法:endprint
1) 為每個類增加一個對類無意義ID屬性, 俗稱“流水ID號”,并設(shè)為主鍵;其無意義和唯一性,對后期維護很有利;
2) 將實體類的某個屬性或?qū)傩缘慕M合設(shè)為主鍵。優(yōu)點:主鍵具有業(yè)務(wù)意義,比較容易理解;缺點:可能涉及到其他表的關(guān)系,即外鍵,一旦其他類發(fā)生變化,更改的工作量很大;在做架構(gòu)設(shè)計時一般不建議設(shè)置此類主鍵。
3.1.2 屬性映射為列
通常一個屬性映射為表中的一列,對于復(fù)雜屬性可能會映射為幾列。
3.1.3 關(guān)聯(lián)關(guān)系
類之間的關(guān)聯(lián)關(guān)系有一對一或一對多的關(guān)系,在關(guān)系數(shù)據(jù)庫中是通過外鍵FK來實現(xiàn)的。外鍵允許將表中的某一行與其它表中的行相關(guān)聯(lián)。
3.2 表映射
對每個類進(jìn)行分析,然后映射。由于涉及的表格較多,故略。
4 優(yōu)化
4.1 創(chuàng)建索引
什么時候建立索引?在哪些列上建立索引?一般來說如果表中的字段經(jīng)常被使用就應(yīng)創(chuàng)建索引,能加快數(shù)據(jù)庫的查詢速度。
數(shù)據(jù)庫索引大致分為四類:
唯一索引:使用關(guān)鍵詞UNIQUE創(chuàng)建,不允許具有索引值相同的行,在創(chuàng)建該索引后每次進(jìn)行Update和Insert操作時都會進(jìn)行檢查。
主鍵索引:當(dāng)屬性被設(shè)置為主鍵后,數(shù)據(jù)庫管理軟件會為其設(shè)置主鍵索引,即主鍵不能為NULL,且不允許重復(fù)。
聚集索引:是一種索引,按某種規(guī)律排序,表中各行的物理順序與鍵值的邏輯順序相同,對于表中檢索操作頻繁的列,設(shè)置聚集索引,表中只能包含一個聚集索引,即確保索引列的唯一性,不特別說明的話,主鍵列默認(rèn)為聚集索引。
非聚集索引:意思是數(shù)據(jù)行不按非聚集索引鍵的順序排序和存儲,表中各行的物理順序與鍵值的邏輯順序也不匹配。
4.2 創(chuàng)建CHECK約束
CHECK 約束指約束表中某一個或某些列可接受的數(shù)據(jù)值或者數(shù)據(jù)格式。比如:“基于SNS的學(xué)習(xí)社區(qū)平臺”的用戶表有性別屬性,顯然性別只接受“男”、“女”,創(chuàng)建CHECK約束:CONSTRAINT ck_Sex CHECK (Sex in {‘男,女})。
4.3 創(chuàng)建觸發(fā)器
觸發(fā)器(Trigger)實際是個特殊的存儲過程,其執(zhí)行是由事件來觸發(fā),一般對表進(jìn)行Insert、Delete、Update操作時就會被激活執(zhí)行。
5 結(jié)束語
校企合作的此類實訓(xùn)項目中,進(jìn)行數(shù)據(jù)庫設(shè)計與實現(xiàn)所用知識、技術(shù),基礎(chǔ)來自于校內(nèi)所學(xué),但又遠(yuǎn)高于校內(nèi)簡單的數(shù)據(jù)庫理論知識,是學(xué)生按軟件工程流程做項目開發(fā)最重要的一個環(huán)節(jié),數(shù)據(jù)庫設(shè)計的好壞,直接影響后期軟件開發(fā)和維護。
參考文獻(xiàn):
[1] 古樂聲.JavaWeb程序設(shè)計與項目實踐[M].電子工業(yè)出版社,2011.
[2] 陳軼.Web開發(fā)技術(shù)實用教程[M].清華大學(xué)出版社,2011.
[3] 廖若學(xué).JSP高級編程[M].機械工業(yè)出版社,2001.endprint