專案名稱:家譜識別系統
指導老師:林紅利
開發隊名:湘新鄂魯代表隊
開發團隊:梁原韶【pm】、郭琪、馬玉梅、呂斐、竇越群
對於我們團隊以及團隊成員來說,這是我們第一次進行資料庫設計,花費了一兩周的時間,經過交流討論、設計、尋找不足、完善等一系列過程,終於完成了契合專案需求的資料庫設計。俗話說萬事開頭難,但同時,好的開始也是成功的一半。成功的資料庫設計是之後軟體開發的基礎,我們的第一次資料庫設計也會為之後的其他資料庫的設計提供寶貴的經驗與深刻的教訓。有鑑於此,我們在這裡將資料庫的設計心得記錄。
資料庫設計的基本步驟分為需求分析階段、概念結構設計階段、邏輯結構設計階段、資料庫物理設計階段、資料庫實施階段、資料庫的執行和維護階段。簡單總結如下:
(1)需求分析階段:需求收集和分析,得到資料字典和資料流圖。
(2)概念結構設計階段:對使用者需求綜合、歸納與抽象,形成概念模型,用e-r圖表示。
(3)邏輯結構設計階段:將概念結構轉換為某個dbms所支援的資料模型。
(4)資料庫物理設計階段:為邏輯資料模型選取乙個最適合應用環境的物理結構。
(5)資料庫實施階段:建立資料庫,編制與除錯應用程式,組織資料入庫,程式試執行。
(6)資料庫執行和維護階段:對資料庫系統進行評價、調整與修改。其中需求分析階段需要我們準確了解與分析使用者需求(包括資料與處理),是整個設計過程的基礎,是最困難、最耗費時間的一步,我們需要在之前需求分析的基礎上,進一步了解整個專案需要儲存哪些實體的資料,這些資料有哪些屬性,這些資料和屬性的特點是什麼。然後要確定實體之間的關係,也就是我們常說的一對一,一對多以及多對多。只有確定了這個關係,才能設計出乙個業務邏輯上不會出錯的資料庫。
需求分析之後,就是概念結構的設計了,這是整個資料庫設計的關鍵。設計過程中我們使用到的工具就是 er 圖。er 圖由矩形、菱形、橢圓形和線段組成,使我們可以將需求分析出來的實體、屬性、實體間的關係由圖體現出來,讓人更加方便看懂理解。將 er 圖畫出來後,就是使用設計正規化去做更詳細的設計了。
感謝前人為我們總結了設計的規範,讓我們可以比較簡單的做邏輯結構設計。邏輯結構設計是將概念結構設計階段完成的概念模型,轉換成能被選定的資料庫管理系統支援的資料模型。這裡主要將e-r模型轉換為關係模型。在這裡,我們主要遵循第一正規化、第二正規化、第三正規化和bc正規化。通過設計正規化的指導設計,對錶進行拆分或合併,可以得到乙個完善且邏輯清晰的資料庫設計。
在這之後,就是資料庫物理設計的階段了,我們要為邏輯資料模型選取乙個最適合應用環境的物理結構(包括儲存結構和訪問方法)。選擇理論落腳點。第一步是選擇dbms系統及其儲存引擎,這裡我們使用mysql和innodb 儲存引擎。之後就是定義資料庫、表、欄位的命名規範,選擇合適的字段型別。
然後是資料庫實施階段,運用dbms提供的資料語言、工具及宿主語言,根據邏輯設計和物理設計的結果,建立資料庫,編制與除錯應用程式,組織資料入庫,並進行試執行。理論應用於實踐。
最後是資料庫的執行和維護階段,在資料庫系統正式投入執行的過程中,必須不斷地對其進行調整與修改。
3.1 準備
在進行設計前先明確資料庫設計的具體過程,這樣會使我們在設計時少走許多彎路且最終結果更加規範與完善。了解流程之後,我們又去向指導老師尋求了一些建議,林老師向我們指出了她認為必須要有的部分,這也是我們之後資料庫設計的重心所在。最後我們經過討論,進行了細緻的分工,防止有人渾水摸魚,大大提高了設計效率。
3.2 設計思路
根據需求分析與老師的指導,我們對資料庫需要儲存的實體有了大概的了解,之後就是需要進行邏輯及概念設計,通過er圖確定需要儲存的實體,然後確定其需要的字段,之後確定實體間的聯絡,然後就是通過powerdesigner確定表及字段的命名規範以及字段型別了。之後我們再拿設計好的pdm請指導老師指出不足,進一步優化。
3.3設計過程
因為本專案是家譜識別系統,所以最重要的是使用者上傳的家譜以及家譜經過識別、複核、結構化之後從家譜中提取到的人物資訊,這也是在跟老師交流的時候老師反覆強調的,這裡我們通過家譜表和家譜人物表來儲存這些資訊。為了成功進行識別,需要進行字型檔管理,記錄在字型檔表中。為了對識別、複核過程進行管理,我們需要記錄未識別的家譜、已識別未開始複核的家譜、已識別未完成複核的家譜、已識別已完成複核的家譜。這些通過未識別表和識別表來記錄,其中複核狀態通過識別表中的狀態字段來記錄。此外還需要乙個上傳表來記錄具體家譜是由哪個使用者上傳的。提到使用者,因為該系統面向個人使用者與企業使用者,所以需要使用者表來儲存使用者資訊,為了使使用者有更好的體驗,提供儲存影象的表來使得使用者能夠自定義頭像,使用者還可以對系統就功能及使用等方面進行反饋,記錄在反饋日誌表中。最後為了便於管理統計,新增登入日誌表記錄使用者的登入時間。
由此我們設計出了要儲存的實體、字段以及實體間的關係,具體見下方er圖:
之後就是進行資料庫的物理設計了,根據設計好的er圖,物理設計就相對簡單寫了,不過需要注意資料型別,使其能夠完整儲存欄位且不造成空間以及效能上的浪費。經過老師糾錯,進行完善之後的具體的設計如下:
之後我們根據邏輯設計和物理設計的結果,建立資料庫,編制與除錯應用程式,組織資料入庫,並進行試執行。
1.完善的資料庫設計需要不斷地探索、驗證、完善,因此需要有足夠的耐心。
2.資料庫的設計關係到整個軟體的方方面面,因此需要有系統的思維以及全面的視野,團隊間的交流補充更是不可或缺。
2.資料庫設計的設計過程包括:需求分析、概念結構設計、邏輯結構設計、物理結構設計、資料庫的實施和資料庫的執行和維護。按照過程進行設計會更加高效、系統、完善地實現資料庫的設計。
3.要多與老師溝通交流,老師所具備的知識和經驗,能幫助尋找到設計中的缺漏之處,以及在我們遇到困難時指點迷津。
5.資料庫的意義其實就是將系統執行時不可或缺的資料進行持久化的儲存,所以通俗來講,資料庫的設計其實就是全面地尋找系統執行時需要儲存的資訊,對資訊世界進行建模,抽象為乙個個資料實體,通過字段儲存實體相關資訊,通過關係表現系統執行時實體間的關係,最後確定合適的資料庫和儲存引擎,根據知識及經驗,確定合適的資料庫名、表名、欄位名以及字段型別,最後再根據業務需求新增相關約束。
6.團隊間合理的分工、融洽的氣氛以及積極的討論也是至關重要的,良好的協作模式能夠取得事半功倍的效果。
7.因為在設計資料庫的時候資料庫課程的知識還沒有學到很多,通過這次課程設計發現這其中需要的很多知識我們沒有接觸過,去圖書館查書籍資料的時候發現我們前邊所學到的僅僅是皮毛,還有很多需要我們掌握的東西我們根本不知道。同時也發現有很多已經學過的東西我們沒有理解到位,不能靈活運用於實際,不能很好的用來解決問題,這就需要我們不斷的大量的實踐,通過不斷的自學,不斷地發現問題,思考問題,進而解決問題。在這個過程中我們將深刻理解所學知識,同時也可以學到不少很實用的東西。
NOI2009重慶代表隊選拔賽
noi2009重慶代表隊選拔賽 試題一覽 題目名稱 中位數葉子的顏色 跳舞迴圈賽 題目代號 median color dance match 時間限制 2秒2秒 2秒2秒 記憶體限制 512m 512m 512m 512m 評分測試點 最高得分 題目型別 傳統傳統 傳統傳統 中位數 median 給...
浙江中醫藥大學程式設計代表隊2023年訓練賽十一
time limit 1 sec memory limit 128 mb submit 9 solved 3 submit status web board 3000公尺長跑時,圍觀黨們興高采烈地 著 最後的排名。因為他們來自不同的班,對所有運動員不一定都了解,於是他們分別對自己了解的一些運動員的實...
浙江中醫藥大學程式設計代表隊2023年訓練賽十三
time limit 1 sec memory limit 128 mb submit 9 solved 6 submit status web board 八皇后問題是在棋 盤上放皇后,互相不攻擊,求方案。變換一下棋子,還可以有八車問題,八馬問題,八兵問題,八王問題,注意別念反。在這道題裡,棋子換...