王森 王風(fēng)碩



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