詳細分析”百詞斬“數據庫,如何實現一個良好的數據庫系統?

系統環境如下:
操作系統:Windows10家庭版 x64
CPU: 8th Gen Intel i7
內存:8G
MySQL版本:5.5.61
Navicat for MySQL 版本:11.0.9
文章類別:提升
適用類型:對數據庫感興趣的學生、計算機專業學生、開發人員想對數據庫優化






這篇文章也算是2020年的一篇MySQL的總結。


【寫在前面】

       本文的數據庫並不是完全和“百詞斬©”相同,如有侵權,請私信,作者一定改!作者只是模擬了一個數據庫系統,將相關數據庫文件做一個模擬,作者只是使用“百詞斬©”軟件比較頻繁,也比較喜歡,故用此平臺作爲一個教學的模板,本文僅供教學使用,嚴禁商業化!!!如需引用本文,請標註文章地址,謝謝合作!


前言

       數據庫設計是一個工程量大而龐雜的工作,因此在設計出良好的數據庫前,一定是“反覆探尋,逐步求精”的過程,希望看完此文後可以對你編寫數據庫帶來幫助。



一、數據庫設計初期

       首先,我們在設計數據庫前要先講講數據庫設計的定義,這樣子我們才能更深刻地瞭解數據庫設計,做到“知己知彼,百戰不殆”。

數據庫設計(Database Design)
       是指根據用戶的需求,在某一具體的數據庫管理系統上,設計數據庫的結構和建立數據庫的過程。數據庫系統需要操作系統的支持。
        數據庫設計是建立數據庫及其應用系統的技術,是信息系統開發和建設中的核心技術。由於數據庫應用系統的複雜性,爲了支持相關程序運行,數據庫設計就變得異常複雜,因此最佳設計不可能一蹴而就,而只能是一種“反覆探尋,逐步求精”的過程,也就是規劃和結構化數據庫中的數據對象以及這些數據對象之間關係的過程。
——百度百科《數據庫設計》


講講我們當時想寫這個數據庫的緣由:

       由於當時我們處於剛剛考完CET-4/6的狀態,故我們打算基於CET-4/6的單詞開發一個數據庫系統。我的智庫——數據庫應用員在開發前做了一些問卷調查,爲我們後期設計做好鋪墊。

PS:問卷在此快速入口,也可見作者上傳文件

       我們在開始也遇到諸多困難,就是設計的不夠合理,剛開始和SD(系統設計員,下同)討論設計好的E-R圖的時候發現一個問題,我們對應關係當時出現了分歧,但是最終通過調查問卷進一步細化了。


二、數據庫開發時期

       我和程序員以及SA(系統分析員,下同),SD一同開始製作我們數據庫的基本框架,剛開始我們只有3個表,分別是用戶表、單詞表、學習記錄表,在我們開發無思路的時候,我提出我們可以仿照百詞斬來寫這個數據庫,後面我們圍繞這個基礎逐步完善,將原有的單詞表進一步劃分爲四級詞典表和六級詞典表,以此來更符合我們仿照百詞斬數據庫的設計。在設計之初,我心裏面就有個模板,這樣子來引導小組成員可以更快地抵達目標。與此同時,我們數據庫設立了2-3個視圖,7-8個存儲過程、2個觸發器。e.g.:我們建立了一個四六級總單詞庫的視圖,這樣子可以實現原來單詞表彙總的功能,建立記錄單詞表視圖,方便將信息錄入。
table design


三、數據庫測試時期

1.V1版本完善時期

       測試員和我聯繫,我分發相關的權限給測試員,並且及時做好數據庫備份,順應時代的要求,我們小組採取了去中心化分發式保存,當然還沒有做到NoSQL的步驟,但是未來我們繼續完善我們的系統,來達到我們的功能。
數據庫V1版本更新
數據庫V2版本更新

2.引入去中心化分發式保存數據庫的概念

       由於之前聽過區塊鏈的課程,故我只做了一種意義上的分發式——就是將數據庫存到各個組員的電腦中,去中心化,即——將核心數據保存在我的電腦數據庫中,我的電腦數據庫相當於服務器中心。當結構或數據進行更改時,記錄版本,寫入註釋,如:圖17的V1版本和圖19的V2版本,以最大程度保證安全。
去中心化分發式保存

3.去中心化分發式保存示例

       不同的數據庫存放在不同的用戶中,有點類似cookies。

在這裏插入圖片描述

4.DBA日常維護,保持定期備份的良好習慣

       像一些大型的平臺,容易受到黑客的攻擊,故我們對重要的數據進行維護,防止數據庫被破壞造成損失。
數據庫備份管理
       我讓測試員進行了用戶使用時數據庫奔潰恢復的模擬操作,執行分發式保存在測試員電腦中的百詞斬核心數據庫備份文件(BCZHX.sql),然後我在虛擬機上模擬我們的數據庫服務器中心遭受網絡攻擊,破壞了數據庫文件,執行完整數據庫備份文件(BCZWZ.sql),執行後的結果都成功了。爲了更貼近企業開發,我們製作了日誌管理,如圖23.
       當然,由於我們寫這個數據庫比較匆忙,且還有一些功能想加入其中,故在測試時也發現了很多問題,這將在爲了的V3版本中做更新及修改維護。


5.數據庫測試

下面是由我們小組的詩琪測試的結果:

5.1測試表

序號 測試內容 輸入的數據及操作 預期結果 實際結果 是否成功 失敗原因
1 用戶表數據插入 insert into tb_user values('1800333333','xm','123','1','[email protected]','快樂') 插入成功 插入失敗 缺少插入數值
2 用戶表數據插入 insert into tb_user values(‘1800333333’,‘xm’,‘123’,‘1’,‘[email protected]’,‘快樂’,‘20200101’)
insert into tb_user values(‘18001’,‘白月’,‘123’,‘1’,‘[email protected]’,‘hello’,‘20201222’)
insert into tb_user values(‘18002’,‘秦風’,‘123’,‘0’,‘[email protected]’,‘hello’,‘20201222’)
insert into tb_user values(‘18003’,‘韓川’,‘123’,‘0’,‘[email protected]’,‘hello’,‘20201222’)
insert into tb_user values(‘18001’,‘andy’,‘123’,‘1’,‘[email protected]’,‘hello’,‘20191222’)
insert into tb_user values(‘18001’,‘wendy’,‘123’,‘1’,‘[email protected]’,‘hello’,‘20191222’)




插入成功 插入成功 -
3 用戶表數據重複插入 insert into tb_user values('18001','andy','123','1','[email protected]','hello','20191222') 插入失敗 插入成功 未設置用戶資料不可重複註冊
4 用戶表數據查看 select*from tb_user 查看成功 查看成功 -
5 用戶表數據刪除 DELETE from tb_user where u_nickname = 'xm' 刪除成功 刪除成功 -
6 用戶表數據修改 select*from tb_user 查看成功 查看成功 -
7 四六級單詞表表數據插入 insert into tb_cet4_dictionary values('1','ability','[əˈbɪləti]','能力') 插入成功 插入成功 -
8 用戶表數據修改 select*from tb_user 查看成功 查看成功 -

5.2 測試結論

       百詞斬數據庫的基本框架已搭建完成,數據庫內已包含大量可用數據,整體功能與設計文檔相符。此數據庫的增刪查改等功能均能可正常運行,各表的連接性強,查詢便捷,需求覆蓋面廣,實用性較高。雖仍有部分功能待開發,但實質內容已相對完整.

四、思維拓展時期–後端開發學習

       在此,特別感謝百詞斬團隊,謝謝你們優秀的作品帶給我們的學習。
在這裏插入圖片描述
在這裏插入圖片描述


總結

       由於篇幅有限,我最後希望我們今後可以落實這個項目!謝謝大家!沒有大家我們無法實現這個項目.







附錄Ⅰ:文章附屬教學資源

[1]仿百詞斬數據庫©
[2]設計前調查問卷
[3]作者之前寫數據庫時遇到的問題初學者如何解決SQL Server “試用期已過” 的問題


會定期更新本文,以後會開付費專欄。謝謝大家的支持。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章