王森 王風(fēng)碩
摘要:如今在網(wǎng)絡(luò)上有越來越多的軟件可以提供給用戶使用,而在面向多用戶的前提下,用戶數(shù)據(jù)的精準(zhǔn)儲存是最為重要的。因為這關(guān)系著用戶數(shù)據(jù)的是否安全,也關(guān)系著軟件的使用壽命,所以數(shù)據(jù)庫的設(shè)計和安全就是每個開發(fā)者都需要重點關(guān)注的地方。該文將以圖書管理系統(tǒng)的數(shù)據(jù)庫為例子來設(shè)計一個基本的數(shù)據(jù)庫。
關(guān)鍵詞:數(shù)據(jù)庫;node.js;vue.js
中圖分類號:TP311 ? ? 文獻標(biāo)識碼:A
文章編號:1009-3044(2021)35-0018-02
1引言
在網(wǎng)絡(luò)技術(shù)非常發(fā)達的今天,越來越多的人參與到網(wǎng)絡(luò)環(huán)境的建設(shè)中。進而也產(chǎn)生了大量的、涉及各個方面的軟件或者網(wǎng)頁供我們使用,而這些軟件和網(wǎng)頁除了前端方面設(shè)計需要易交互、美觀之外,絕大多數(shù)的軟件和網(wǎng)頁還需要后臺數(shù)據(jù)庫的支持。因為每天都會有大量的用戶數(shù)據(jù)需要存儲,這部分?jǐn)?shù)據(jù)關(guān)系到每一個用戶的使用體驗,所以必須完整且安全地保護好這些數(shù)據(jù)。本文就這個問題通過圖書銷售系統(tǒng)的數(shù)據(jù)庫設(shè)計來說明如何設(shè)計一個這樣的數(shù)據(jù)庫。
2開發(fā)環(huán)境介紹
本文主要使用HeidiSQL和MySQL,HeidiSQL是一款用于提供簡單化的MySQL服務(wù)器和數(shù)據(jù)庫管理圖形化界面的工具。HeidiSQL給予了用戶一個用于在數(shù)據(jù)庫瀏覽之間切換SQL查詢的簡單易用的界面??梢院芎唵魏苤庇^地設(shè)計數(shù)據(jù)庫。MySQL作為獨立的程序應(yīng)用,他不會與其他的電腦程序發(fā)生沖突,或者鑲嵌到客戶中。也支持大型的數(shù)據(jù)庫系統(tǒng)并且可提供多種數(shù)據(jù)鏈接途徑。Node.js則是用于數(shù)據(jù)庫和后端實現(xiàn)端口連接和數(shù)據(jù)傳輸,還是用來實現(xiàn)前后端數(shù)據(jù)監(jiān)聽和交互的媒介,在此就這方面就不再贅述。
3數(shù)據(jù)庫設(shè)計
在我們提到的前提下數(shù)據(jù)庫的設(shè)計應(yīng)該滿足所有人員的基本使用需求,即對于管理人員、普通用戶和游客用戶都能有良好的使用體驗。所以就需要對每個不同的用戶生成或者不生成相應(yīng)的數(shù)據(jù)表來儲存數(shù)據(jù)。
3.1數(shù)據(jù)庫設(shè)計的目標(biāo)
由網(wǎng)站為圖書銷售系統(tǒng)的功能可以知道,這個數(shù)據(jù)庫至少需要有足夠的大來儲存每天都會產(chǎn)生的用戶和書籍?dāng)?shù)據(jù)。而且該數(shù)據(jù)庫應(yīng)該足夠的高效且穩(wěn)定,其中就包含用戶在查找書籍?dāng)?shù)據(jù)或者瀏覽歷史記錄時數(shù)據(jù)庫做出反應(yīng)、查找數(shù)據(jù)的速度和穩(wěn)定性。除了這些,數(shù)據(jù)庫系統(tǒng)還需要具備較高的范式、數(shù)據(jù)要足夠的安全、可移植性高、數(shù)據(jù)冗余度低、共享性好等特點。只有具備了這些特點,該數(shù)據(jù)庫才會給用戶一個較好的使用體驗,也就直接影響了該網(wǎng)站的使用效率。
3.2數(shù)據(jù)庫的概念結(jié)構(gòu)
根據(jù)本文的要求,本文的數(shù)據(jù)庫中屬性、實體和聯(lián)系的關(guān)系如下:
(1)實體:客觀存在并可以互相區(qū)分的物理體被稱為實體,本系統(tǒng)的實體主要包括管理員,普通用戶,游客用戶,書籍等。
(2)屬性:實體所具備的特征為屬性,一個實體可以具有多個屬性,多個實體也可以共用一個屬性,以此為區(qū)分條件,就可以很明確地描繪出一個完整的實體,比如該系統(tǒng)中的書籍實體,其就包含書名、作者、出版社、開本、出版日期等屬性。
(3)聯(lián)系:而在現(xiàn)實世界中,該數(shù)據(jù)庫所包含的實體并不是彼此孤立的,而是有或多或少的聯(lián)系,這種聯(lián)系就有“一對一”“一對多”“多對多”這三種聯(lián)系。
而實體之間聯(lián)系最直白的表示方式就是E-R圖,通過E-R圖可以很輕松地看出每個實體之間的聯(lián)系以及聯(lián)系方式。本系統(tǒng)的E-R圖如下所示:
圖書銷售系統(tǒng)中每個實體的屬性:
書籍:(書籍名稱,作者,出版社,出版日期,isbn編號,簡介,備注)。
管理人員:(姓名,性別,權(quán)限級別,編號,照片,出生日期,手機號。)
普通用戶:(姓名,性別,權(quán)限級別,編號,出生日期,手機號)。
游客用戶:(臨時ID)。
3.3數(shù)據(jù)庫的邏輯結(jié)構(gòu)
目標(biāo):把概念設(shè)計出的E-R模型圖轉(zhuǎn)成選用數(shù)據(jù)庫適用的邏輯結(jié)構(gòu)。概念結(jié)構(gòu)向邏輯結(jié)構(gòu)轉(zhuǎn)化的一個關(guān)鍵問題就是將實體之間的聯(lián)系轉(zhuǎn)換為關(guān)系模型,邏輯結(jié)構(gòu)的設(shè)計步驟如下:
(1)將概念結(jié)構(gòu)中通過該系統(tǒng)繪制出來的E-R模型圖遵循所選擇的數(shù)據(jù)庫中的相關(guān)規(guī)則轉(zhuǎn)化為該數(shù)據(jù) 庫能適用的數(shù)據(jù)模型。
(2)對數(shù)據(jù)模型中的產(chǎn)品進行對方面的對比改進,找出最適合的關(guān)系模式。
(3)對定下來的數(shù)據(jù)模型以一定的方式進行優(yōu)化,以盡可能提高邏輯結(jié)構(gòu)設(shè)計的性能,這樣在后續(xù)的數(shù)據(jù)庫構(gòu)建中才會有足夠好的數(shù)據(jù)支撐。
3.4數(shù)據(jù)庫的表創(chuàng)建及其表關(guān)聯(lián)
按照邏輯結(jié)構(gòu)設(shè)計中的關(guān)系來進行表的設(shè)計,而在表的創(chuàng)建過程中,每一個實體必須有一個主鍵,且該主鍵一般選擇對于該數(shù)據(jù)庫來說僅僅只有該實體才擁有的屬性。除此之外,還需要為每個主鍵配合定義一個外鍵,使主鍵、外鍵之間能一一對應(yīng)起來。而表與表之間的聯(lián)系一般被分為三種,分別是一對一、一對多和多對多。在設(shè)計關(guān)系表時需要注意三個問題:數(shù)據(jù)的冗余、數(shù)據(jù)之間的函數(shù)關(guān)系和數(shù)據(jù)空間的選擇。數(shù)據(jù)冗余的控制可以避免數(shù)據(jù)空間的浪費,函數(shù)依賴是表中的各字段屬性要滿足3NF規(guī)范式,數(shù)據(jù)空間選擇則是因為對于不同的實體,其所需要的空間大小也是不同的,所以根據(jù)不同的實體表選擇不同的空間以達到空間的充分利用,不浪費。在此以書籍表為例:
其他表也通過類似的方式建立,然后再建立關(guān)系表來將這些表鏈接起來,在此就不再一一展示。
3.5數(shù)據(jù)庫的物理設(shè)計
數(shù)據(jù)庫的物理設(shè)計主要就是以數(shù)據(jù)庫的數(shù)據(jù)來制定存儲結(jié)構(gòu)和存儲方法的依賴,數(shù)據(jù)庫的存儲方法一般來說分為三種,分別是:索引方法、聚簇索引方法和HASH方法。索引方法就是根據(jù)要求,確定對應(yīng)關(guān)系的哪些屬性列建立索引、哪些屬性列建立組合索引、哪些索引要設(shè)計為唯一索引等。聚簇索引方法就是為了提高某屬性(或?qū)傩越M)的查詢速度,可以將這些屬性(成為聚簇碼,cluster key)上具有相同值的元組集中放置在連續(xù)的物理塊上。HASH方法則是有些提供HASH方法的數(shù)據(jù)庫在滿足某些特定條件時可以適用HASH方法。以上三種方式中最常用的就是前兩種。而數(shù)據(jù)的存儲結(jié)構(gòu)選擇就主要是在實際情況下選擇一種在保證數(shù)據(jù)庫能快速準(zhǔn)確運行條件下的最節(jié)省空間的儲存方式。
3.6數(shù)據(jù)庫的測試
在數(shù)據(jù)庫設(shè)計完成之后,需要先通過簡單的增刪改查來檢查數(shù)據(jù)庫能否正常使用,在此通過錄入的100條數(shù)據(jù)來模擬測試,并執(zhí)行增刪改查操作,當(dāng)返回如圖3所示,說明數(shù)據(jù)庫的初步設(shè)計已經(jīng)完成。
3.7數(shù)據(jù)庫的安全性
隨著使用,數(shù)據(jù)信息只會慢慢增多,數(shù)據(jù)庫的存儲容量也慢慢變大,但是當(dāng)前主流的數(shù)據(jù)庫中,數(shù)據(jù)幾乎都是以明文的形式存在于存儲設(shè)備中,如果存儲設(shè)備遺失,就很有可能會引起數(shù)據(jù)泄露風(fēng)險,給使用數(shù)據(jù)庫存儲信息的用戶帶來極大的危害。又因為數(shù)據(jù)庫中的文件一般都以明文形式存在,導(dǎo)致一些網(wǎng)絡(luò)黑客可能會通過網(wǎng)絡(luò)、操作系統(tǒng)等電腦的漏洞接觸到這些文件,從而導(dǎo)致數(shù)據(jù)有泄露的風(fēng)險[1]。
所以為了避免數(shù)據(jù)庫的安全方面的一些問題,制定了一些設(shè)計規(guī)范。在建表時盡量避免一個表中有過多的數(shù)據(jù)關(guān)系,可以多創(chuàng)建一些表來儲存各個數(shù)據(jù)之間的關(guān)系。這樣不僅會避免可能會對數(shù)據(jù)庫造成的漏洞,還能更方便地維護和查找數(shù)據(jù)。而且盡量避免出現(xiàn)重復(fù)字段、對命名進行規(guī)范,最好是制定一個字段的命名規(guī)定,然后所有的命名都嚴(yán)格按照此命名規(guī)范來命名。
為了解決這些問題,可以采取以下方式,最簡單的方法就是對用戶的操作權(quán)限進行限制,這樣可以避免大多數(shù)安全性的問題。其次重要的是對數(shù)據(jù)進行加密的操作。也可以增加身份驗證、權(quán)限控制和敏感數(shù)據(jù)加密等方法可以有效地避免數(shù)據(jù)庫絕大部分安全問題。
除了這些,還可以實時更新操作系統(tǒng)這樣也可以避免由于版本問題而帶來的數(shù)據(jù)泄露隱患。
4結(jié)束語
本文通過了圖書管理系統(tǒng)來介紹了數(shù)據(jù)庫的設(shè)計實現(xiàn)以及其中需要主要的問題和相應(yīng)的解決方法,僅僅是提供了一個設(shè)計數(shù)據(jù)庫的基本方式,在現(xiàn)實的生活中數(shù)據(jù)庫的設(shè)計是非常嚴(yán)謹(jǐn)且復(fù)雜的,而隨著數(shù)據(jù)庫的體量越大,其中所涉及的知識面以及需要考慮的東西也就越多。
該文章包含的代碼方面比較少,因為數(shù)據(jù)庫主要是對數(shù)據(jù)的存儲,而這方面則是前后端共同完成的,數(shù)據(jù)庫僅僅是起到一個輸入和輸出數(shù)據(jù)的作用。
參考文獻:
[1] 張士剛.計算機軟件開發(fā)中數(shù)據(jù)庫安全設(shè)計的應(yīng)用實踐分析[J].發(fā)明與創(chuàng)新(職業(yè)教育),2021(7):238-239.
[2] 王兵兵,陳能,丁雅雪.基于MySQL的智慧社區(qū)助老關(guān)愛平臺數(shù)據(jù)庫設(shè)計[J].信息通信,2019,32(2):152-154.
[3] 楊浦,王樑.網(wǎng)上圖書銷售管理數(shù)據(jù)庫設(shè)計[J].電腦知識與技術(shù),2018,14(26):13-15.
[4] 吳鋒珍.高校圖書管理系統(tǒng)的數(shù)據(jù)庫設(shè)計[J].湖南郵電職業(yè)技術(shù)學(xué)院學(xué)報,2016,15(2):32-35.
【通聯(lián)編輯:梁書】