畢業(yè)設(shè)計(論文)-springboot家具商城平臺設(shè)計_第1頁
畢業(yè)設(shè)計(論文)-springboot家具商城平臺設(shè)計_第2頁
畢業(yè)設(shè)計(論文)-springboot家具商城平臺設(shè)計_第3頁
畢業(yè)設(shè)計(論文)-springboot家具商城平臺設(shè)計_第4頁
畢業(yè)設(shè)計(論文)-springboot家具商城平臺設(shè)計_第5頁
已閱讀5頁,還剩52頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

Java家具商城平臺一、引言隨著國內(nèi)外信息技術(shù)的發(fā)展和信息時代的到來,信息化、知識化、全球化已成為當(dāng)前經(jīng)濟發(fā)展的三大趨勢。人類社會信息化將導(dǎo)致一場信息革命,它使我國政府和公眾對信息作用的認(rèn)識不斷深化。社會公眾通過信息網(wǎng)絡(luò)獲取信息的積極性日益提高。從近幾年來看,信息的快速發(fā)展為人們帶來的非常大的便利,我們可以直接通過互聯(lián)網(wǎng)了解到任何信息,也能非常輕松的購買到任何商品。同時由于計算機技術(shù)和網(wǎng)絡(luò)技術(shù)的應(yīng)用,人們的學(xué)習(xí)速度在不斷加快,從數(shù)字處理時代到微機時代,到現(xiàn)在的網(wǎng)絡(luò)化時代,學(xué)習(xí)速度越來越快,這要求我們的管理模式也要適應(yīng)新的特點和新的模式。信息技術(shù)的發(fā)展對人們學(xué)習(xí)知識、掌握知識、運用知識提出了新的挑戰(zhàn)緒論1.1系統(tǒng)開發(fā)背景隨著計算機和網(wǎng)絡(luò)的日趨普及和技術(shù)的飛速發(fā)展,越來越多的商家開始研發(fā)和部署基于互聯(lián)網(wǎng)的應(yīng)用。建立自己的網(wǎng)站,發(fā)布商業(yè)信息,大刀闊斧的開展電子商務(wù)。現(xiàn)在琳瑯滿目的網(wǎng)店商品更是吸引著消費者的眼球,消費者通過電子商務(wù)足不出戶就能買到自己需要的并且是精心挑選的商品,方便、快捷又輕松。而對于商家來說,電商的經(jīng)營模式是高效的、低成本的,所以對于商家來說是有利可圖的。中國的家居用品行業(yè)迎來了大變革的大發(fā)展,需求量的擴大讓國內(nèi)的家居行業(yè)建立起種類齊全并與國際接軌的完整商業(yè)體系。國內(nèi)的專業(yè)人士也非??春眉揖有袠I(yè)的發(fā)展前景,認(rèn)為發(fā)展?jié)摿艽?。另外很多國外的企業(yè)也入住國內(nèi),在國內(nèi)得到較好的發(fā)展。家居行業(yè)也是中國制造業(yè)不可或缺的一部分,李克強總理提出中國制造2025綱領(lǐng),我們的家居行業(yè)也要響應(yīng)國家號召,為中國家居制造業(yè)創(chuàng)立一個良好的契機,讓我們通過“三步走”實現(xiàn)制造強國的戰(zhàn)略目標(biāo)能夠順利完成。同時隨著結(jié)算方式的改變,以前的“送貨上門、到貨付款”或“郵寄上門、貸款郵資先付”的方式不僅浪費了人力物力,而且限制了網(wǎng)絡(luò)的覆蓋范圍和商品的結(jié)構(gòu)種類,現(xiàn)在越來越多的人使用網(wǎng)上交易支付,它現(xiàn)在已經(jīng)能夠做到相對安全、方便快捷,給我們的生活帶來很大的便利。1.2系統(tǒng)開發(fā)意義家居商品是在網(wǎng)上直接購買,有專門的人會把東西送到消費者面前,通過虛擬的網(wǎng)站購物商城可以讓消費者足不出戶地輕松購物,讓購物的過程變得輕松、方便、快捷。電子商務(wù)系統(tǒng)由于具有營業(yè)時間自由、店面空間不受限制、地理位置不受影響、資金周轉(zhuǎn)靈活、投資少回報快、消費群體數(shù)量龐大等優(yōu)點,因此得到了快速地發(fā)展,在現(xiàn)代社會的商務(wù)活動中具有重要的作用。店鋪24小時不關(guān)門。網(wǎng)上家居商城可以讓消費者在每天的任意時間段購買店鋪貨架上提供的商品,不需要店員來照看店面。只要消費者根據(jù)自己的喜好選擇了合適的商品,在線下下單,完成消費過程就可以了。不受地理位置的影響。網(wǎng)購購物可以有效的屏蔽地理位置給消費者帶來的影響。就商品的位置而言,假如通過網(wǎng)上消費在深圳買一部手機,消費者只需通過網(wǎng)上商城下單,那么手機就會通過物流運到消費者的手里,不用消費者到實體店里面慢慢挑選了,大大的節(jié)約時間和空間成本。不受店鋪空間的限制。哪怕只是街邊小店,在網(wǎng)上卻可以擁有百貨大樓那么大的店面,只要投資者愿意,可以擺上成千上萬種商品。目前國內(nèi)最大的專業(yè)拍賣網(wǎng)站同時在線的商品要超過10萬件,已超過一些大超市。解決了貨物積壓和存放的問題。消費者數(shù)量多。互聯(lián)網(wǎng)的普及,讓越來越多的人成為網(wǎng)民,其中,就中國而言,已經(jīng)連續(xù)5年成為世界上網(wǎng)民最高的國家。如此多的網(wǎng)名為網(wǎng)上消費打下了基礎(chǔ)到現(xiàn)在,手機通信越來越發(fā)達(dá),隨身攜帶隨時購物的便捷性的體現(xiàn),網(wǎng)上消費將會更多。投資少,回報率高。網(wǎng)上開店建店成本非常小,另外不會因為回籠資金較慢影響貨品,商城可以通過在線銷售得到高回報。1.3項目的可行性研究設(shè)計此系統(tǒng)需要java面向?qū)ο缶幊袒A(chǔ),數(shù)據(jù)庫應(yīng)用知識以及功能分析。根據(jù)目前階段所掌握的知識,根據(jù)這學(xué)期以及之前學(xué)習(xí)掌握的java編程知識和數(shù)據(jù)庫應(yīng)用知識以及前端知識做出一個這樣的基于Javaweb、springboot輕量級框架網(wǎng)頁版的家具商城系統(tǒng)。1.4.社會可行性在互聯(lián)網(wǎng)技術(shù)高速發(fā)展的今天,通過互聯(lián)網(wǎng)的傳播會讓企業(yè)更容易的創(chuàng)造更多的經(jīng)濟效益,通過網(wǎng)上銷售,有了更大的市場,在這樣一個大環(huán)境下把資源統(tǒng)籌規(guī)化起來,就會獲得高效的收益。1.5技術(shù)可行性springSpring框架是\t"/item/Spring%20Boot/_blank"Java平臺上的一種開源應(yīng)用框架,提供具有控制反轉(zhuǎn)特性的容器。盡管Spring框架自身對編程模型沒有限制,但其在Java應(yīng)用中的頻繁使用讓它備受青睞,以至于后來讓它作為\t"/item/Spring%20Boot/_blank"EJB(EnterpriseJavaBeans)模型的補充,甚至是替補。Spring框架為開發(fā)提供了一系列的解決方案,比如利用控制反轉(zhuǎn)的核心特性,并通過依賴注入實現(xiàn)控制反轉(zhuǎn)來實現(xiàn)管理對象生命周期容器化,利用面向切面編程進(jìn)行聲明式的事務(wù)管理,整合多種持久化技術(shù)管理數(shù)據(jù)訪問,提供大量優(yōu)秀的Web框架方便開發(fā)等等。Spring框架具有控制反轉(zhuǎn)(IOC)特性,IOC旨在方便項目維護(hù)和測試,它提供了一種通過Java的反射機制對Java對象進(jìn)行統(tǒng)一的配置和管理的方法。Spring框架利用容器管理對象的生命周期,容器可以通過掃描XML文件或類上特定Java注解來配置對象,開發(fā)者可以通過依賴查找或依賴注入來獲得對象。Spring框架具有\(zhòng)t"/item/Spring%20Boot/_blank"面向切面編程(AOP)框架,SpringAOP框架基于代理模式,同時運行時可配置;AOP框架主要針對模塊之間的交叉關(guān)注點進(jìn)行模塊化。Spring框架的AOP框架僅提供基本的AOP特性,雖無法與AspectJ框架相比,但通過與AspectJ的集成,也可以滿足基本需求。Spring框架下的事務(wù)管理、遠(yuǎn)程訪問等功能均可以通過使用SpringAOP技術(shù)實現(xiàn)。Spring的事務(wù)管理框架為Java平臺帶來了一種抽象機制,使本地和全局事務(wù)以及嵌套事務(wù)能夠與保存點一起工作,并且?guī)缀蹩梢栽贘ava平臺的任何環(huán)境中工作。Spring集成多種事務(wù)模板,系統(tǒng)可以通過事務(wù)模板、XML或Java注解進(jìn)行事務(wù)配置,并且事務(wù)框架集成了消息傳遞和緩存等功能。Spring的數(shù)據(jù)訪問框架解決了開發(fā)人員在應(yīng)用程序中使用數(shù)據(jù)庫時遇到的常見困難。它不僅對Java:JDBC、iBATS/MyBATIs、Hibernate、Java數(shù)據(jù)對象(JDO)、ApacheOJB和ApacheCayne等所有流行的數(shù)據(jù)訪問框架中提供支持,同時還可以與Spring的事務(wù)管理一起使用,為數(shù)據(jù)訪問提供了靈活的抽象。Spring框架最初是沒有打算構(gòu)建一個自己的Web\t"/item/Spring%20Boot/_blank"MVC框架,其開發(fā)人員在開發(fā)過程中認(rèn)為現(xiàn)有的StrutsWeb框架的呈現(xiàn)層和請求處理層之間以及請求處理層和模型之間的分離不夠,于是創(chuàng)建了SpringMVC。SpringMVCSpringMVC框架是有一個MVC框架,通過實現(xiàn)Model-View-Controller模式來很好地將數(shù)據(jù)、業(yè)務(wù)與展現(xiàn)進(jìn)行分離。從這樣一個角度來說,SpringMVC和Struts、Struts2非常類似。SpringMVC的設(shè)計是圍繞DispatcherServlet展開的,DispatcherServlet負(fù)責(zé)將請求派發(fā)到特定的handler。通過可配置的handlermappings、viewresolution、locale以及themeresolution來處理請求并且轉(zhuǎn)到對應(yīng)的視圖。SpringMVC請求處理的整體流程如圖:mybatismybatis是對jdbc的封裝,它讓數(shù)據(jù)庫底層操作變的透明。mybatis的操作都是圍繞一個sqlSessionFactory實例展開的。mybatis通過配置文件關(guān)聯(lián)到各實體類的Mapper文件,Mapper文件中配置了每個類對數(shù)據(jù)庫所需進(jìn)行的sql語句映射。在每次與數(shù)據(jù)庫交互時,通過sqlSessionFactory拿到一個sqlSession,再執(zhí)行sql命令。頁面發(fā)送請求給控制器,控制器調(diào)用業(yè)務(wù)層處理邏輯,邏輯層向持久層發(fā)送請求,持久層與數(shù)據(jù)庫交互,后將結(jié)果返回給業(yè)務(wù)層,業(yè)務(wù)層將處理邏輯發(fā)送給控制器,控制器再調(diào)用視圖展現(xiàn)數(shù)據(jù)SpringBootSpringBoot是由Pivotal團隊在2013年開始研發(fā)、2014年4月發(fā)布第一個版本的全新開源的輕量級框架。它基于Spring4.0設(shè)計,不僅繼承了Spring框架原有的優(yōu)秀特性,而且還通過簡化配置來進(jìn)一步簡化了Spring應(yīng)用的整個搭建和開發(fā)過程。另外SpringBoot通過集成大量的框架使得依賴包的版本沖突,以及引用的不穩(wěn)定性等問題得到了很好的解決。SpringBoot所具備的特征有:(1)可以創(chuàng)建獨立的\t"/item/Spring%20Boot/_blank"Spring應(yīng)用程序,并且基于其Maven或Gradle插件,可以創(chuàng)建可執(zhí)行的JARs和WARs;(2)內(nèi)嵌Tomcat或Jetty等Servlet容器;(3)提供自動配置的“starter”項目對象模型(POMS)以簡化\t"/item/Spring%20Boot/_blank"Maven配置;(4)盡可能自動配置Spring容器;(5)提供準(zhǔn)備好的特性,如指標(biāo)、健康檢查和外部化配置;(6)絕對沒有代碼生成,不需要XML配置。

[1]

[2]SpringBoot框架中還有兩個非常重要的策略:開箱即用和約定優(yōu)于配置。開箱即用,Outofbox,是指在開發(fā)過程中,通過在MAVEN項目的pom文件中添加相關(guān)依賴包,然后使用對應(yīng)注解來代替繁瑣的XML配置文件以管理對象的生命周期。這個特點使得開發(fā)人員擺脫了復(fù)雜的配置工作以及依賴的管理工作,更加專注于業(yè)務(wù)邏輯。約定優(yōu)于配置,Conventionoverconfiguration,是一種由SpringBoot本身來配置目標(biāo)結(jié)構(gòu),由開發(fā)者在結(jié)構(gòu)中添加信息的軟件設(shè)計范式。這一特點雖降低了部分靈活性,增加了BUG定位的復(fù)雜性,但減少了開發(fā)人員需要做出決定的數(shù)量,同時減少了大量的XML配置,并且可以將代碼編譯、測試和打包等工作自動化。SpringBoot應(yīng)用系統(tǒng)開發(fā)模板的基本架構(gòu)設(shè)計從前端到后臺進(jìn)行說明:前端常使用模板引擎,主要有FreeMarker和Thymeleaf,它們都是用Java語言編寫的,渲染模板并輸出相應(yīng)文本,使得界面的設(shè)計與應(yīng)用的邏輯分離,同時前端開發(fā)還會使用到Bootstrap、AngularJS、JQuery等;在瀏覽器的數(shù)據(jù)傳輸格式上采用Json,非xml,同時提供RESTfulAPI;SpringMVC框架用于數(shù)據(jù)到達(dá)服務(wù)器后處理請求;到\t"/item/Spring%20Boot/_blank"數(shù)據(jù)訪問層主要有Hibernate、MyBatis、JPA等持久層框架;數(shù)據(jù)庫常用\t"/item/Spring%20Boot/_blank"MySQL;開發(fā)工具推薦IntelliJIDEA。jQueryjQuery是一個快速、簡潔的JavaScript框架,是繼Prototype之后又一個優(yōu)秀的JavaScript代碼庫(或JavaScript框架)。jQuery設(shè)計的宗旨是“writeLess,DoMore”,即倡導(dǎo)寫更少的代碼,做更多的事情。它封裝JavaScript常用的功能代碼,提供一種簡便的JavaScript設(shè)計模式,優(yōu)化HTML文檔操作、事件處理、動畫設(shè)計和Ajax交互。jQuery的核心特性可以總結(jié)為:具有獨特的鏈?zhǔn)秸Z法和短小清晰的多功能接口;具有高效靈活的css選擇器,并且可對CSS選擇器進(jìn)行擴展;擁有便捷的插件擴展機制和豐富的插件。jQuery兼容各種主流瀏覽器,如IE6.0+、FF1.5+、Safari2.0+、Opera9.0+等MysqlMySQL是一款安全、跨平臺、高效的,并與PHP、Java等主流編程語言緊密結(jié)合的數(shù)據(jù)庫系統(tǒng)。該數(shù)據(jù)庫系統(tǒng)是由瑞典的MySQLAB公司開發(fā)、發(fā)布并支持,由MySQL的初始開發(fā)人員DavidAxmark和MichaelMontyWidenius于1995年建立的。

MySQL的象征符號是一只名為Sakila的海豚,代表著MySQL數(shù)據(jù)庫的速度、能力、精確和優(yōu)秀本質(zhì)。

圖:MySQL圖標(biāo)

目前MySQL被廣泛地應(yīng)用在Internet上的中小型網(wǎng)站中。由于其體積小、速度快、總體擁有成本低,尤其是開放源碼這一特點,使得很多公司都采用MySQL數(shù)據(jù)庫以降低成本。

MySQL數(shù)據(jù)庫可以稱得上是目前運行速度最快的SQL語言數(shù)據(jù)庫之一。除了具有許多其他數(shù)據(jù)庫所不具備的功能外,MySQL數(shù)據(jù)庫還是一種完全免費的產(chǎn)品,用戶可以直接通過網(wǎng)絡(luò)下載MySQL數(shù)據(jù)庫,而不必支付任何費用。MySQL特點下面總結(jié)了一下MySQL具備的特點。1)功能強大MySQL中提供了多種數(shù)據(jù)庫存儲引擎,各引擎各有所長,適用于不同的應(yīng)用場合,用戶可以選擇最合適的引擎以得到最高性能,可以處理每天訪問量超過數(shù)億的高強度的搜索Web站點。MySQL5支持事務(wù)、視圖、存儲過程、觸發(fā)器等。2)支持跨平臺MySQL支持至少20種以上的開發(fā)平臺,包括Linux、Windows、FreeBSD、IBMAIX、AIX、FreeBSD等。這使得在任何平臺下編寫的程序都可以進(jìn)行移植,而不需要對程序做任何的修改。3)運行速度快高速是MySQL的顯著特性。在MySQL中,使用了極快的B樹磁盤表(MyISAM)和索引壓縮;通過使用優(yōu)化的單掃描多連接,能夠極快地實現(xiàn)連接;SQL函數(shù)使用高度優(yōu)化的類庫實現(xiàn),運行速度極快。4)支持面向?qū)ο驪HP支持混合編程方式。編程方式可分為純粹面向?qū)ο?、純粹面向過程、面句對象與面向過程混合3種方式。5)安全性高靈活和安全的權(quán)限與密碼系統(tǒng),允許基本主機的驗證。連接到服務(wù)器時,所有的密碼傳輸均采用加密形式,從而保證了密碼的安全。6)成本低MySQL數(shù)據(jù)庫是一種完全免費的產(chǎn)品,用戶可以直接通過網(wǎng)絡(luò)下載。7)支持各種開發(fā)語言MySQL為各種流行的程序設(shè)計語言提供支持,為它們提供了很多的API函數(shù),包括PHP、ASP.NET、Java、Eiffel、Python、Ruby、Tcl、C、C++、Perl語言等。8)數(shù)據(jù)庫存儲容量大MySQL數(shù)據(jù)庫的最大有效表尺寸通常是由操作系統(tǒng)對文件大小的限制決定的,而不是由MySQL內(nèi)部限制決定的。InnoDB存儲引擎將InnoDB表保存在一個表空間內(nèi),該表空間可由數(shù)個文件創(chuàng)建,表空間的最大容量為64TB,可以輕松處理擁有上千萬條記錄的大型數(shù)據(jù)庫。9)支持強大的內(nèi)置函數(shù)PHP中提供了大量內(nèi)置函數(shù),幾乎涵蓋了Web應(yīng)用開發(fā)中的所有功能。它內(nèi)置了數(shù)據(jù)庫連接、文件上傳等功能,MySQL支持大量的擴展庫,如MySQLi等,可以為快速開發(fā)Web應(yīng)用提供便利。數(shù)據(jù)庫的應(yīng)用數(shù)據(jù)庫是計算機應(yīng)用系統(tǒng)中的一種專門管理數(shù)據(jù)資源的系統(tǒng)。數(shù)據(jù)有多種形式,如文字、數(shù)碼、符號、圖形、圖像及聲音等,數(shù)據(jù)是所有計算機系統(tǒng)所要處理的對象。我們所熟知的一種處理辦法是制作文件,即將處理過程編成程序文件,將所涉及的數(shù)據(jù)按程序要求組成數(shù)據(jù)文件,再用程序來調(diào)用,數(shù)據(jù)文件與程序文件保持著一定的關(guān)系。

在計算機應(yīng)用迅速發(fā)展的情況下,這種文件式管理方法便顯出它的不足。比如,它使得數(shù)據(jù)通用性差、不便于移植、在不同文件中存儲大量重復(fù)信息、浪費存儲空間、更新不便等。

而數(shù)據(jù)庫系統(tǒng)便能解決上述問題。數(shù)據(jù)庫系統(tǒng)不從具體的應(yīng)用程序出發(fā),而是立足于數(shù)據(jù)本身的管理,它將所有數(shù)據(jù)保存在數(shù)據(jù)庫中,進(jìn)行科學(xué)的組織,并借助于數(shù)據(jù)庫管理系統(tǒng),以它為中介,與各種應(yīng)用程序或應(yīng)用系統(tǒng)接口,使之能方便地使用數(shù)據(jù)庫中的數(shù)據(jù)。

其實簡單地說,數(shù)據(jù)庫就是一組經(jīng)過計算機整理后的數(shù)據(jù),存儲在一個或多個文件中,而管理這個數(shù)據(jù)庫的軟件就稱為數(shù)據(jù)庫管理系統(tǒng)。一般一個數(shù)據(jù)庫系統(tǒng)(DatabaseSystem)

可以分為數(shù)據(jù)庫(Database)與數(shù)據(jù)管理系統(tǒng)(DatabaseManagementSystem,DBMS)兩個部分。主流的數(shù)據(jù)庫軟件有Oracle、Informix、Sybase、SQLServer、PostgreSQL、MySQL、Access、FoxPro和Teradata等等。數(shù)據(jù)庫在Web開發(fā)中的重要地位歸根結(jié)底,動態(tài)網(wǎng)站都是對數(shù)據(jù)進(jìn)行操作,我們平時瀏覽網(wǎng)頁時,會發(fā)現(xiàn)網(wǎng)頁的內(nèi)容會經(jīng)常變化,而頁面的主體結(jié)構(gòu)框架沒變,新聞就是一個典型。這是因為我們將新聞存儲在了數(shù)據(jù)庫中,用戶在瀏覽時,程序就會根據(jù)用戶所請求的新聞編號,將對應(yīng)的新聞從數(shù)據(jù)庫中讀取出來,然后再以特定的格式響應(yīng)給用戶。

Web系統(tǒng)的開發(fā)基本上是離不開數(shù)據(jù)庫的,因為任何東西都要存放在數(shù)據(jù)庫中。所謂的動態(tài)網(wǎng)站就是基于數(shù)據(jù)庫開發(fā)的系統(tǒng),最重要的就是數(shù)據(jù)管理,或者說我們在開發(fā)時都是在圍繞數(shù)據(jù)庫在寫程序。所以作為一個Web程序員,只有先掌握一門數(shù)據(jù)庫,才可能去進(jìn)行軟件開發(fā)。

需求分析2.1系統(tǒng)功能概述1)用戶注冊和登錄登錄功能:2)用戶信息的管理:3)商品的操作:4)購物車的管理操作:5)訂單管理操作:6)商品類型的管理7)商品的預(yù)覽、查看、搜索2.2系統(tǒng)運行環(huán)境使用Windows7作為開發(fā)的系統(tǒng)。JavaJDK1.8環(huán)境配置、Java運行在idea軟件上,數(shù)據(jù)庫用mysql5版本數(shù)據(jù)庫、數(shù)據(jù)庫采用NacicatMysql可視化工具、基于主流的谷歌瀏覽器運行展示以及F12控制臺調(diào)試樣式、2.4技術(shù)難點系統(tǒng)設(shè)計3.1系統(tǒng)設(shè)計系統(tǒng)主要設(shè)計采用Java語言開發(fā)、采用springboot為后臺框架、數(shù)據(jù)庫框架采用mybatis、前端采用jquery、layui框架等主要模塊設(shè)計如下:3.1.1客戶端主要設(shè)計(1)用戶注冊和登錄登錄功能:①用戶的注冊功能:訪問網(wǎng)站的人根據(jù)網(wǎng)站的提示注冊自己的賬戶②用戶的登錄功能:用戶可以輸入用戶名和密碼進(jìn)行登錄操作,當(dāng)沒有該賬戶的時候,提示錯誤,用戶必須通過注冊完成或者從數(shù)據(jù)庫中獲取才能進(jìn)行會員權(quán)限級別的操作。登錄成功之后可以購買商品,查詢訂單的詳細(xì)信息(2)、個人信息的管理:①用戶信息的修改操作,其中包括會員名、密碼、性別、聯(lián)系方式e-mail和個人介紹等用戶信息的修改操作。但是會員郵箱是綁定賬號的,會員郵箱不能進(jìn)行更改操作。②訂單管理操作:訂單只能查詢和刪除操作,不能有修改操作,修改操作是屬于管理員的權(quán)限。③用戶退出操作:當(dāng)點擊用戶退出時,就會退出當(dāng)前用戶的登錄狀態(tài),恢復(fù)到游客狀態(tài)。(3)、商品的操作:①搜索商品操作:當(dāng)在Search欄輸入想搜索的家居用品時,會使用模糊查詢,搜索出客戶想到查詢的家居用品。②商品列表展示:在全部列表中會有很多分列表目錄,這些目錄都是不同的種類,當(dāng)我們點擊不同的目錄,就會查詢不同的商品。③商品詳細(xì)信息展示:會根據(jù)該目錄下的商品類型展示出全部的商品。包括信息包括商品的圖片、價格、售價等信息。這些信息都不帶有分頁,如果商品列表下的商品很多,就會分很多頁進(jìn)行分頁查詢。(4)、購物車的管理操作:①顯示商品信息:當(dāng)我們一進(jìn)入購物車頁面,就會顯示出商品的詳細(xì)信息,以及購物車界面的功能信息。②修改商品的數(shù)量:用戶可以自己輸入不同數(shù)量的商品,當(dāng)商品的數(shù)量變動時,商品的庫存就會相應(yīng)的減少,也會根據(jù)商品的數(shù)量得到購買這一種商品的金額小計。③刪除購物車中的商品:當(dāng)我們點擊刪除時,會彈出一個提示框提示我們是否刪除商品,當(dāng)點擊‘確定’,就刪除成功,點擊‘取消’,對話框消失并且沒有任何操作執(zhí)行。④購物流程變動:從到了購物車頁面,就會顯示購物流程,當(dāng)每執(zhí)行一步操作,購物流程就會相應(yīng)的變動。5結(jié)賬操作:當(dāng)點擊結(jié)賬時,如果沒有登錄,那么就會提醒登錄,如果登錄了,就會到結(jié)算中心界面進(jìn)行結(jié)算。3.1.2后臺管理員主要設(shè)計系統(tǒng)的后臺是專門為管理家居商城系統(tǒng)的人員設(shè)計的,功能如下:(1)、超級管理員:擁有管理該系統(tǒng)的最大權(quán)限,他有兩個特有的功能①數(shù)據(jù)字典:可以對后臺的不同分類的分類列表具有增刪改查的操作。②角色管理:將擁有不同權(quán)限的管理員分成不同的角色,每個不同角色有自己的權(quán)限,不能執(zhí)行越權(quán)操作,分配不同的權(quán)限的角色也是為了方便更好的管理。(2)、商品分類的管理:①添加分類:點擊添加按鈕,會跳轉(zhuǎn)到分類添加頁面,需要編寫分類名稱,分類描述信息。②編輯分類:點擊編輯分類按鈕,會跳轉(zhuǎn)到分類編輯頁面,需要編寫分類名稱,分類描述信息。另外會有數(shù)據(jù)回顯,當(dāng)什么都不操作時,保持原來不變。③刪除分類:當(dāng)點擊刪除按鈕時,會彈出一個提醒框,當(dāng)點擊確定,刪除分類,點擊取消,保持原來不變。(3)、商品管理功能:①查詢商品:查詢所有商品列表,還有通過商品的名稱、商品的類別和價格區(qū)間查詢指定商品或符合條件的商品,并且可以查詢商品的詳細(xì)信息。②添加商品:點擊添加商品會轉(zhuǎn)到添加商品頁面,需要提供商品名稱、商品圖片、商品類別、商品價格、庫存數(shù)量、商品描述等內(nèi)容。③修改商品:當(dāng)點擊編輯操作時,修改商品的信息,包括商品名稱、商品圖片、商品類別、商品價格、庫存數(shù)量、商品描述等內(nèi)容④刪除商品:刪除已過時或者庫存為零的商品。3.4系統(tǒng)流程描述5項目源碼架構(gòu)系統(tǒng)實現(xiàn)4.1程序主要類4.1.1用戶管理員類@Data@EntitypublicclassAdminUserimplementsSerializable{privatestaticfinallongserialVersionUID=1L;@Id@GeneratedValue@ColumnprivateIntegerid;@Column(nullable=false)privateStringusername;@ColumnprivateStringpassword;publicAdminUser(Integerid,Stringusername,Stringpassword){this.id=id;this.username=username;this.password=password;}publicAdminUser(){super();}4.1.4商品分類/***分類*/@EntitypublicclassClassificationimplementsSerializable{@Id@GeneratedValue@ColumnprivateIntegerid;/***上級分類Id*/@ColumnprivateIntegerparentId;/***分類名稱*/@ColumnprivateStringcname;/***類型1一級分類2二級分類*/@ColumnprivateIntegertype;4.1.4訂單類/***訂單*/@Entity@Table(name="`order`")publicclassOrderimplementsSerializable{@Id@GeneratedValue@ColumnprivateIntegerid;/***訂單總價*/@ColumnprivateDoubletotal;/***訂單狀態(tài)1:未付款2:等待發(fā)貨3:等待收貨4:訂單完成*/@ColumnprivateIntegerstate;/***訂單時間*/@ColumnprivateDateorderTime;/***收貨人姓名*/@Column(name="`name`")privateStringname;/***收貨人聯(lián)系電話*/@ColumnprivateStringphone;/***收貨地址*/@ColumnprivateStringaddr;/***用戶Id*/@ColumnprivateIntegeruserId;4.1.4訂單項類/***訂單項*/@EntitypublicclassOrderItemimplementsSerializable{@Id@GeneratedValue@ColumnprivateIntegerid;/***訂單Id*/@ColumnprivateIntegerorderId;/***商品Id*/@ColumnprivateIntegerproductId;/***數(shù)量*/@ColumnprivateIntegercount;/***總價*/@ColumnprivateDoublesubTotal;@TransientprivateProductproduct;4.1.4商品類@Entity@JsonIgnoreProperties({"handler","hibernateLazyInitializer"})publicclassProductimplementsSerializable{@Id@GeneratedValue@ColumnprivateIntegerid;/***商品標(biāo)題*/@ColumnprivateStringtitle;/***市場價*/@ColumnprivateDoublemarketPrice;/***商城價*/@ColumnprivateDoubleshopPrice;/***主圖*/@ColumnprivateStringimage;/***描述*/@Column(name="`desc`",columnDefinition="text")privateStringdesc;/***是否熱門商品*/@ColumnprivateIntegerisHot;/***二級分類Id*/@ColumnprivateIntegercsid;/***商品創(chuàng)建日期*/@ColumnprivateDatepdate;4.1.4用戶客戶類@EntitypublicclassUserimplementsSerializable{@Id@GeneratedValue@ColumnprivateIntegerid;/***用戶名*/@ColumnprivateStringusername;/***密碼*/@ColumnprivateStringpassword;/***姓名*/@ColumnprivateStringname;/***郵件*/@ColumnprivateStringemail;/***電話*/@ColumnprivateStringphone;/***地址*/@ColumnprivateStringaddr;4.3系統(tǒng)功能主要實現(xiàn)模塊截圖4.3.1登陸頁面用戶輸入賬號和密碼和登錄進(jìn)行登錄4.3.1登錄關(guān)鍵代碼:/***登錄**@paramusername*@parampassword*/@RequestMapping("/login.do")publicvoidlogin(Stringusername,Stringpassword,HttpServletRequestrequest,HttpServletResponseresponse)throwsIOException{Useruser=userService.checkLogin(username,password);if(user!=null){//登錄成功重定向到首頁request.getSession().setAttribute("user",user);response.sendRedirect("/mall/index.html");}else{thrownewLoginException("登錄失?。∮脩裘蛘呙艽a錯誤");}}4.3.2注冊頁面: /***注冊*/@RequestMapping("/register.do")publicvoidregister(Stringusername,Stringpassword,Stringname,Stringphone,Stringemail,Stringaddr,HttpServletResponseresponse)throwsIOException{Useruser=newUser();user.setUsername(username);user.setPhone(phone);user.setPassword(password);user.setName(name);user.setEmail(email);user.setAddr(addr);userService.create(user);//注冊完成后重定向到登錄頁面response.sendRedirect("/mall/user/toLogin.html");}4.3.2系統(tǒng)功能截圖系統(tǒng)主頁面是商品信息的展示、右側(cè)上方是用戶功能操作、沒有登錄的用戶可以選擇登錄或注冊操作才可以對商品進(jìn)行購買、加入購物車等操作選擇分類查看家具商品信息用戶登錄注冊操作用戶可以查看我的訂單信息以及我的購物車我的購物車操作查看我的訂單信息后臺管理員用戶管理、可以對客戶用戶進(jìn)行添加、編輯、刪除操作編輯用戶信息編輯商品分類列表編輯商品二級分類列表編輯商品家具具體信息4.3.4部分關(guān)鍵源碼展示:登錄模塊:/***登錄**@paramusername*@parampassword*/@RequestMapping("/login.do")publicvoidlogin(Stringusername,Stringpassword,HttpServletRequestrequest,HttpServletResponseresponse)throwsIOException{Useruser=userService.checkLogin(username,password);if(user!=null){//登錄成功重定向到首頁request.getSession().setAttribute("user",user);response.sendRedirect("/mall/index.html");}else{thrownewLoginException("登錄失??!用戶名或者密碼錯誤");}}springboot全局配置文件:#\u8BBF\u95EE\u8DEF\u5F84\uFF0C\u7AEF\u53E3\u914D\u7F6Eserver.context-path=/mallserver.port=8081#\u6587\u4EF6\u4E0A\u4F20\u914D\u7F6Espring.http.multipart.enabled=truespring.http.multipart.max-file-size=100MBspring.http.multipart.max-request-size=100MBlogging.level.priv.jesse.mall=DEBUG#\u914D\u7F6E\u8F6Cjson\u7684\u65F6\u95F4\u683C\u5F0Fspring.jackson.time-zone=GMT+8spring.jackson.date-format=yyyy-MM-ddHH:mm:ss#jdbc\u8FDE\u63A5\u914D\u7F6E#mysql#spring.datasource.url=jdbc:mysql://active.iceslurry.xyz/mall?useSSL=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull#spring.datasource.username=root#spring.datasource.password=123456#spring.datasource.driver-class-name=com.mysql.jdbc.Driver#H2spring.datasource.url=jdbc:mysql://localhost:3307/mall?useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghaispring.datasource.username=rootspring.datasource.password=crit@2019spring.datasource.driver-class-name=com.mysql.jdbc.Driver#spring.h2.console.settings.web-allow-others=false#spring.h2.console.path=/h2-consolespring.datasource.type=com.alibaba.druid.pool.DruidDataSource#thymeleaf\u6A21\u677F\u5F15\u64CE\u8BBE\u7F6Espring.thymeleaf.mode=HTML5spring.thymeleaf.encoding=UTF-8spring.thymeleaf.content-type=text/html##\u5F00\u53D1\u65F6\u5173\u95ED\u7F13\u5B58,\u4E0D\u7136\u6CA1\u6CD5\u770B\u5230\u5B9E\u65F6\u9875\u9762spring.thymeleaf.cache=false#####################jpahibernate\u914D\u7F6E#########################spring.jpa.show-sql=falsespring.jpa.database=perties.hibernate.format_sql=falsespring.jpa.generate-ddl=true#\u6700\u5E38\u7528\u7684\u5C5E\u6027\uFF0C\u7B2C\u4E00\u6B21\u52A0\u8F7Dhibernate\u65F6\u6839\u636Emodel\u7C7B\u4F1A\u81EA\u52A8\u5EFA\u7ACB\u8D77\u8868\u7684\u7ED3\u6784\uFF08\u524D\u63D0\u662F\u5148\u5EFA\u7ACB\u597D\u6570\u636E\u5E93\uFF09\uFF0C#\u4EE5\u540E\u52A0\u8F7Dhibernate\u65F6\u6839\u636Emodel\u7C7B\u81EA\u52A8\u66F4\u65B0\u8868\u7ED3\u6784\uFF0C\u5373\u4F7F\u8868\u7ED3\u6784\u6539\u53D8\u4E86\u4F46\u8868\u4E2D\u7684\u884C\u4ECD\u7136\u5B58\u5728\u4E0D\u4F1A\u5220\u9664\u4EE5\u524D\u7684\u884C\u3002#\u8981\u6CE8\u610F\u7684\u662F\u5F53\u90E8\u7F72\u5230\u670D\u52A1\u5668\u540E\uFF0C\u8868\u7ED3\u6784\u662F\u4E0D\u4F1A\u88AB\u9A6C\u4E0A\u5EFA\u7ACB\u8D77\u6765\u7684\uFF0C\u662F\u8981\u7B49\u5E94\u7528\u7B2C\u4E00\u6B21\u8FD0\u884C\u8D77\u6765\u540E\u624D\u4F1A\u3002spring.jpa.hibernate.ddl-auto=update####################################################################################druid\u6570\u636E\u5E93\u8FDE\u63A5\u6C60\u914D\u7F6E#############################\u914D\u7F6E\u521D\u59CB\u5316\u5927\u5C0F\uFF0C\u6700\u5C0F\uFF0C\u6700\u5927spring.datasource.druid.initial-size=1spring.datasource.druid.max-active=20spring.datasource.druid.min-idle=1#\u914D\u7F6E\u83B7\u53D6\u8FDE\u63A5\u7B49\u5F85\u8D85\u65F6\u7684\u65F6\u95F4spring.datasource.druid.max-wait=60000#\u914D\u7F6E\u95F4\u9694\u591A\u4E45\u624D\u8FDB\u884C\u4E00\u6B21\u68C0\u6D4B\uFF0C\u68C0\u6D4B\u9700\u8981\u5173\u95ED\u7684\u7A7A\u95F2\u8FDE\u63A5\uFF0C\u5355\u4F4D\u662F\u6BEB\u79D2spring.datasource.druid.time-between-eviction-runs-millis=60000#\u914D\u7F6E\u4E00\u4E2A\u8FDE\u63A5\u5728\u6C60\u4E2D\u6700\u5C0F\u751F\u5B58\u7684\u65F6\u95F4\uFF0C\u5355\u4F4D\u662F\u6BEB\u79D2spring.datasource.druid.min-evictable-idle-time-millis=300000spring.datasource.druid.validation-query=SELECT'x'spring.datasource.druid.test-on-borrow=falsespring.datasource.druid.test-on-return=falsespring.datasource.druid.test-while-idle=true#\u6253\u5F00PSCache\uFF0C\u5E76\u4E14\u6307\u5B9A\u6BCF\u4E2A\u8FDE\u63A5\u4E0APSCache\u7684\u5927\u5C0F#\u5982\u679C\u7528Oracle\uFF0C\u5219\u628ApoolPreparedStatements\u914D\u7F6E\u4E3Atrue\uFF0Cmysql\u53EF\u4EE5\u914D\u7F6E\u4E3Afalse\u3002\u5206\u5E93\u5206\u8868\u8F83\u591A\u7684\u6570\u636E\u5E93\uFF0C\u5EFA\u8BAE\u914D\u7F6E\u4E3Afalse\u3002spring.datasource.druid.pool-prepared-statements=falsespring.datasource.druid.max-pool-prepared-statement-per-connection-size=20#druid\u76D1\u63A7\u914D\u7F6Espring.datasource.druid.filters=stat,slf4j#WebStatFilter\u914D\u7F6E\uFF0C\u8BF4\u660E\u8BF7\u53C2\u8003DruidWiki\uFF0C\u914D\u7F6E_\u914D\u7F6EWebStatFilterspring.datasource.druid.web-stat-filter.enabled=truespring.datasource.druid.filter.stat.log-slow-sql=truespring.datasource.druid.filter.stat.slow-sql-millis=2000#StatViewServlet\u914D\u7F6E\uFF0C\u8BF4\u660E\u8BF7\u53C2\u8003DruidWiki\uFF0C\u914D\u7F6E_StatViewServlet\u914D\u7F6Espring.datasource.druid.stat-view-servlet.enabled=truespring.datasource.druid.stat-view-servlet.url-pattern=/druid/*spring.datasource.druid.stat-view-servlet.reset-enable=truespring.datasource.druid.stat-view-servlet.login-username=druidspring.datasource.druid.stat-view-servlet.login-password=123456#Spring\u76D1\u63A7\u914D\u7F6E\uFF0C\u8BF4\u660E\u8BF7\u53C2\u8003DruidGithubWiki\uFF0C\u914D\u7F6E_Druid\u548CSpring\u5173\u8054\u76D1\u63A7\u914D\u7F6Espring.datasource.druid.aop-patterns=priv.jesse.mall.service.impl.*#druid\u65E5\u5FD7\u8F93\u51FAspring.datasource.druid.filter.slf4j.enabled=truespring.datasource.druid.filter.slf4j.result-set-log-enabled=falsespring.datasource.druid.filter.slf4j.statement-create-after-log-enabled=falsespring.datasource.druid.filter.slf4j.statement-close-after-log-enabled=falsespring.datasource.druid.filter.slf4j.result-set-open-after-log-enabled=falsespring.datasource.druid.filter.slf4j.result-set-close-after-log-enabled=false##################druid\u8FDE\u63A5\u6C60\u914D\u7F6E\u7ED3\u675F############################log4j2.xml日志配置文件:<?xmlversion="1.0"encoding="UTF-8"?><Configurationstatus="INFO"><Appenders><Consolename="Console"target="SYSTEM_OUT"><PatternLayoutpattern="%d{HH:mm:ss.SSS}[%-5level]%logger{36}-%message%n"/></Console><!--文件會打印出所有信息,這個log每次運行程序會自動清空,由append屬性決定,這個也挺有用的,適合臨時測試用--><Filename="log"fileName="log/test.log"append="true"><PatternLayoutpattern="%d{HH:mm:ss.SSS}%-5level%class{36}%L%M-%message%xEx%n"/></File></Appenders><Loggers><Rootlevel="INFO"><AppenderRefref="Console"/><AppenderRefref="log"/></Root></Loggers></Configuration>代碼主啟動類:/***程序啟動入口**@ServletComponentScan設(shè)置啟動時spring能夠掃描到我們自己編寫的servlet和filter,用于Druid監(jiān)控*@MapperScan("com.imlaidian.springbootdemo.dao")掃描mybatisMapper接口*@EnableScheduling啟用定時任務(wù)*@EnableTransactionManagement開啟事務(wù)**@authorhfb*@date2017/9/1811:13*/@ServletComponentScan@EnableConfigurationProperties@EnableTransactionManagement@SpringBootApplicationpublicclassMallApplication{ publicstaticvoidmain(String[]args){ SpringApplication.run(MallApplication.class,args); }}權(quán)限攔截控制器:packagepriv.jesse.mall.filter;importcom.fasterxml.jackson.databind.ObjectMapper;importorg.slf4j.Logger;importorg.slf4j.LoggerFactory;importjavax.servlet.Filter;importjavax.servlet.FilterChain;importjavax.servlet.FilterConfig;importjavax.servlet.ServletException;importjavax.servlet.ServletRequest;importjavax.servlet.ServletResponse;importjavax.servlet.annotation.WebFilter;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;importjava.io.IOException;importjava.io.OutputStream;importjava.util.HashMap;/***權(quán)限攔截器**@authorhfb*@date2017/9/18*/@WebFilterpublicclassAuthorizationFilterimplementsFilter{publicAuthorizationFilter(){}privatestaticfinalLoggerLOGGER=LoggerFactory.getLogger(AuthorizationFilter.class);@Overridepublicvoidinit(FilterConfigfilterConfig)throwsServletException{}@OverridepublicvoiddoFilter(ServletRequestreq,ServletResponseres,FilterChainchain)throwsIOException,ServletException{HttpServletRequestrequest=(HttpServletRequest)req;HttpServletResponseresponse=(HttpServletResponse)res;//支持跨域訪問response.setHeader("Access-Control-Allow-Origin","*");response.setHeader("Access-Control-Allow-Methods","POST,GET,OPTIONS,DELETE");response.setHeader("Access-Control-Max-Age","3600");response.setHeader("Access-Control-Allow-Headers","Origin,X-Requested-With,Content-Type,Accept,X-Custom-Header");response.setHeader("X-Powered-By","SpringBoot");if("option".equalsIgnoreCase(request.getMethod())){responseJSON(response,newHashMap<>());return;}//除了攔截login.html其他html都攔截StringBufferurl=request.getRequestURL();//System.out.println(url);Stringpath=url.toString();//只攔截這些類型請求if(path.endsWith(".do")||path.endsWith(".html")){//登錄,圖片不攔截if(path.endsWith("toLogin.html")||path.endsWith("toRegister.html")||path.endsWith("register.do")||path.endsWith("login.do")||path.endsWith("logout.do")||path.endsWith("error.html")||path.endsWith("checkUsername.do")||path.contains("/mall/admin/product/img/")||path.endsWith("index.html")||path.endsWith("classification/list.do")||path.contains("product")||path.contains("/mall/h2-console")){chain.doFilter(request,response);}else{processAccessControl(request,response,chain);}}else{//其他靜態(tài)資源都不攔截chain.doFilter(request,response);}}/***@paramrequest*@paramresponse*@paramchain*@throwsIOException*@throwsServletException*/privatevoidprocessAccessControl(HttpServletRequestrequest,HttpServletResponseresponse,FilterChainchain)throwsIOException,ServletException{ObjectadminUser=request.getSession().getAttribute("login_user");Objectuser=request.getSession().getAttribute("user");Stringurl=request.getRequestURL().toString();if(url.indexOf("admin")!=-1){if(adminUser==null){response.sendRedirect("/mall/admin/toLogin.html");}else{chain.doFilter(request,response);}}else{if(user==null){response.sendRedirect("/mall/user/toLogin.html");}else{chain.doFilter(request,response);}}}@Overridepublicvoiddestroy(){}/***返回JOSN數(shù)據(jù)格式**@paramresponse*@paramobject*@throwsIOException*/publicstaticvoidresponseJSON(HttpServletResponseresponse,Objectobject)throwsIOException{response.setContentType("application/json;charset=utf-8");response.setCharacterEncoding("UTF-8");ObjectMappermapper=newObjectMapper();if(object==null)return;StringjsonStr=mapper.writeValueAsString(object);OutputStreamout=response.getOutputStream();out.write(jsonStr.getBytes("UTF-8"));out.flush();}}4.4數(shù)據(jù)庫表設(shè)計4.4.0數(shù)據(jù)庫三范式要求:一、第一范式1NF是對屬性的原子性,要求屬性具有原子性,不可再分解;表:字段1、字段2(字段2.1、字段2.2)、字段3......如學(xué)生(學(xué)號,姓名,性別,出生年月日),如果認(rèn)為最后一列還可以再分成(出生年,出生月,出生日),它就不是一范式了,否則就是;二、第二范式2NF是對記錄的唯一性,要求記錄有唯一標(biāo)識,即實體的唯一性,即不存在部分依賴;表:學(xué)號、課程號、姓名、學(xué)分;這個表明顯說明了兩個事務(wù):學(xué)生信息,課程信息;由于非主鍵字段必須依賴主鍵,這里學(xué)分依賴課程號,姓名依賴與學(xué)號,所以不符合二范式??赡軙嬖趩栴}:數(shù)據(jù)冗余:,每條記錄都含有相同信息;刪除異常:刪除所有學(xué)生成績,就把課程信息全刪除了;插入異常:學(xué)生未選課,無法記錄進(jìn)數(shù)據(jù)庫;更新異常:調(diào)整課程學(xué)分,所有行都調(diào)整。正確做法:

學(xué)生:Student(學(xué)號,姓名);

課程:Course(課程號,學(xué)分);

選課關(guān)系:StudentCourse(學(xué)號,課程號,成績)。三、第三范式3NF是對字段的冗余性,要求任何字段不能由其他字段派生出來,它要求字段沒有冗余,即不存在傳遞依賴;表:學(xué)號,姓名,年齡,學(xué)院名稱,學(xué)院電話因為存在依賴傳遞:(學(xué)號)→(學(xué)生)→(所在學(xué)院)→(學(xué)院電話)??赡軙嬖趩栴}:數(shù)據(jù)冗余:有重復(fù)值;更新異常:有重復(fù)的冗余信息,修改時需要同時修改多條記錄,否則會出現(xiàn)數(shù)據(jù)不一致的情況

。正確做法:學(xué)生:(學(xué)號,姓名,年齡,所在學(xué)院);學(xué)院:(學(xué)院,電話)。四、反范式化一般說來,數(shù)據(jù)庫只需滿足第三范式(3NF)就行了。沒有冗余的數(shù)據(jù)庫設(shè)計可以做到。但是,沒有冗余的數(shù)據(jù)庫未必是最好的數(shù)據(jù)庫,有時為了提高運行效率,就必須降低范式標(biāo)準(zhǔn),適當(dāng)保留冗余數(shù)據(jù)。具體做法是:在概念數(shù)據(jù)模型設(shè)計時遵守第三范式,降低范式標(biāo)準(zhǔn)的工作放到物理數(shù)據(jù)模型設(shè)計時考慮。降低范式就是增加字段,允許冗余,達(dá)到以空間換時間的目的?!祭剑河幸粡埓娣派唐返幕颈?,“金額”這個字段的存在,表明該表的設(shè)計不滿足第三范式,因為“金額”可以由“單價”乘以“數(shù)量”得到,說明“金額”是冗余字段。但是,增加“金額”這個冗余字段,可以提高查詢統(tǒng)計的速度,這就是以空間換時間的作法。在Rose2002中,規(guī)定列有兩種類型:數(shù)據(jù)列和計算列?!敖痤~”這樣的列被稱為“計算列”,而“單價”和“數(shù)量”這樣的列被稱為“數(shù)據(jù)列”。五、范式化設(shè)計和反范式化設(shè)計的優(yōu)缺點5.1范式化優(yōu)點:缺點:5.2反范式化優(yōu)點:缺點:數(shù)據(jù)庫采用mysql5版本、滿足數(shù)據(jù)庫設(shè)計三范式。編碼采用utf8--UTF-8Unicode排序規(guī)則采用utf8_general_ci4.4.1數(shù)據(jù)庫表ER圖4.4.2用戶表設(shè)計主要字段有:用戶名、密碼、郵箱、地址、個人信息、手機號等信息4.4.3商品分類表設(shè)計主要字段有:id、上級id商品分類名稱、類型等終端4.4.4用戶訂單表設(shè)計主要字段有:id、客戶收貨地址、姓名、收貨時間、手機號、狀態(tài)、數(shù)據(jù)量、用戶id等字段4.4.5商品表設(shè)計主要字段有:id、商品id、備注、商品圖片、商品價格、商品標(biāo)題、商品描述、時間等4.4.5訂單項表設(shè)計主要字段有:id、商品數(shù)量、訂單id、商品id、總價等4.4.6數(shù)據(jù)庫sql文件/*NavicatMySQLDataTransferSourceServer:jesse_rootSourceServerVersion:50713SourceHost:localhost:3306SourceDatabase:mallTargetServerType:MYSQLTargetServerVersion:50713FileEncoding

溫馨提示

  • 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)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論