五黑小隊資料庫設計文件心得得體-HNU-軟體工程導論
資料庫設計文件心得體會
一、概要
我們的資料庫設計是一個由簡單到複雜、由粗略到具體的過程。我們用的是power designer進行UML圖設計。根據需求分析,我們設計了13張表,對應了3類使用者的具體功能。我們按照原型的執行,將所有的操作流程過了一遍,從中分析我們可能需要用到的表並進行記錄,對整個原型記錄完成之後,通過列出這些表中所有的屬性,我們對每張表的必要性進行了分析,並判斷這些表之間的關係,思考怎麼將其相互連線起來。
二、資料庫設計應該遵循的原則
-
對需求的認知完全沒有歧義。比如我們在設計久坐提醒表時,討論課指導老師認為這張表並沒有存在的必要,但是經過對需求的分析,我們發現,由於需要記錄不同助理的不同時間設定,所以還是需要這樣一張表,否則這個功能無法實現;
-
熟練而且正確的E-R圖繪製,明確改圖是表明實體和關係的圖,實體表示要在資料庫裡儲存的類,關係表示類與類之間的相互關係,關係主要有一對一,一對多,多對多。在繪製過程中,我們發現,繼承關係通常可以用一對一表示,而一對多或者多對多通常表示類之間的使用關係;而根據指導老師的意見,當兩張表為一對一關係時,我們沒有必要把它們分開,可以直接合併為一張表。
-
在設計時要做到高度的抽象,對內容或者關係相類似的內容抽象為一類實體,在分類時可以抽象出一個“類”的實體,與要分類實體之間進行多對多關係對映,明確哪些是必須要進行儲存的實體;
三、設計過程詳情
由於我們都是初學者,在這個資料庫設計的過程中,我們前後經過了很多次討論修改,即使是最終基本上定下來的時候,還是會對資料庫進行修改,比如增加一些欄位或者刪掉一些欄位,來適應我們的需求。當時我們是以編輯共享的Excel表的形式來完成這一步,當時針對一些表,組員幾番爭執不下,尤其是對醫生資訊表與患者資訊表。最後,我們靜下心來,綜合各種條件,根據各自所提出的理由,互相說服,完成這些欄位的確定。完成這些表後,我們與指導老師周老師進行了交流,老師首先指出,我們使用的工具不對,用Excel完全體現不出這些表之間的關係,用excel記錄資料會有很大的模糊性和不確定性,資料的靈活性也會受到很大的限制。同時,我們既然已經下載了PowerDesigner,這個工具正好適合現階段的設計,用excel太敷衍了,於是我們之後又根據excel表在powerdesigner裡建立了CDM、PDM模型。
在資料庫設計正式開始之前,小組成員各自根據對專案的理解進行了簡單的設計,整理出了專案資料庫中大概有哪些表,表中有哪些屬性和約束;大家都認為有了大概的資料庫設計,後面的任務進行的會很順利,但是這個資料庫設計框架只起到了一點點參考作用,緊接著我們又開了兩次線下會議進行了長時間的完善和改動。在資料庫設計時,我們和指導老師周老師,交流了很多次,給了我們很多寶貴的意見,比如,表的結構方面應該邏輯清晰,針對需求進行表的設計,要考慮需求點是否真的可行有效。這也很大程度上推進了我們資料庫設計的進度以及設計方案的改良。
在資料庫表初步設計後,我們進行了小班展示。胡老師給予了我們改進的意見,比如登入表的設計不夠合理,應當將3張不同使用者的登入表合併為一份。在此基礎上,我們又對我們的資料庫進行了一次小規模的改動。
因為資料庫的設計會直接影響到頁面資料的顯示的操作難度,所以我們在設計時也是再三斟酌才得到了最終的成品。
針對我們開發的小程式的核心,即提供給3類使用者的主要功能,我們也是十分慎重,花費了很多時間來考慮其構成。考慮到患者端的預約功能,我們設計了預約表;考慮到醫生端檢視預約的功能,我們設計了患者預約列表;考慮到助理端提供實時諮詢的功能,我們設計了聊天記錄表……
值得一提的是,我們在商討助理端自我提醒的功能時,一直糾結要不要加一個自我提醒表。開始想的是系統自動提醒,就不需要在從資料庫讀取資料。但之後又考慮到會有不同的助理,那麼如何判斷是誰的自我提醒,這就不太好實現了。於是,最終還是將其設計為一張自我提醒表。
歸根到底,我們在資料庫設計上採取的方法是:
針對某一頁面進行思考:它實現的功能是什麼?它需要呈現哪些資料?資料庫中應該儲存哪些資料?頁面和資料庫之間的操作邏輯是否簡單和明確?
在此基礎之上,進行表的增刪以及欄位與資料型別的設定。
通過這些邏輯性,合理性的思考,我們在討論中提高了自己思維的嚴謹性,更強化了我們對於自己的觀點進行清晰表達的能力!我們相信,這次團隊專案中獲得的經驗一定會讓我們在當下收穫,未來受益。
四、總結:
我們要根據原型介面判斷資料庫設計的是否完整,看看這個介面所需要的資料,是否能夠從資料庫取出。如果全部都能取出,那麼資料庫完整性就保證了,後面的就是考慮是否合理,如何提高效率,在設計資料庫表中的具體欄位時,我們需要考慮之後它們的用途,比如,對於寬度的設計,我們儘量留出一個剩餘空間而不是剛好夠。
而且表的結構方面應該邏輯清晰,針對需求進行表的設計,要考慮需求點是否真的可行有效。這也很大程度上推進了我們資料庫設計的進度以及設計方案的改良。因為資料庫的設計會直接影響到頁面資料的顯示的操作難度,所以我們在設計時也是再三斟酌。設計相關資料表時,我們允許有資料冗餘,這樣犧牲了空間換取了效率,但需要注意的是,一定不能有資料項之間的矛盾,當有多種方式進行資料處理時,應該綜合多個方面進行考慮,選取最適合我們專案的解決方案。
資料庫的設計是與需求緊密結合的,在設計資料庫之前要對需求有完善的確立,將需求討論明白了才能將資料庫給設計好,如果需求沒有確定,就設計了資料庫,那麼設計出來的資料庫很可能是存在很大問題,需要大改的。
在使用power designer進行cdm轉pdm的時候,如果兩張表是一對一關係,那麼在設計表的時候可以使用外來鍵來聯絡兩張表,但如果是一對多關係或多對多關係,並且需要在關係中新增屬性來記錄的話可以用association來設計。
在設計資料庫的時候要注意對主鍵的把握,對於不同情況的表,主鍵應該有不同的設計方法。比如對於基本不會變動的表,如個人資訊表,認證表,這些表在建立時就會把相應的資料匯入並且這些資料在後續基本不會變動。那麼這個時候我們就可以考慮使用邏輯主鍵。比如自增型主鍵,作為外來鍵的話也很方便。例如要註冊一個使用者,如果把賬戶設定為自增型主鍵,通過主鍵索引可以一下就知道是否是重複。
在設計表的時候對於每個欄位,要注意長度的設定,要儘量多的考慮各種情況,防止後續發生資料越界的情況。
要明確資料庫的功能與職責,雖然資料庫的設定可以極大的方便我們,但是資料庫不是萬能的,它僅僅是被用來儲存資料的的倉庫,我們不應該讓它來完成邏輯過於複雜的問題,對於這些邏輯複雜的問題,我們應該用程式碼來實現。