版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
PHP動(dòng)態(tài)網(wǎng)站開(kāi)發(fā)項(xiàng)目教程項(xiàng)目2在線投票系統(tǒng)任務(wù)7項(xiàng)目開(kāi)發(fā)前的準(zhǔn)備工作子任務(wù)7.1項(xiàng)目介紹7.1.1項(xiàng)目基本需求分析
(1)游客可以查看投票項(xiàng)目,以及各項(xiàng)目的當(dāng)前得票數(shù)。(2)游客可以注冊(cè)成為會(huì)員。(3)游客注冊(cè)后可以登錄本系統(tǒng)。(4)登錄系統(tǒng)后,可以單擊車輛圖片實(shí)現(xiàn)投票。(5)管理員可以登錄后臺(tái)管理系統(tǒng)查看車輛列表。(6)管理員可以通過(guò)列表查看所有投票項(xiàng)目的得票情況。(7)管理員可以管理各個(gè)投票項(xiàng)目(包括新增、刪除、編輯)。(8)管理員可以通過(guò)圖表的形式查看各項(xiàng)目的得票情況。
7.1.2項(xiàng)目詳細(xì)設(shè)計(jì)
(1)整合會(huì)員管理系統(tǒng)。(2)會(huì)員登錄后,單擊列表中的項(xiàng)目進(jìn)行投票。投票后,票數(shù)立即變化,顯示新的票數(shù)。(3)只有登錄用戶可以投票,未登錄用戶單擊投票項(xiàng)目時(shí),彈出需要登錄的提示。(4)限制同一名用戶一天只能給一個(gè)投票對(duì)象投5票。(5)限制同一名用戶一天只能給3個(gè)投票對(duì)象投票。(6)投票時(shí)要輸入驗(yàn)證碼,以防止機(jī)器或程序刷票。(7)每個(gè)投票對(duì)象之間至少要間隔1min才能重復(fù)投票。(8)一個(gè)IP地址一天只能給一個(gè)投票對(duì)象投5票。(9)投票采用AJAX無(wú)刷新技術(shù),前端頁(yè)面無(wú)須刷新。(10)管理員登錄后,進(jìn)入管理頁(yè)面,通過(guò)列表查看所有投票項(xiàng)目的得票情況。(11)管理員登錄后,可以管理所有投票項(xiàng)目,包括編輯和刪除已有項(xiàng)目、添加新的投票項(xiàng)目。(12)管理員可以通過(guò)圖表的形式查看投票項(xiàng)目得票情況,圖表以柱狀圖的形式呈現(xiàn)。7.1.3項(xiàng)目展示
(1)圖7.1.1所示為項(xiàng)目首頁(yè)。圖7.1.1
項(xiàng)目首頁(yè)(2)圖7.1.2所示為管理員登錄后的首頁(yè)。圖7.1.2
管理員登錄后的首頁(yè)(3)圖7.1.3所示為投票時(shí)輸入驗(yàn)證碼的頁(yè)面。圖7.1.3
投票時(shí)輸入驗(yàn)證碼(4)圖7.1.4所示為管理員進(jìn)行車輛管理的頁(yè)面。圖7.1.4
管理員進(jìn)行車輛管理(5)圖7.1.5所示為管理員添加車輛時(shí)的頁(yè)面。圖7.1.5
管理員添加車輛(6)圖7.1.6展示了管理員查看車輛得票情況柱狀圖頁(yè)面。圖7.1.6
管理員查看車輛得票情況柱狀圖子任務(wù)7.2版本控制與代碼托管【知識(shí)儲(chǔ)備】7.2.1版本控制
版本控制軟件提供完備的版本管理功能,用于存儲(chǔ)、追蹤目錄(文件夾)和文件的修改歷史,是軟件開(kāi)發(fā)者的必備工具,是軟件公司的基礎(chǔ)設(shè)施。版本控制軟件的最高目標(biāo)是支持軟件公司的配置管理活動(dòng)、追蹤多個(gè)版本的開(kāi)發(fā)和維護(hù)活動(dòng),以及及時(shí)發(fā)布軟件。簡(jiǎn)單來(lái)說(shuō),在開(kāi)發(fā)過(guò)程中會(huì)不斷發(fā)現(xiàn)新需求,不斷發(fā)現(xiàn)bug,如果不做控制,那么軟件將永遠(yuǎn)不能發(fā)布,或今天發(fā)布一個(gè)版本,明天又發(fā)布一個(gè)版本。
版本控制對(duì)于DevOps(Development和Operations的組合詞,是一組過(guò)程、方法與系統(tǒng)的統(tǒng)稱,用于促進(jìn)開(kāi)發(fā)、技術(shù)運(yùn)營(yíng)和質(zhì)量保障部門(mén)之間的溝通、協(xié)作與整合)團(tuán)隊(duì)的成功起著核心作用。根據(jù)2022年度DevOps研究,版本控制一直是整體軟件工程性能的最佳指標(biāo)之一,使用版本控制有以下優(yōu)勢(shì)。1.更快、更簡(jiǎn)單地發(fā)現(xiàn)錯(cuò)誤2.并行開(kāi)發(fā)3.提高最終產(chǎn)品的可靠性
版本控制和一流的軟件工程性能之間的共生關(guān)系是顯而易見(jiàn)的。當(dāng)團(tuán)隊(duì)正確利用版本控制系統(tǒng)時(shí),可以以更快的速度和更高的可靠性水平進(jìn)行更改。DevOps的目標(biāo)是加快整個(gè)生產(chǎn)過(guò)程,同時(shí)提高工作的質(zhì)量。版本控制在增強(qiáng)團(tuán)隊(duì)溝通和成功開(kāi)發(fā)產(chǎn)品方面發(fā)揮著巨大作用,并為實(shí)現(xiàn)這些目標(biāo)提供了巨大的幫助。7.2.2Git介紹
代碼托管服務(wù)通常是企業(yè)或者組織基于版本控制工具提供的一種研發(fā)流程管理工具,例如,大家熟知的“GitHub”就是面向開(kāi)源開(kāi)發(fā)者提供的基于Git版本管理工具的代碼托管服務(wù)。所以代碼托管服務(wù)隨著使用規(guī)模的擴(kuò)大,通常也會(huì)變得更加龐大、復(fù)雜和難以管理,對(duì)于個(gè)人開(kāi)發(fā)者而言可能無(wú)須關(guān)注,但對(duì)于企業(yè)而言需要一定的維護(hù)成本,畢竟大多數(shù)情況下,代碼托管服務(wù)中存儲(chǔ)的可能是企業(yè)的核心軟資產(chǎn)。對(duì)于代碼托管服務(wù)來(lái)說(shuō),比較核心的要點(diǎn)有3個(gè)。(1)可協(xié)同。在功能層面要包含倉(cāng)庫(kù)管理、分支管理、權(quán)限管理、提交管理、代碼評(píng)審等代碼存儲(chǔ)和版本管理功能,讓開(kāi)發(fā)者更好地協(xié)同工作。(2)可集成。好的代碼托管服務(wù)應(yīng)該具備靈活和簡(jiǎn)易的第三方工具集成能力,有些甚至直接提供了嵌入式的CI/CD(CI指的是持續(xù)集成,CD指的是持續(xù)部署)能力,降低了DevOps的落地成本。(3)安全可靠。這是最重要的一點(diǎn),對(duì)于個(gè)人開(kāi)發(fā)者而言可能無(wú)感,但是對(duì)于企業(yè)而言,代碼的安全性、服務(wù)的穩(wěn)定性、數(shù)據(jù)是否存在丟失的風(fēng)險(xiǎn),是最被優(yōu)先考量的點(diǎn)。7.2.3碼云的使用
打開(kāi)碼云的官網(wǎng),注冊(cè)一個(gè)個(gè)人賬號(hào)即可免費(fèi)使用代碼托管服務(wù)。
為了配合代碼托管的使用,我們還需要在計(jì)算機(jī)中安裝Git軟件。
PhpStorm完美支持Git,可以通過(guò)PhpStorm的菜單命令完成版本控制和代碼托管的相關(guān)操作,非常方便。7.2.4Git的工作流程
在本地計(jì)算機(jī)中分有3個(gè)區(qū)域,分別是工作區(qū)(IDE代碼區(qū))、暫存區(qū)(修改過(guò)的文件緩存區(qū))、本地倉(cāng)庫(kù)(確認(rèn)修改過(guò)的所有文件區(qū))。在遠(yuǎn)程服務(wù)器上有一個(gè)“遠(yuǎn)程倉(cāng)庫(kù)”,保存所有的代碼,可以推送到服務(wù)器與別人共享。在項(xiàng)目開(kāi)始時(shí),我們的本地倉(cāng)庫(kù)為空,此時(shí),需要從遠(yuǎn)程倉(cāng)庫(kù)克?。╟lone)代碼到本地倉(cāng)庫(kù)(此時(shí),遠(yuǎn)程倉(cāng)庫(kù)應(yīng)該有初始化信息,或者有其他人完成的代碼)。
在后續(xù)過(guò)程中,如果要更新代碼,就需要從服務(wù)器拉?。╢etch)代碼到本地倉(cāng)庫(kù),然后合并(merge)到工作區(qū),也可以使用pull命令合并上述fetch和merge命令。上述工作流程的示意如圖7.2.1所示。圖7.2.1
Git工作流程示意
圖7.2.2所示為個(gè)人使用Git的流程示意。圖7.2.2
個(gè)人使用Git的流程示意
圖7.2.3所示為團(tuán)隊(duì)使用Git的流程示意。圖7.2.3
團(tuán)隊(duì)使用Git的流程示意
其中,fork操作表示把別人的倉(cāng)庫(kù)直接復(fù)制到本人的遠(yuǎn)程倉(cāng)庫(kù)中;clone命令表示從遠(yuǎn)程倉(cāng)庫(kù)直接下載到本地倉(cāng)庫(kù)中(適用于初始化,本地倉(cāng)庫(kù)為空的情況);pull命令表示從遠(yuǎn)程倉(cāng)庫(kù)拉取代碼合并到本地倉(cāng)庫(kù)(適用于已經(jīng)有本地倉(cāng)庫(kù)的情況);add命令表示將修改后的代碼添加至?xí)捍鎱^(qū),commit命令表示將暫存區(qū)代碼提交至本地倉(cāng)庫(kù);push命令表示從本地倉(cāng)庫(kù)更新文件到遠(yuǎn)程倉(cāng)庫(kù)。
PhpStorm可以完美支持Git,只需要先安裝好Git軟件,然后在PhpStorm中配置好Git文件路徑,就可以在PhpStorm中克隆遠(yuǎn)程倉(cāng)庫(kù)至本地以初始化項(xiàng)目。在本地編輯程序后,再通過(guò)add、commit、push命令更新遠(yuǎn)程倉(cāng)庫(kù)。7.2.5在PhpStorm中使用Git
(1)在Git官網(wǎng)下載安裝程序。下載時(shí),選擇好對(duì)應(yīng)的操作系統(tǒng)和軟件位數(shù)。同時(shí),還可以選擇安裝版本(Setup)或綠色版本(Portable),如圖7.2.4所示。圖7.2.4
下載Git安裝程序(2)打開(kāi)PhpStorm,單擊“Settings”
→“VersionControl”
→“Git”,然后在“PathtoGitexecutable”中選擇“git.exe”文件的路徑,最后單擊“Test”按鈕,如果成功顯示Git的版本,則說(shuō)明配置完成,如圖7.2.5所示。圖7.2.5
配置git.exe文件路徑
在新版本的PhpStorm中,也可以不用事先安裝Git,而是在使用時(shí),通過(guò)PhpStorm直接下載并安裝。以PhpStorm2021.2.1為例,在歡迎界面中單擊右上角的“GetfromVCS”按鈕,然后在Versioncontrol下拉菜單中選擇Git,系統(tǒng)會(huì)提示Git并未安裝,只需要單擊“DownloadandInstall”按鈕即可完成安裝,如圖7.2.6所示。圖7.2.6
從VCS復(fù)制項(xiàng)目(3)在碼云中創(chuàng)建一個(gè)倉(cāng)庫(kù)。登錄碼云后,將鼠標(biāo)指針移至右上角的“+”處,在彈出的快捷菜單中選擇“新建倉(cāng)庫(kù)”。按要求輸入倉(cāng)庫(kù)名稱和路徑(輸入倉(cāng)庫(kù)名稱后,路徑會(huì)自動(dòng)填充),如果路徑和已有倉(cāng)庫(kù)路徑重復(fù),則系統(tǒng)會(huì)給出提示,只需要修改路徑名稱即可。如圖7.2.7所示,新建倉(cāng)庫(kù)時(shí),可以選擇是“私有”還是“開(kāi)源”。開(kāi)源表示任何人都可以訪問(wèn)你的倉(cāng)庫(kù),可以下載你的文件。私有表示僅有你自己,或你添加的成員可以下載或修改你的文件。當(dāng)然,在現(xiàn)在的碼云系統(tǒng)中新建倉(cāng)庫(kù)時(shí),只能選擇私有。如果想設(shè)置成開(kāi)源,則可以在倉(cāng)庫(kù)創(chuàng)建好以后,單擊“管理”→“基本信息”命令,重新設(shè)置成開(kāi)源。圖7.2.7
在碼云中新建倉(cāng)庫(kù)
創(chuàng)建好倉(cāng)庫(kù)以后,單擊“代碼”選項(xiàng)卡,可以看到有一個(gè)倉(cāng)庫(kù)的地址,如圖7.2.8所示。此處默認(rèn)顯示的是HTTPS地址,單擊右邊的復(fù)制圖標(biāo)即可復(fù)制地址,然后將地址填充到圖7.2.6中的URL文本框中,在下面的Directory中選擇項(xiàng)目所在位置,再單擊右下角的“Clone”按鈕,即可完成項(xiàng)目的復(fù)制。小王同學(xué)選擇將項(xiàng)目創(chuàng)建至E:\onlineVote。圖7.2.8
復(fù)制倉(cāng)庫(kù)地址(4)項(xiàng)目復(fù)制成功后,PhpStorm會(huì)自動(dòng)打開(kāi)當(dāng)前項(xiàng)目。由于剛才在碼云中新建的是一個(gè)空白倉(cāng)庫(kù),因此,現(xiàn)在在本地項(xiàng)目文件夾中沒(méi)有任何文件。如果在碼云的當(dāng)前倉(cāng)庫(kù)中添加了一些文件,那么復(fù)制項(xiàng)目以后,這些文件會(huì)自動(dòng)同步到當(dāng)前項(xiàng)目中。選中項(xiàng)目根目錄并單擊鼠標(biāo)右鍵,創(chuàng)建一個(gè)新文件index.php。當(dāng)有新的文件加入項(xiàng)目中時(shí),系統(tǒng)會(huì)自動(dòng)提示是否將此文件添加到Git中,如圖7.2.9所示。圖7.2.9
添加文件到Git
單擊“Add”按鈕,即可將文件添加至Git。勾選“Don’taskagain”復(fù)選框后,以后新增加的文件都會(huì)自動(dòng)添加至Git。為了查看文件是否添加到Git的區(qū)別,還可以再新建一個(gè)test.php文件,然后選擇不添加至Git,最后觀察這兩個(gè)文件的顏色是有區(qū)別的,“index.php”為綠色,“test.php”為紅色,如圖7.2.10所示。當(dāng)然,具體的顏色和當(dāng)前PhpStorm使用的主題有關(guān)。圖7.2.10
將新增文件添加至Git(5)當(dāng)工作進(jìn)行到一定的進(jìn)度以后,就可以把當(dāng)前的文件提交到碼云。選中項(xiàng)目目錄并單擊鼠標(biāo)右鍵,在彈出的快捷菜單中選擇“Git”→“CommitDirectory”命令,如圖7.2.11所示。接下來(lái),會(huì)打開(kāi)提交文件的對(duì)話框,如圖7.2.12所示。其中左上角第一個(gè)區(qū)域就是當(dāng)前添加到Git且有修改的文件,第二個(gè)區(qū)域是未添加到Git的文件,默認(rèn)選中第一類文件。在左邊中間區(qū)域需要輸入提交信息(CommitMessage),就是這一次提交的描述信息。圖7.2.11
提交目錄
在圖7.2.12最下面的區(qū)域顯示當(dāng)前選中文件的內(nèi)容。如果此文件是新增加的文件,則直接在下面區(qū)域顯示其當(dāng)前內(nèi)容。如果此文件是原來(lái)已經(jīng)有的文件,并進(jìn)行了修改,則下面的區(qū)域分成左右兩欄顯示。其中左邊一欄是該文件上一個(gè)版本的內(nèi)容,右邊一欄是該文件現(xiàn)在的內(nèi)容。單擊下面的“Commit”按鈕即可將修改后的文件提交至本地倉(cāng)庫(kù)。
如果需要將文件提交至遠(yuǎn)程倉(cāng)庫(kù),則再次在圖7.2.11中單擊“Push”命令。當(dāng)然,也可以在“Commit”時(shí)同時(shí)完成“Push”,只需要單擊“Commit”按鈕旁邊的下拉按鈕,選擇“CommitandPush”命令,打開(kāi)圖7.2.13所示的界面,單擊右下角的“Push”按鈕,在彈出的登錄的窗口中輸入碼云的用戶名和密碼,可以勾選“Remember”復(fù)選框以記住密碼,避免每次都要重新輸入。圖7.2.12
提交文件圖7.2.13
提交文件至遠(yuǎn)程倉(cāng)庫(kù)
“Push”成功后,可以到碼云中查看倉(cāng)庫(kù),在倉(cāng)庫(kù)中可以看到剛才新上傳的所有文件。
如果我們換了一臺(tái)新計(jì)算機(jī),或者有其他協(xié)作者也上傳了代碼,本地倉(cāng)庫(kù)的文件就不是最新版本了。此時(shí),可以在圖7.2.11中選擇“Pull”命令,將最新的文件拉取至本地倉(cāng)庫(kù)。
如果多次提交過(guò)某一個(gè)文件,這個(gè)文件就會(huì)被保存為多個(gè)版本。此時(shí),可以在圖7.2.11中單擊“ShowHistory”命令,此文件的所有版本將顯示在下面的窗口中,可以單擊任意一個(gè)版本的文件查看內(nèi)容,如圖7.2.14所示。如果想撤銷某個(gè)版本的修改內(nèi)容,或者回到這個(gè)版本的上一個(gè)版本,就可以選中想要回退的版本并單擊鼠標(biāo)右鍵,然后選擇“RevertCommit”命令,新建一個(gè)名為“Revert×××Commit”的提交記錄,該記錄進(jìn)行的操作是將“×××Commit”中對(duì)代碼進(jìn)行的修改全部撤銷。圖7.2.14
查看文件的歷史版本子任務(wù)7.3數(shù)據(jù)庫(kù)設(shè)計(jì)的方法及原理【知識(shí)儲(chǔ)備】7.3.1數(shù)據(jù)庫(kù)設(shè)計(jì)的方法
(1)直觀設(shè)計(jì)法(手工試湊法)。這是最早使用的數(shù)據(jù)庫(kù)設(shè)計(jì)方法。這種方法依賴于設(shè)計(jì)者的經(jīng)驗(yàn)和技巧,缺乏科學(xué)分析的理論基礎(chǔ)和工程手段的支持,因?yàn)樵O(shè)計(jì)質(zhì)量與設(shè)計(jì)人員的經(jīng)驗(yàn)和水平有直接關(guān)系,所以設(shè)計(jì)質(zhì)量很難保證,主要適用于一些簡(jiǎn)單小型的系統(tǒng)。(2)規(guī)范設(shè)計(jì)法。將數(shù)據(jù)庫(kù)設(shè)計(jì)分為若干階段,明確規(guī)定各階段的任務(wù),采用“自頂向下、分層實(shí)現(xiàn)、逐步求精”的設(shè)計(jì)原則,結(jié)合數(shù)據(jù)庫(kù)理論和軟件工程設(shè)計(jì)方法,實(shí)現(xiàn)設(shè)計(jì)過(guò)程的每一細(xì)節(jié),最終完成整個(gè)設(shè)計(jì)任務(wù)。這種方法包括新奧爾良方法、基于實(shí)體-聯(lián)系(Entity-Relationship,E-R)模型的數(shù)據(jù)庫(kù)設(shè)計(jì)方法、基于第三范式(ThirdNormalForm,3NF)的設(shè)計(jì)方法、面向?qū)ο蟮臄?shù)據(jù)庫(kù)設(shè)計(jì)方法、統(tǒng)一建模語(yǔ)言(UnifiedModelingLanguage,UML)方法等。(3)計(jì)算機(jī)輔助設(shè)計(jì)法。在數(shù)據(jù)庫(kù)設(shè)計(jì)的某些過(guò)程中,可以利用計(jì)算機(jī)和一些輔助設(shè)計(jì)工具模擬某一規(guī)范設(shè)計(jì)法,并以人的知識(shí)或經(jīng)驗(yàn)為主導(dǎo),通過(guò)人機(jī)交互方式實(shí)現(xiàn)設(shè)計(jì)中的某些部分。比如,Oracle公司開(kāi)發(fā)的Designer、Sybase公司開(kāi)發(fā)的PowerDesigner,都是常用的數(shù)據(jù)庫(kù)設(shè)計(jì)工具軟件。7.3.2數(shù)據(jù)庫(kù)設(shè)計(jì)的基本步驟
(1)需求分析。通過(guò)詳細(xì)調(diào)查現(xiàn)實(shí)世界要處理的對(duì)象(組織、部門(mén)、企業(yè)等),充分了解原系統(tǒng)(手工系統(tǒng)或計(jì)算機(jī)系統(tǒng))的工作概況,明確用戶的各種需求。(2)概念結(jié)構(gòu)設(shè)計(jì)。通過(guò)對(duì)用戶需求進(jìn)行綜合、歸納與抽象,形成一個(gè)獨(dú)立于具體數(shù)據(jù)庫(kù)管理系統(tǒng)的概念模型。(3)邏輯結(jié)構(gòu)設(shè)計(jì)。將概念結(jié)構(gòu)轉(zhuǎn)換為某個(gè)數(shù)據(jù)庫(kù)管理系統(tǒng)支持的數(shù)據(jù)模型,并對(duì)其進(jìn)行優(yōu)化。(4)物理結(jié)構(gòu)設(shè)計(jì)。為邏輯結(jié)構(gòu)選取最適合應(yīng)用環(huán)境的物理結(jié)構(gòu),包括存儲(chǔ)結(jié)構(gòu)和存取方法等。(5)數(shù)據(jù)庫(kù)實(shí)施。根據(jù)邏輯結(jié)構(gòu)設(shè)計(jì)和物理結(jié)構(gòu)設(shè)計(jì)的結(jié)果構(gòu)建數(shù)據(jù)庫(kù),編寫(xiě)與調(diào)試應(yīng)用程序,組織數(shù)據(jù)入庫(kù)并進(jìn)行試運(yùn)行。(6)數(shù)據(jù)庫(kù)運(yùn)行和維護(hù)。經(jīng)過(guò)試運(yùn)行后即可投入正式運(yùn)行,在運(yùn)行過(guò)程中必須不斷對(duì)其進(jìn)行評(píng)估、調(diào)整與修改。設(shè)計(jì)步驟設(shè)計(jì)描述數(shù)據(jù)處理需求分析數(shù)據(jù)字典、數(shù)據(jù)項(xiàng)、數(shù)據(jù)流、數(shù)據(jù)存儲(chǔ)的描述數(shù)據(jù)流圖、判定樹(shù)、數(shù)據(jù)字典中處理過(guò)程的描述概念結(jié)構(gòu)設(shè)計(jì)概念模型(E-R模型)、數(shù)據(jù)字典系統(tǒng)說(shuō)明書(shū)(系統(tǒng)要求、方案、數(shù)據(jù)流圖)邏輯結(jié)構(gòu)設(shè)計(jì)某種數(shù)據(jù)模型(如關(guān)系)系統(tǒng)結(jié)構(gòu)圖(模塊結(jié)構(gòu))物理結(jié)構(gòu)設(shè)計(jì)存儲(chǔ)安排、方法選擇、存取路徑建立模塊設(shè)計(jì)數(shù)據(jù)庫(kù)實(shí)施編寫(xiě)與調(diào)試應(yīng)用程序、裝入數(shù)據(jù)、數(shù)據(jù)庫(kù)試運(yùn)行程序編碼、編譯聯(lián)結(jié)、測(cè)試數(shù)據(jù)庫(kù)運(yùn)行和
維護(hù)性能監(jiān)測(cè)、轉(zhuǎn)儲(chǔ)/恢復(fù)、數(shù)據(jù)庫(kù)重組和重構(gòu)新舊系統(tǒng)轉(zhuǎn)換、運(yùn)行、維護(hù)表7.3.1
數(shù)據(jù)庫(kù)的設(shè)計(jì)步驟及具體的設(shè)計(jì)描述7.3.3概念結(jié)構(gòu)設(shè)計(jì)
概念結(jié)構(gòu)設(shè)計(jì)就是將需求分析得到的用戶需求抽象為信息結(jié)構(gòu)(即概念模型)的過(guò)程。
目前應(yīng)用最普遍的是E-R模型,它將現(xiàn)實(shí)世界的信息結(jié)構(gòu)統(tǒng)一用屬性、實(shí)體以及它們之間的聯(lián)系來(lái)描述。
為了簡(jiǎn)化E-R模型的處理,現(xiàn)實(shí)世界的事物能作為屬性對(duì)待的,盡量作為屬性對(duì)待。
其中有兩條基本的準(zhǔn)則。(1)作為屬性,不能再具有需要描述的性質(zhì)。屬性必須是不可再細(xì)分的數(shù)據(jù)項(xiàng),不能包含其他屬性。(2)屬性不能與其他實(shí)體具有聯(lián)系,即E-R模型中所表示的聯(lián)系是實(shí)體之間的聯(lián)系。7.3.4實(shí)體-聯(lián)系圖(E-R模型)
對(duì)E-R模型的理解,主要是弄清楚其組成元素和元素間的聯(lián)系。(1)組成元素。E-R模型中具體的組成元素如表7.3.2所示。元素描述表示形式實(shí)體客觀存在并可以相互區(qū)別的事物用矩形框表示,矩形框內(nèi)寫(xiě)明實(shí)體名屬性實(shí)體所具有的一個(gè)屬性用橢圓形表示,并用無(wú)向邊將其與相應(yīng)的實(shí)體連接起來(lái)聯(lián)系實(shí)體和實(shí)體之間,以及實(shí)體內(nèi)部的聯(lián)系用菱形表示,菱形框內(nèi)寫(xiě)明聯(lián)系名,并用無(wú)向邊分別將其與有關(guān)實(shí)體連接起來(lái),同時(shí)在無(wú)向邊旁邊標(biāo)上聯(lián)系的類型表7.3.2
E-R模型中具體的組成元素(2)聯(lián)系詳解。
實(shí)體之間的聯(lián)系最常見(jiàn)的有如下3種。①一對(duì)一。
圖7.3.1所示為一對(duì)一聯(lián)系的示意。其含義是,實(shí)體集“公民”中的每一個(gè)實(shí)體至多與實(shí)體集“身份證號(hào)碼”中一個(gè)實(shí)體有聯(lián)系;反之,實(shí)體集“身份證號(hào)碼”中的每個(gè)實(shí)體至多與實(shí)體集“公民”中的一個(gè)實(shí)體有聯(lián)系。圖7.3.1
一對(duì)一聯(lián)系示意②一對(duì)多。
圖7.3.2所示為一對(duì)多聯(lián)系的示意。其含義是,實(shí)體集“班級(jí)”至少與實(shí)體集“學(xué)生”中的N(N
>0)個(gè)實(shí)體有聯(lián)系;并且實(shí)體集“學(xué)生”中的每一個(gè)實(shí)體至多與實(shí)體集“班級(jí)”中的一個(gè)實(shí)體有聯(lián)系。圖7.3.2
一對(duì)多聯(lián)系示意③多對(duì)多。
圖7.3.3所示為多對(duì)多聯(lián)系的示意。其含義是,實(shí)體集“學(xué)生”中的每一個(gè)實(shí)體至少與實(shí)體集“課程”中的M(M
>0)個(gè)實(shí)體有聯(lián)系,并且實(shí)體集“課程”中的每一個(gè)實(shí)體至少與實(shí)體集“學(xué)生”中的N(N
>0)個(gè)實(shí)體有聯(lián)系。圖7.3.3
多對(duì)多聯(lián)系示意子任務(wù)7.4創(chuàng)建數(shù)據(jù)庫(kù)7.4.1實(shí)例詳解
為了能順利完成數(shù)據(jù)庫(kù)設(shè)計(jì),小王同學(xué)先做了如下的練習(xí)。
問(wèn)題描述:(1)一個(gè)學(xué)生可選修多門(mén)課程,一門(mén)課程有若干學(xué)生選修;(2)一個(gè)教師可講授多門(mén)課程,一門(mén)課程只有一個(gè)教師講授;(3)一個(gè)學(xué)生選修一門(mén)課程,僅有一個(gè)成績(jī);(4)學(xué)生的屬性有學(xué)號(hào)、姓名;教師的屬性有教師編號(hào)、教師姓名;課程的屬性有課程號(hào)、課程名。
根據(jù)上面的問(wèn)題描述,小王同學(xué)最終繪制了圖7.4.1所示的E-R模型,其中,有下畫(huà)線的屬性表示主鍵。圖7.4.1
根據(jù)問(wèn)題描述繪制的E-R模型
有了E-R模型,就可以轉(zhuǎn)換數(shù)據(jù)表了。一般來(lái)說(shuō),可以為一個(gè)實(shí)體創(chuàng)建一張表,為一個(gè)聯(lián)系(關(guān)系)創(chuàng)建一張表。當(dāng)然,在實(shí)際工作中,可以根據(jù)情況進(jìn)行合并等操作。
完成上面的E-R模型后,小王同學(xué)覺(jué)得火候差不多了,可以正式制作在線投票系統(tǒng)的數(shù)據(jù)庫(kù)了。他仔細(xì)看了子任務(wù)7.1的需求分析,然后畫(huà)出了圖7.4.2所示的E-R模型。
他仔細(xì)檢查和分析后,覺(jué)得這個(gè)E-R模型已經(jīng)沒(méi)有問(wèn)題了,能夠完整體現(xiàn)在線投票系統(tǒng)的需求分析,接下來(lái),他根據(jù)E-R模型設(shè)計(jì)出了最終的數(shù)據(jù)表,其具體結(jié)構(gòu)如表7.4.1~表7.4.3所示。圖7.4.2
在線投票系統(tǒng)數(shù)據(jù)庫(kù)設(shè)計(jì)之E-R模型序號(hào)列名類型排序規(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)序號(hào)列名類型排序規(guī)則注釋1idint(11)
投票詳情ID,主鍵2userIDint(11)
用戶ID,外鍵3carIDint(11)
車輛ID,外鍵4voteTimedate
投票時(shí)間5ipvarchar(15)utf8_unicode_ci投票者IP地址表7.4.2
投票表(表名:voteDetail)序號(hào)列名類型排序規(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è)計(jì)的數(shù)據(jù)表中出現(xiàn)了“主鍵”和“外鍵”。那什么是主鍵和外鍵呢?
關(guān)系數(shù)據(jù)庫(kù)中的一條記錄有若干屬性,若其中某一個(gè)屬性或?qū)傩越M能唯一標(biāo)識(shí)一條記錄,該屬性或?qū)傩越M就可以稱為一個(gè)主鍵。
比如,有一張數(shù)據(jù)表名為“學(xué)生表”,其列構(gòu)成為:學(xué)號(hào)、姓名、性別、班級(jí)。其中每個(gè)學(xué)生的學(xué)號(hào)是唯一的,因此,學(xué)號(hào)就是一個(gè)主鍵。
又如,有一張數(shù)據(jù)表名為“課程表”,其列構(gòu)成為:課程編號(hào)、課程名、學(xué)分。其中課程編號(hào)是唯一的,因此,課程編號(hào)就是一個(gè)主鍵。
再如,有一張數(shù)據(jù)表名為“成績(jī)表”,其列構(gòu)成為:學(xué)號(hào)、課程編號(hào)、成績(jī)。顯然,成績(jī)表中的單個(gè)屬性無(wú)法唯一標(biāo)識(shí)一條記錄,學(xué)號(hào)和課程編號(hào)的組合才可以唯一標(biāo)識(shí)一條記錄,所以學(xué)號(hào)和課程編號(hào)的屬性組就是一個(gè)主鍵。
雖然成績(jī)表中的學(xué)號(hào)不是成績(jī)表的主鍵,但它和學(xué)生表中的學(xué)號(hào)相對(duì)應(yīng),并且學(xué)生表中的學(xué)號(hào)是學(xué)生表的主鍵,因此,可以稱成績(jī)表中的學(xué)號(hào)是學(xué)生表的外鍵。同理,成績(jī)表中的課程編號(hào)是課程表的外鍵。
數(shù)據(jù)表中,除了主鍵、外鍵,還有索引。那么主鍵、外鍵和索引有什么區(qū)別?表7.4.4總結(jié)了主鍵、外鍵和索引的區(qū)別。主鍵外鍵索引定義唯一標(biāo)識(shí)一條記錄,不能有重復(fù),不允許為空表的外鍵是另一表的主鍵,外鍵可以有重復(fù)的值,可以是空值該字段沒(méi)有重復(fù)值,但可以是空值作用用來(lái)保證數(shù)據(jù)完整性用來(lái)和其他表建立聯(lián)系提高查詢排序的速度個(gè)數(shù)主鍵只能有一個(gè)一張表可以有多個(gè)外鍵一張表可以有多個(gè)唯一索引表7.4.4
主鍵、外鍵和索引的區(qū)別
小王同學(xué)根據(jù)前面創(chuàng)建好的3張數(shù)據(jù)表,在phpMyAdmin中進(jìn)行數(shù)據(jù)庫(kù)創(chuàng)建。他創(chuàng)建了一個(gè)數(shù)據(jù)庫(kù),名為vote,其中就包括上述3張數(shù)據(jù)表,具體內(nèi)容如圖7.4.3所示。其中每一張表都采用了一個(gè)id作為主鍵,這個(gè)id列是一個(gè)自動(dòng)增長(zhǎng)列,它本身并無(wú)實(shí)際意義,僅僅用來(lái)作為主鍵,作用是標(biāo)識(shí)某一行數(shù)據(jù)。圖7.4.3
在phpMyAdmin中創(chuàng)建好的數(shù)據(jù)表7.4.3如何創(chuàng)建外鍵
1.創(chuàng)建外鍵的必備條件(1)需要把相關(guān)數(shù)據(jù)表的存儲(chǔ)引擎設(shè)置為InnoDB。(2)創(chuàng)建外鍵時(shí),外鍵本身必須創(chuàng)建索引。(3)設(shè)置外鍵的列,其數(shù)據(jù)類型要和對(duì)應(yīng)的主鍵數(shù)據(jù)類型保持一致。2.選擇數(shù)據(jù)表存儲(chǔ)引擎
在創(chuàng)建數(shù)據(jù)表時(shí),可以在右下角的存儲(chǔ)引擎中選擇類型,如圖7.4.4所示。
在MySQL數(shù)據(jù)庫(kù)中,數(shù)據(jù)表的存儲(chǔ)引擎默認(rèn)是MyISAM。如果要?jiǎng)?chuàng)建外鍵,則存儲(chǔ)引擎必須設(shè)置為InnoDB。3.MyISAM和InnoDB的區(qū)別(1)緩存機(jī)制。MyISAM僅僅緩存索引,不會(huì)緩存實(shí)際數(shù)據(jù)信息,它會(huì)將這一工作交給操作系統(tǒng)(OperatingSystem,OS)級(jí)別的文件系統(tǒng)緩存,所以MyISAM緩存優(yōu)化工作集中在索引緩存優(yōu)化上。InnoDB有自己的緩存,不僅緩存索引,還緩存表中的數(shù)據(jù)。(2)事務(wù)支持。MyISAM不支持事務(wù)。InnoDB支持事務(wù),也支持主鍵和外鍵。(3)鎖定實(shí)現(xiàn)。MyISAM鎖定由MySQL服務(wù)控制,只支持表級(jí)鎖。InnoDB鎖定交由InnoDB存儲(chǔ)引擎,支持行級(jí)鎖、頁(yè)級(jí)鎖等粒度更小的鎖定級(jí)別。由于鎖定級(jí)別的差異,在更新并行度上,InnoDB比MyISAM好很多。(4)數(shù)據(jù)物理存儲(chǔ)方式(包括索引和數(shù)據(jù))。在MyISAM存儲(chǔ)引擎中,每張數(shù)據(jù)表有3個(gè)文件:“.FRM”文件存放表結(jié)構(gòu)數(shù)據(jù);“.MYI”文件存放索引信息;“.MYD”文件存放表數(shù)據(jù)。圖7.4.4
新建數(shù)據(jù)表時(shí)設(shè)置存儲(chǔ)引擎4.存儲(chǔ)引擎的修改
如果已經(jīng)使用默認(rèn)存儲(chǔ)引擎創(chuàng)建好了數(shù)據(jù)表,則可以在進(jìn)入數(shù)據(jù)表以后,在頁(yè)面上方導(dǎo)航菜單中單擊“操作”按鈕,然后在“存儲(chǔ)引擎”中進(jìn)行修改,如圖7.4.5所示。圖7.4.5
在“操作”中修改數(shù)據(jù)表的存儲(chǔ)引擎5.添加外鍵
在phpMyAdmin中打開(kāi)表結(jié)構(gòu)后,其中有一個(gè)“關(guān)聯(lián)視圖”按鈕,單擊該按鈕,即可添加外鍵約束,如圖7.4.6所示。
從圖7.4.6中可以看出,在第一欄中可以輸入外鍵約束的名稱,在第二欄和第三欄中,可以設(shè)置當(dāng)刪除(ONDELETE)、更新(ONU
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 建材施工承攬合同范例
- 內(nèi)江商場(chǎng)保安合同范例
- 合同范例里序號(hào)
- 聘請(qǐng)醫(yī)師合同范例
- 商標(biāo)授權(quán)轉(zhuǎn)讓服務(wù)合同范例
- 縣城商鋪售賣合同范例
- 農(nóng)村大棚用人合同范例
- 銅仁幼兒師范高等專科學(xué)?!毒W(wǎng)絡(luò)攻防》2023-2024學(xué)年第一學(xué)期期末試卷
- 銅川職業(yè)技術(shù)學(xué)院《認(rèn)知智能與智能通信技術(shù)》2023-2024學(xué)年第一學(xué)期期末試卷
- 同濟(jì)大學(xué)《新能源技術(shù)經(jīng)濟(jì)學(xué)》2023-2024學(xué)年第一學(xué)期期末試卷
- 案例分析 長(zhǎng)沙望城區(qū)自建房倒塌事23課件講解
- 管道巡護(hù)管理
- 第17課《貓》課件+【知識(shí)精研】統(tǒng)編版語(yǔ)文七年級(jí)上冊(cè)
- 統(tǒng)計(jì)信號(hào)分析知到智慧樹(shù)章節(jié)測(cè)試課后答案2024年秋哈爾濱工程大學(xué)
- 《程序化成功案例》課件
- 浙江省2023年1月學(xué)業(yè)考試物理物理試題(解析版)
- 智慧傳承-黎族船型屋智慧樹(shù)知到期末考試答案章節(jié)答案2024年海南師范大學(xué)
- 服裝行業(yè)智能工廠整體解決方案
- 真崎航の21部
- 肘關(guān)節(jié)評(píng)定表
- 重視公路勘察設(shè)計(jì)后續(xù)服務(wù)工作
評(píng)論
0/150
提交評(píng)論