PHP動態(tài)網(wǎng)站開發(fā)項目教程課件 任務(wù)7 項目開發(fā)前的準(zhǔn)備工作_第1頁
PHP動態(tài)網(wǎng)站開發(fā)項目教程課件 任務(wù)7 項目開發(fā)前的準(zhǔn)備工作_第2頁
PHP動態(tài)網(wǎng)站開發(fā)項目教程課件 任務(wù)7 項目開發(fā)前的準(zhǔn)備工作_第3頁
PHP動態(tài)網(wǎng)站開發(fā)項目教程課件 任務(wù)7 項目開發(fā)前的準(zhǔn)備工作_第4頁
PHP動態(tài)網(wǎng)站開發(fā)項目教程課件 任務(wù)7 項目開發(fā)前的準(zhǔn)備工作_第5頁
已閱讀5頁,還剩89頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

PHP動態(tài)網(wǎng)站開發(fā)項目教程項目2在線投票系統(tǒng)任務(wù)7項目開發(fā)前的準(zhǔn)備工作子任務(wù)7.1項目介紹7.1.1項目基本需求分析

(1)游客可以查看投票項目,以及各項目的當(dāng)前得票數(shù)。(2)游客可以注冊成為會員。(3)游客注冊后可以登錄本系統(tǒng)。(4)登錄系統(tǒng)后,可以單擊車輛圖片實現(xiàn)投票。(5)管理員可以登錄后臺管理系統(tǒng)查看車輛列表。(6)管理員可以通過列表查看所有投票項目的得票情況。(7)管理員可以管理各個投票項目(包括新增、刪除、編輯)。(8)管理員可以通過圖表的形式查看各項目的得票情況。

7.1.2項目詳細設(shè)計

(1)整合會員管理系統(tǒng)。(2)會員登錄后,單擊列表中的項目進行投票。投票后,票數(shù)立即變化,顯示新的票數(shù)。(3)只有登錄用戶可以投票,未登錄用戶單擊投票項目時,彈出需要登錄的提示。(4)限制同一名用戶一天只能給一個投票對象投5票。(5)限制同一名用戶一天只能給3個投票對象投票。(6)投票時要輸入驗證碼,以防止機器或程序刷票。(7)每個投票對象之間至少要間隔1min才能重復(fù)投票。(8)一個IP地址一天只能給一個投票對象投5票。(9)投票采用AJAX無刷新技術(shù),前端頁面無須刷新。(10)管理員登錄后,進入管理頁面,通過列表查看所有投票項目的得票情況。(11)管理員登錄后,可以管理所有投票項目,包括編輯和刪除已有項目、添加新的投票項目。(12)管理員可以通過圖表的形式查看投票項目得票情況,圖表以柱狀圖的形式呈現(xiàn)。7.1.3項目展示

(1)圖7.1.1所示為項目首頁。圖7.1.1

項目首頁(2)圖7.1.2所示為管理員登錄后的首頁。圖7.1.2

管理員登錄后的首頁(3)圖7.1.3所示為投票時輸入驗證碼的頁面。圖7.1.3

投票時輸入驗證碼(4)圖7.1.4所示為管理員進行車輛管理的頁面。圖7.1.4

管理員進行車輛管理(5)圖7.1.5所示為管理員添加車輛時的頁面。圖7.1.5

管理員添加車輛(6)圖7.1.6展示了管理員查看車輛得票情況柱狀圖頁面。圖7.1.6

管理員查看車輛得票情況柱狀圖子任務(wù)7.2版本控制與代碼托管【知識儲備】7.2.1版本控制

版本控制軟件提供完備的版本管理功能,用于存儲、追蹤目錄(文件夾)和文件的修改歷史,是軟件開發(fā)者的必備工具,是軟件公司的基礎(chǔ)設(shè)施。版本控制軟件的最高目標(biāo)是支持軟件公司的配置管理活動、追蹤多個版本的開發(fā)和維護活動,以及及時發(fā)布軟件。簡單來說,在開發(fā)過程中會不斷發(fā)現(xiàn)新需求,不斷發(fā)現(xiàn)bug,如果不做控制,那么軟件將永遠不能發(fā)布,或今天發(fā)布一個版本,明天又發(fā)布一個版本。

版本控制對于DevOps(Development和Operations的組合詞,是一組過程、方法與系統(tǒng)的統(tǒng)稱,用于促進開發(fā)、技術(shù)運營和質(zhì)量保障部門之間的溝通、協(xié)作與整合)團隊的成功起著核心作用。根據(jù)2022年度DevOps研究,版本控制一直是整體軟件工程性能的最佳指標(biāo)之一,使用版本控制有以下優(yōu)勢。1.更快、更簡單地發(fā)現(xiàn)錯誤2.并行開發(fā)3.提高最終產(chǎn)品的可靠性

版本控制和一流的軟件工程性能之間的共生關(guān)系是顯而易見的。當(dāng)團隊正確利用版本控制系統(tǒng)時,可以以更快的速度和更高的可靠性水平進行更改。DevOps的目標(biāo)是加快整個生產(chǎn)過程,同時提高工作的質(zhì)量。版本控制在增強團隊溝通和成功開發(fā)產(chǎn)品方面發(fā)揮著巨大作用,并為實現(xiàn)這些目標(biāo)提供了巨大的幫助。7.2.2Git介紹

代碼托管服務(wù)通常是企業(yè)或者組織基于版本控制工具提供的一種研發(fā)流程管理工具,例如,大家熟知的“GitHub”就是面向開源開發(fā)者提供的基于Git版本管理工具的代碼托管服務(wù)。所以代碼托管服務(wù)隨著使用規(guī)模的擴大,通常也會變得更加龐大、復(fù)雜和難以管理,對于個人開發(fā)者而言可能無須關(guān)注,但對于企業(yè)而言需要一定的維護成本,畢竟大多數(shù)情況下,代碼托管服務(wù)中存儲的可能是企業(yè)的核心軟資產(chǎn)。對于代碼托管服務(wù)來說,比較核心的要點有3個。(1)可協(xié)同。在功能層面要包含倉庫管理、分支管理、權(quán)限管理、提交管理、代碼評審等代碼存儲和版本管理功能,讓開發(fā)者更好地協(xié)同工作。(2)可集成。好的代碼托管服務(wù)應(yīng)該具備靈活和簡易的第三方工具集成能力,有些甚至直接提供了嵌入式的CI/CD(CI指的是持續(xù)集成,CD指的是持續(xù)部署)能力,降低了DevOps的落地成本。(3)安全可靠。這是最重要的一點,對于個人開發(fā)者而言可能無感,但是對于企業(yè)而言,代碼的安全性、服務(wù)的穩(wěn)定性、數(shù)據(jù)是否存在丟失的風(fēng)險,是最被優(yōu)先考量的點。7.2.3碼云的使用

打開碼云的官網(wǎng),注冊一個個人賬號即可免費使用代碼托管服務(wù)。

為了配合代碼托管的使用,我們還需要在計算機中安裝Git軟件。

PhpStorm完美支持Git,可以通過PhpStorm的菜單命令完成版本控制和代碼托管的相關(guān)操作,非常方便。7.2.4Git的工作流程

在本地計算機中分有3個區(qū)域,分別是工作區(qū)(IDE代碼區(qū))、暫存區(qū)(修改過的文件緩存區(qū))、本地倉庫(確認(rèn)修改過的所有文件區(qū))。在遠程服務(wù)器上有一個“遠程倉庫”,保存所有的代碼,可以推送到服務(wù)器與別人共享。在項目開始時,我們的本地倉庫為空,此時,需要從遠程倉庫克隆(clone)代碼到本地倉庫(此時,遠程倉庫應(yīng)該有初始化信息,或者有其他人完成的代碼)。

在后續(xù)過程中,如果要更新代碼,就需要從服務(wù)器拉?。╢etch)代碼到本地倉庫,然后合并(merge)到工作區(qū),也可以使用pull命令合并上述fetch和merge命令。上述工作流程的示意如圖7.2.1所示。圖7.2.1

Git工作流程示意

圖7.2.2所示為個人使用Git的流程示意。圖7.2.2

個人使用Git的流程示意

圖7.2.3所示為團隊使用Git的流程示意。圖7.2.3

團隊使用Git的流程示意

其中,fork操作表示把別人的倉庫直接復(fù)制到本人的遠程倉庫中;clone命令表示從遠程倉庫直接下載到本地倉庫中(適用于初始化,本地倉庫為空的情況);pull命令表示從遠程倉庫拉取代碼合并到本地倉庫(適用于已經(jīng)有本地倉庫的情況);add命令表示將修改后的代碼添加至?xí)捍鎱^(qū),commit命令表示將暫存區(qū)代碼提交至本地倉庫;push命令表示從本地倉庫更新文件到遠程倉庫。

PhpStorm可以完美支持Git,只需要先安裝好Git軟件,然后在PhpStorm中配置好Git文件路徑,就可以在PhpStorm中克隆遠程倉庫至本地以初始化項目。在本地編輯程序后,再通過add、commit、push命令更新遠程倉庫。7.2.5在PhpStorm中使用Git

(1)在Git官網(wǎng)下載安裝程序。下載時,選擇好對應(yīng)的操作系統(tǒng)和軟件位數(shù)。同時,還可以選擇安裝版本(Setup)或綠色版本(Portable),如圖7.2.4所示。圖7.2.4

下載Git安裝程序(2)打開PhpStorm,單擊“Settings”

→“VersionControl”

→“Git”,然后在“PathtoGitexecutable”中選擇“git.exe”文件的路徑,最后單擊“Test”按鈕,如果成功顯示Git的版本,則說明配置完成,如圖7.2.5所示。圖7.2.5

配置git.exe文件路徑

在新版本的PhpStorm中,也可以不用事先安裝Git,而是在使用時,通過PhpStorm直接下載并安裝。以PhpStorm2021.2.1為例,在歡迎界面中單擊右上角的“GetfromVCS”按鈕,然后在Versioncontrol下拉菜單中選擇Git,系統(tǒng)會提示Git并未安裝,只需要單擊“DownloadandInstall”按鈕即可完成安裝,如圖7.2.6所示。圖7.2.6

從VCS復(fù)制項目(3)在碼云中創(chuàng)建一個倉庫。登錄碼云后,將鼠標(biāo)指針移至右上角的“+”處,在彈出的快捷菜單中選擇“新建倉庫”。按要求輸入倉庫名稱和路徑(輸入倉庫名稱后,路徑會自動填充),如果路徑和已有倉庫路徑重復(fù),則系統(tǒng)會給出提示,只需要修改路徑名稱即可。如圖7.2.7所示,新建倉庫時,可以選擇是“私有”還是“開源”。開源表示任何人都可以訪問你的倉庫,可以下載你的文件。私有表示僅有你自己,或你添加的成員可以下載或修改你的文件。當(dāng)然,在現(xiàn)在的碼云系統(tǒng)中新建倉庫時,只能選擇私有。如果想設(shè)置成開源,則可以在倉庫創(chuàng)建好以后,單擊“管理”→“基本信息”命令,重新設(shè)置成開源。圖7.2.7

在碼云中新建倉庫

創(chuàng)建好倉庫以后,單擊“代碼”選項卡,可以看到有一個倉庫的地址,如圖7.2.8所示。此處默認(rèn)顯示的是HTTPS地址,單擊右邊的復(fù)制圖標(biāo)即可復(fù)制地址,然后將地址填充到圖7.2.6中的URL文本框中,在下面的Directory中選擇項目所在位置,再單擊右下角的“Clone”按鈕,即可完成項目的復(fù)制。小王同學(xué)選擇將項目創(chuàng)建至E:\onlineVote。圖7.2.8

復(fù)制倉庫地址(4)項目復(fù)制成功后,PhpStorm會自動打開當(dāng)前項目。由于剛才在碼云中新建的是一個空白倉庫,因此,現(xiàn)在在本地項目文件夾中沒有任何文件。如果在碼云的當(dāng)前倉庫中添加了一些文件,那么復(fù)制項目以后,這些文件會自動同步到當(dāng)前項目中。選中項目根目錄并單擊鼠標(biāo)右鍵,創(chuàng)建一個新文件index.php。當(dāng)有新的文件加入項目中時,系統(tǒng)會自動提示是否將此文件添加到Git中,如圖7.2.9所示。圖7.2.9

添加文件到Git

單擊“Add”按鈕,即可將文件添加至Git。勾選“Don’taskagain”復(fù)選框后,以后新增加的文件都會自動添加至Git。為了查看文件是否添加到Git的區(qū)別,還可以再新建一個test.php文件,然后選擇不添加至Git,最后觀察這兩個文件的顏色是有區(qū)別的,“index.php”為綠色,“test.php”為紅色,如圖7.2.10所示。當(dāng)然,具體的顏色和當(dāng)前PhpStorm使用的主題有關(guān)。圖7.2.10

將新增文件添加至Git(5)當(dāng)工作進行到一定的進度以后,就可以把當(dāng)前的文件提交到碼云。選中項目目錄并單擊鼠標(biāo)右鍵,在彈出的快捷菜單中選擇“Git”→“CommitDirectory”命令,如圖7.2.11所示。接下來,會打開提交文件的對話框,如圖7.2.12所示。其中左上角第一個區(qū)域就是當(dāng)前添加到Git且有修改的文件,第二個區(qū)域是未添加到Git的文件,默認(rèn)選中第一類文件。在左邊中間區(qū)域需要輸入提交信息(CommitMessage),就是這一次提交的描述信息。圖7.2.11

提交目錄

在圖7.2.12最下面的區(qū)域顯示當(dāng)前選中文件的內(nèi)容。如果此文件是新增加的文件,則直接在下面區(qū)域顯示其當(dāng)前內(nèi)容。如果此文件是原來已經(jīng)有的文件,并進行了修改,則下面的區(qū)域分成左右兩欄顯示。其中左邊一欄是該文件上一個版本的內(nèi)容,右邊一欄是該文件現(xiàn)在的內(nèi)容。單擊下面的“Commit”按鈕即可將修改后的文件提交至本地倉庫。

如果需要將文件提交至遠程倉庫,則再次在圖7.2.11中單擊“Push”命令。當(dāng)然,也可以在“Commit”時同時完成“Push”,只需要單擊“Commit”按鈕旁邊的下拉按鈕,選擇“CommitandPush”命令,打開圖7.2.13所示的界面,單擊右下角的“Push”按鈕,在彈出的登錄的窗口中輸入碼云的用戶名和密碼,可以勾選“Remember”復(fù)選框以記住密碼,避免每次都要重新輸入。圖7.2.12

提交文件圖7.2.13

提交文件至遠程倉庫

“Push”成功后,可以到碼云中查看倉庫,在倉庫中可以看到剛才新上傳的所有文件。

如果我們換了一臺新計算機,或者有其他協(xié)作者也上傳了代碼,本地倉庫的文件就不是最新版本了。此時,可以在圖7.2.11中選擇“Pull”命令,將最新的文件拉取至本地倉庫。

如果多次提交過某一個文件,這個文件就會被保存為多個版本。此時,可以在圖7.2.11中單擊“ShowHistory”命令,此文件的所有版本將顯示在下面的窗口中,可以單擊任意一個版本的文件查看內(nèi)容,如圖7.2.14所示。如果想撤銷某個版本的修改內(nèi)容,或者回到這個版本的上一個版本,就可以選中想要回退的版本并單擊鼠標(biāo)右鍵,然后選擇“RevertCommit”命令,新建一個名為“Revert×××Commit”的提交記錄,該記錄進行的操作是將“×××Commit”中對代碼進行的修改全部撤銷。圖7.2.14

查看文件的歷史版本子任務(wù)7.3數(shù)據(jù)庫設(shè)計的方法及原理【知識儲備】7.3.1數(shù)據(jù)庫設(shè)計的方法

(1)直觀設(shè)計法(手工試湊法)。這是最早使用的數(shù)據(jù)庫設(shè)計方法。這種方法依賴于設(shè)計者的經(jīng)驗和技巧,缺乏科學(xué)分析的理論基礎(chǔ)和工程手段的支持,因為設(shè)計質(zhì)量與設(shè)計人員的經(jīng)驗和水平有直接關(guān)系,所以設(shè)計質(zhì)量很難保證,主要適用于一些簡單小型的系統(tǒng)。(2)規(guī)范設(shè)計法。將數(shù)據(jù)庫設(shè)計分為若干階段,明確規(guī)定各階段的任務(wù),采用“自頂向下、分層實現(xiàn)、逐步求精”的設(shè)計原則,結(jié)合數(shù)據(jù)庫理論和軟件工程設(shè)計方法,實現(xiàn)設(shè)計過程的每一細節(jié),最終完成整個設(shè)計任務(wù)。這種方法包括新奧爾良方法、基于實體-聯(lián)系(Entity-Relationship,E-R)模型的數(shù)據(jù)庫設(shè)計方法、基于第三范式(ThirdNormalForm,3NF)的設(shè)計方法、面向?qū)ο蟮臄?shù)據(jù)庫設(shè)計方法、統(tǒng)一建模語言(UnifiedModelingLanguage,UML)方法等。(3)計算機輔助設(shè)計法。在數(shù)據(jù)庫設(shè)計的某些過程中,可以利用計算機和一些輔助設(shè)計工具模擬某一規(guī)范設(shè)計法,并以人的知識或經(jīng)驗為主導(dǎo),通過人機交互方式實現(xiàn)設(shè)計中的某些部分。比如,Oracle公司開發(fā)的Designer、Sybase公司開發(fā)的PowerDesigner,都是常用的數(shù)據(jù)庫設(shè)計工具軟件。7.3.2數(shù)據(jù)庫設(shè)計的基本步驟

(1)需求分析。通過詳細調(diào)查現(xiàn)實世界要處理的對象(組織、部門、企業(yè)等),充分了解原系統(tǒng)(手工系統(tǒng)或計算機系統(tǒng))的工作概況,明確用戶的各種需求。(2)概念結(jié)構(gòu)設(shè)計。通過對用戶需求進行綜合、歸納與抽象,形成一個獨立于具體數(shù)據(jù)庫管理系統(tǒng)的概念模型。(3)邏輯結(jié)構(gòu)設(shè)計。將概念結(jié)構(gòu)轉(zhuǎn)換為某個數(shù)據(jù)庫管理系統(tǒng)支持的數(shù)據(jù)模型,并對其進行優(yōu)化。(4)物理結(jié)構(gòu)設(shè)計。為邏輯結(jié)構(gòu)選取最適合應(yīng)用環(huán)境的物理結(jié)構(gòu),包括存儲結(jié)構(gòu)和存取方法等。(5)數(shù)據(jù)庫實施。根據(jù)邏輯結(jié)構(gòu)設(shè)計和物理結(jié)構(gòu)設(shè)計的結(jié)果構(gòu)建數(shù)據(jù)庫,編寫與調(diào)試應(yīng)用程序,組織數(shù)據(jù)入庫并進行試運行。(6)數(shù)據(jù)庫運行和維護。經(jīng)過試運行后即可投入正式運行,在運行過程中必須不斷對其進行評估、調(diào)整與修改。設(shè)計步驟設(shè)計描述數(shù)據(jù)處理需求分析數(shù)據(jù)字典、數(shù)據(jù)項、數(shù)據(jù)流、數(shù)據(jù)存儲的描述數(shù)據(jù)流圖、判定樹、數(shù)據(jù)字典中處理過程的描述概念結(jié)構(gòu)設(shè)計概念模型(E-R模型)、數(shù)據(jù)字典系統(tǒng)說明書(系統(tǒng)要求、方案、數(shù)據(jù)流圖)邏輯結(jié)構(gòu)設(shè)計某種數(shù)據(jù)模型(如關(guān)系)系統(tǒng)結(jié)構(gòu)圖(模塊結(jié)構(gòu))物理結(jié)構(gòu)設(shè)計存儲安排、方法選擇、存取路徑建立模塊設(shè)計數(shù)據(jù)庫實施編寫與調(diào)試應(yīng)用程序、裝入數(shù)據(jù)、數(shù)據(jù)庫試運行程序編碼、編譯聯(lián)結(jié)、測試數(shù)據(jù)庫運行和

維護性能監(jiān)測、轉(zhuǎn)儲/恢復(fù)、數(shù)據(jù)庫重組和重構(gòu)新舊系統(tǒng)轉(zhuǎn)換、運行、維護表7.3.1

數(shù)據(jù)庫的設(shè)計步驟及具體的設(shè)計描述7.3.3概念結(jié)構(gòu)設(shè)計

概念結(jié)構(gòu)設(shè)計就是將需求分析得到的用戶需求抽象為信息結(jié)構(gòu)(即概念模型)的過程。

目前應(yīng)用最普遍的是E-R模型,它將現(xiàn)實世界的信息結(jié)構(gòu)統(tǒng)一用屬性、實體以及它們之間的聯(lián)系來描述。

為了簡化E-R模型的處理,現(xiàn)實世界的事物能作為屬性對待的,盡量作為屬性對待。

其中有兩條基本的準(zhǔn)則。(1)作為屬性,不能再具有需要描述的性質(zhì)。屬性必須是不可再細分的數(shù)據(jù)項,不能包含其他屬性。(2)屬性不能與其他實體具有聯(lián)系,即E-R模型中所表示的聯(lián)系是實體之間的聯(lián)系。7.3.4實體-聯(lián)系圖(E-R模型)

對E-R模型的理解,主要是弄清楚其組成元素和元素間的聯(lián)系。(1)組成元素。E-R模型中具體的組成元素如表7.3.2所示。元素描述表示形式實體客觀存在并可以相互區(qū)別的事物用矩形框表示,矩形框內(nèi)寫明實體名屬性實體所具有的一個屬性用橢圓形表示,并用無向邊將其與相應(yīng)的實體連接起來聯(lián)系實體和實體之間,以及實體內(nèi)部的聯(lián)系用菱形表示,菱形框內(nèi)寫明聯(lián)系名,并用無向邊分別將其與有關(guān)實體連接起來,同時在無向邊旁邊標(biāo)上聯(lián)系的類型表7.3.2

E-R模型中具體的組成元素(2)聯(lián)系詳解。

實體之間的聯(lián)系最常見的有如下3種。①一對一。

圖7.3.1所示為一對一聯(lián)系的示意。其含義是,實體集“公民”中的每一個實體至多與實體集“身份證號碼”中一個實體有聯(lián)系;反之,實體集“身份證號碼”中的每個實體至多與實體集“公民”中的一個實體有聯(lián)系。圖7.3.1

一對一聯(lián)系示意②一對多。

圖7.3.2所示為一對多聯(lián)系的示意。其含義是,實體集“班級”至少與實體集“學(xué)生”中的N(N

>0)個實體有聯(lián)系;并且實體集“學(xué)生”中的每一個實體至多與實體集“班級”中的一個實體有聯(lián)系。圖7.3.2

一對多聯(lián)系示意③多對多。

圖7.3.3所示為多對多聯(lián)系的示意。其含義是,實體集“學(xué)生”中的每一個實體至少與實體集“課程”中的M(M

>0)個實體有聯(lián)系,并且實體集“課程”中的每一個實體至少與實體集“學(xué)生”中的N(N

>0)個實體有聯(lián)系。圖7.3.3

多對多聯(lián)系示意子任務(wù)7.4創(chuàng)建數(shù)據(jù)庫7.4.1實例詳解

為了能順利完成數(shù)據(jù)庫設(shè)計,小王同學(xué)先做了如下的練習(xí)。

問題描述:(1)一個學(xué)生可選修多門課程,一門課程有若干學(xué)生選修;(2)一個教師可講授多門課程,一門課程只有一個教師講授;(3)一個學(xué)生選修一門課程,僅有一個成績;(4)學(xué)生的屬性有學(xué)號、姓名;教師的屬性有教師編號、教師姓名;課程的屬性有課程號、課程名。

根據(jù)上面的問題描述,小王同學(xué)最終繪制了圖7.4.1所示的E-R模型,其中,有下畫線的屬性表示主鍵。圖7.4.1

根據(jù)問題描述繪制的E-R模型

有了E-R模型,就可以轉(zhuǎn)換數(shù)據(jù)表了。一般來說,可以為一個實體創(chuàng)建一張表,為一個聯(lián)系(關(guān)系)創(chuàng)建一張表。當(dāng)然,在實際工作中,可以根據(jù)情況進行合并等操作。

完成上面的E-R模型后,小王同學(xué)覺得火候差不多了,可以正式制作在線投票系統(tǒng)的數(shù)據(jù)庫了。他仔細看了子任務(wù)7.1的需求分析,然后畫出了圖7.4.2所示的E-R模型。

他仔細檢查和分析后,覺得這個E-R模型已經(jīng)沒有問題了,能夠完整體現(xiàn)在線投票系統(tǒng)的需求分析,接下來,他根據(jù)E-R模型設(shè)計出了最終的數(shù)據(jù)表,其具體結(jié)構(gòu)如表7.4.1~表7.4.3所示。圖7.4.2

在線投票系統(tǒng)數(shù)據(jù)庫設(shè)計之E-R模型序號列名類型排序規(guī)則注釋1idint(11)

用戶ID,主鍵2userNamevarchar(20)utf8_unicode_ci用戶名3pwvarchar(32)utf8_unicode_ci密碼4emailvarchar(256)utf8_unicode_ci信箱5admintinyint(1)

是否為管理員6picvarchar(256)utf8_unicode_ci用戶頭像表7.4.1

用戶表(表名:userInfo)序號列名類型排序規(guī)則注釋1idint(11)

投票詳情ID,主鍵2userIDint(11)

用戶ID,外鍵3carIDint(11)

車輛ID,外鍵4voteTimedate

投票時間5ipvarchar(15)utf8_unicode_ci投票者IP地址表7.4.2

投票表(表名:voteDetail)序號列名類型排序規(guī)則注釋1idint(11)

車輛ID,主鍵2carNamevarchar(45)utf8_unicode_ci車輛名稱3carDescvarchar(1000)utf8_unicode_ci車輛描述4carPICvarchar(256)utf8_unicode_ci車輛圖片5carNumint(11)

車輛得票數(shù)表7.4.3

車輛表(表名:carInfo)7.4.2主鍵和外鍵

在小王同學(xué)設(shè)計的數(shù)據(jù)表中出現(xiàn)了“主鍵”和“外鍵”。那什么是主鍵和外鍵呢?

關(guān)系數(shù)據(jù)庫中的一條記錄有若干屬性,若其中某一個屬性或?qū)傩越M能唯一標(biāo)識一條記錄,該屬性或?qū)傩越M就可以稱為一個主鍵。

比如,有一張數(shù)據(jù)表名為“學(xué)生表”,其列構(gòu)成為:學(xué)號、姓名、性別、班級。其中每個學(xué)生的學(xué)號是唯一的,因此,學(xué)號就是一個主鍵。

又如,有一張數(shù)據(jù)表名為“課程表”,其列構(gòu)成為:課程編號、課程名、學(xué)分。其中課程編號是唯一的,因此,課程編號就是一個主鍵。

再如,有一張數(shù)據(jù)表名為“成績表”,其列構(gòu)成為:學(xué)號、課程編號、成績。顯然,成績表中的單個屬性無法唯一標(biāo)識一條記錄,學(xué)號和課程編號的組合才可以唯一標(biāo)識一條記錄,所以學(xué)號和課程編號的屬性組就是一個主鍵。

雖然成績表中的學(xué)號不是成績表的主鍵,但它和學(xué)生表中的學(xué)號相對應(yīng),并且學(xué)生表中的學(xué)號是學(xué)生表的主鍵,因此,可以稱成績表中的學(xué)號是學(xué)生表的外鍵。同理,成績表中的課程編號是課程表的外鍵。

數(shù)據(jù)表中,除了主鍵、外鍵,還有索引。那么主鍵、外鍵和索引有什么區(qū)別?表7.4.4總結(jié)了主鍵、外鍵和索引的區(qū)別。主鍵外鍵索引定義唯一標(biāo)識一條記錄,不能有重復(fù),不允許為空表的外鍵是另一表的主鍵,外鍵可以有重復(fù)的值,可以是空值該字段沒有重復(fù)值,但可以是空值作用用來保證數(shù)據(jù)完整性用來和其他表建立聯(lián)系提高查詢排序的速度個數(shù)主鍵只能有一個一張表可以有多個外鍵一張表可以有多個唯一索引表7.4.4

主鍵、外鍵和索引的區(qū)別

小王同學(xué)根據(jù)前面創(chuàng)建好的3張數(shù)據(jù)表,在phpMyAdmin中進行數(shù)據(jù)庫創(chuàng)建。他創(chuàng)建了一個數(shù)據(jù)庫,名為vote,其中就包括上述3張數(shù)據(jù)表,具體內(nèi)容如圖7.4.3所示。其中每一張表都采用了一個id作為主鍵,這個id列是一個自動增長列,它本身并無實際意義,僅僅用來作為主鍵,作用是標(biāo)識某一行數(shù)據(jù)。圖7.4.3

在phpMyAdmin中創(chuàng)建好的數(shù)據(jù)表7.4.3如何創(chuàng)建外鍵

1.創(chuàng)建外鍵的必備條件(1)需要把相關(guān)數(shù)據(jù)表的存儲引擎設(shè)置為InnoDB。(2)創(chuàng)建外鍵時,外鍵本身必須創(chuàng)建索引。(3)設(shè)置外鍵的列,其數(shù)據(jù)類型要和對應(yīng)的主鍵數(shù)據(jù)類型保持一致。2.選擇數(shù)據(jù)表存儲引擎

在創(chuàng)建數(shù)據(jù)表時,可以在右下角的存儲引擎中選擇類型,如圖7.4.4所示。

在MySQL數(shù)據(jù)庫中,數(shù)據(jù)表的存儲引擎默認(rèn)是MyISAM。如果要創(chuàng)建外鍵,則存儲引擎必須設(shè)置為InnoDB。3.MyISAM和InnoDB的區(qū)別(1)緩存機制。MyISAM僅僅緩存索引,不會緩存實際數(shù)據(jù)信息,它會將這一工作交給操作系統(tǒng)(OperatingSystem,OS)級別的文件系統(tǒng)緩存,所以MyISAM緩存優(yōu)化工作集中在索引緩存優(yōu)化上。InnoDB有自己的緩存,不僅緩存索引,還緩存表中的數(shù)據(jù)。(2)事務(wù)支持。MyISAM不支持事務(wù)。InnoDB支持事務(wù),也支持主鍵和外鍵。(3)鎖定實現(xiàn)。MyISAM鎖定由MySQL服務(wù)控制,只支持表級鎖。InnoDB鎖定交由InnoDB存儲引擎,支持行級鎖、頁級鎖等粒度更小的鎖定級別。由于鎖定級別的差異,在更新并行度上,InnoDB比MyISAM好很多。(4)數(shù)據(jù)物理存儲方式(包括索引和數(shù)據(jù))。在MyISAM存儲引擎中,每張數(shù)據(jù)表有3個文件:“.FRM”文件存放表結(jié)構(gòu)數(shù)據(jù);“.MYI”文件存放索引信息;“.MYD”文件存放表數(shù)據(jù)。圖7.4.4

新建數(shù)據(jù)表時設(shè)置存儲引擎4.存儲引擎的修改

如果已經(jīng)使用默認(rèn)存儲引擎創(chuàng)建好了數(shù)據(jù)表,則可以在進入數(shù)據(jù)表以后,在頁面上方導(dǎo)航菜單中單擊“操作”按鈕,然后在“存儲引擎”中進行修改,如圖7.4.5所示。圖7.4.5

在“操作”中修改數(shù)據(jù)表的存儲引擎5.添加外鍵

在phpMyAdmin中打開表結(jié)構(gòu)后,其中有一個“關(guān)聯(lián)視圖”按鈕,單擊該按鈕,即可添加外鍵約束,如圖7.4.6所示。

從圖7.4.6中可以看出,在第一欄中可以輸入外鍵約束的名稱,在第二欄和第三欄中,可以設(shè)置當(dāng)刪除(ONDELETE)、更新(ONU

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論