王柯夢 王瑞平
(1.商丘工學院 河南 商丘 476000;2.鄭州商學院 河南 鞏義 451200)
近年來,隨著“互聯(lián)網(wǎng)+”、“大數(shù)據(jù)”等技術(shù)的快速普及,網(wǎng)上商城也進入了發(fā)展迅猛期。電子商務的出現(xiàn)顯然已經(jīng)對人們的購物方式產(chǎn)生了巨大的影響,從原來的店鋪購物轉(zhuǎn)移到在線購物。B2C網(wǎng)上商城系統(tǒng)是指在網(wǎng)絡(luò)上創(chuàng)建一個虛擬的購物商城,實現(xiàn)用戶線上購物需求。目前,各式各樣的電子商務網(wǎng)站層出不窮,系統(tǒng)功能的實現(xiàn)已經(jīng)相對成熟,但這些系統(tǒng)一般偏向于整個項目功能的設(shè)計與實現(xiàn),而忽視了數(shù)據(jù)庫設(shè)計。在數(shù)據(jù)庫設(shè)計方面,僅僅給出了數(shù)據(jù)表結(jié)構(gòu)的說明,缺少了數(shù)據(jù)庫的概念設(shè)計和邏輯設(shè)計?;诖耍疚囊砸粋€網(wǎng)上購物網(wǎng)站為例,探析電子商城前臺系統(tǒng)數(shù)據(jù)庫的設(shè)計問題,以期能為系統(tǒng)功能實現(xiàn)提供數(shù)據(jù)庫設(shè)計的有力支撐。
對用戶網(wǎng)上購物行為進行調(diào)查,可以得出,目前主流的網(wǎng)上商城系統(tǒng)主要分為前臺商品銷售和后臺數(shù)據(jù)管理兩大模塊,本文主要對前臺商品銷售模塊,進行數(shù)據(jù)庫的分析與設(shè)計。會員進入到商城首頁,可以瀏覽各種商品,或者根據(jù)自己感興趣的商品類別、商品信息等搜索、查詢商品。系統(tǒng)規(guī)定,游客在注冊成為網(wǎng)站會員以后才能夠?qū)ι唐愤M行購買。
通過上述需求分析,網(wǎng)站主要能夠?qū)崿F(xiàn)的功能如下:開發(fā)具有強大搜索和高級查詢功能,能夠讓用戶快檢索出自己所喜歡的商品;實現(xiàn)網(wǎng)上購物流程:瀏覽商品—訂購商品—提交訂單—支付貨款;用戶查詢服務功能,可以查詢訂單詳情。由上述分析可得出,用戶具有的功能包括:瀏覽商品、按類別檢索商品、查看商品詳細信息;訂購商品、生成訂單、查看訂單;查詢、修改個人信息;評價商品等。
概念設(shè)計是指對系統(tǒng)需求分析中得到的信息,進行分類、組織和總結(jié),歸納得出系統(tǒng)中的實體、實體的屬性、實體與實體之間的聯(lián)系等,使用E-R模型,設(shè)計得出系統(tǒng)的概念模型。
(1)系統(tǒng)實體
根據(jù)需求分析,網(wǎng)上商城前臺系統(tǒng)的實體集可抽象為:用戶、商品類別、商品,每一個實體應該具有以下屬性,下劃線標記的為主鍵,繪制的系統(tǒng)實體圖如圖1所示。
圖1 系統(tǒng)實體圖
用戶:用戶編號、用戶昵稱、密碼、電話、地址等。
商品類別:類別編號、類別名稱。
商品:商品編號、商品名、簡介、定價、庫存數(shù)量等。
(2)實體與實體之間的聯(lián)系
一種商品只屬于一個商品類別,而一個商品類別中可以包含多個商品,即商品類別和商品之間是一對多的聯(lián)系。
用戶通過訂購商品生成訂單聯(lián)系,一個用戶可以訂購多個商品,每個商品也可以被多個用戶訂購,即用戶和商品之間的訂購聯(lián)系是多對多的。
用戶購買收到商品以后,可以對商品進行評價,一個用戶可以評價自己所購買的多種商品,同時一種商品也可以被多個用戶所評價,派生評價內(nèi)容、評價時間兩個屬性,因此用戶和商品之間還存在一個多對多的評價聯(lián)系。
(3)E-R模型
通過對系統(tǒng)實體、實體屬性、實體與實體之間聯(lián)系進行分析,可以得到系統(tǒng)的E-R圖(省略了實體屬性),如圖2所示。
圖2 系統(tǒng)E-R圖
數(shù)據(jù)庫設(shè)計中的邏輯設(shè)計是指將概念設(shè)計中的E-R模型轉(zhuǎn)換為關(guān)系模式的過程。
(1)實體轉(zhuǎn)換為關(guān)系模式
用戶(用戶編號,用戶昵稱,密碼,電話,地址)PK:用戶編號。
商品類別(類別編號,類別名稱)PK:類別編號。
商品(商品編號,商品名,簡介,定價,庫存數(shù)量)PK:商品編號。
(2)聯(lián)系轉(zhuǎn)換為關(guān)系模式
E-R模型中共設(shè)計了四個聯(lián)系:商品和商品類別之間屬于聯(lián)系、用戶下訂單聯(lián)系、商品和訂單之間的聯(lián)系以及用戶評價商品聯(lián)系。前三個聯(lián)系是1:N的聯(lián)系,在轉(zhuǎn)換為關(guān)系模式時,只需要將1端的主鍵及其派生出的屬性放到N端即可。最后一個M:N的聯(lián)系,必須轉(zhuǎn)換成一個新的關(guān)系模式。
商品(商品編號,商品名,簡介,定價,庫存數(shù)量,類別編號)PK:商品編號,F(xiàn)K:類別編號。
訂單(訂單編號,下單時間,用戶編號,商品編號,收貨人,電話,地址)PK:訂單編號,F(xiàn)K:用戶編號、商品編號。
評價(評價編號,用戶編號,商品編號,內(nèi)容,時間)PK:評價編號,F(xiàn)K:用戶編號、商品編號。
綜上可知,網(wǎng)上商城前臺系統(tǒng)可以轉(zhuǎn)換為用戶、商品類別、商品、訂單、評價5個關(guān)系模式。
用戶表(User)用來儲存用戶注冊時的基本信息,包括用戶編號(UID,int(4),主鍵)、昵稱(UName,varchar(20))、登錄密碼(Upwd,varchar(16))、電話(Utel,char(11))、地址(Uadd,varchar(25))等信息。
商品類別表(Type)用來儲存商品類別的基本信息,包括類別編號(TID,int(4),主鍵)、類別名稱(TName,varchar(20))等信息。
商品表(Product)用來儲存商品的基本信息,包括商品編號(PID,int(4),主鍵)、商品名稱(PName,varchar(25))、簡介(Pjianjie,text)、定價(Price,Decimal(10,2))、庫存數(shù)量(Pnum,int)、商品類別(TID,int(4),外鍵)等信息。
訂單表(Order)用來儲存用戶訂購商品的基本信息,包括訂單編號(OID,int(4),主鍵)、下單時間(Otime,datetime)、用戶編號(UID,int(4),外鍵)、商品編號(PID,int(4),外鍵)、收貨人姓名(Oname,varchar(20))、地址(Oadd,varchar(40))、電話(Otel,char(11))等信息。
評價表(Appraise)用來儲存用戶評價商品的基本信息,包括評價編號(AID,int(4),主鍵)、用戶編號(UID,int(4),外鍵)、商品編號(PID,int(4),外鍵)、內(nèi)容(Acon,text)、評價時間(Atime,datetime)等信息。
在創(chuàng)建數(shù)據(jù)庫之前,首先要根據(jù)系統(tǒng)的實際應用情況來分析和估算數(shù)據(jù)庫所占用的內(nèi)存大小、存儲位置、數(shù)據(jù)文件和日志文件的增長速度,使用CREATE DATABASE語句實現(xiàn)數(shù)據(jù)庫的創(chuàng)建。經(jīng)過對數(shù)據(jù)庫的設(shè)計可知,網(wǎng)上商城的前臺系統(tǒng)主要包括用戶、商品類別、商品、訂單和評價5張基本表,使用CREATE TABLE實現(xiàn)基本表的創(chuàng)建,并應用PRIMARY KEY、FOREIGN KEY(<字段名>)REFERENCES <主鍵表(字段名)>、CHECK等關(guān)鍵詞實現(xiàn)數(shù)據(jù)庫的完整性。在創(chuàng)建表時,需要特別注意,應該先創(chuàng)建主鍵表,然后再創(chuàng)建外鍵表,如創(chuàng)建完商品類別表之后,才能創(chuàng)建商品表,創(chuàng)建完用戶表和商品表后,才能夠創(chuàng)建訂單表和評價表。隨著應用的需要和環(huán)境的變化,如若需要修改已經(jīng)創(chuàng)建好的表結(jié)構(gòu),可以采用ALTER TABLE語句實現(xiàn)。
在系統(tǒng)實現(xiàn)的過程中,連接數(shù)據(jù)庫是其主要的操作之一,本部分以PHP連接SQL SERVER數(shù)據(jù)庫為例來闡述數(shù)據(jù)庫的連接問題。在連接數(shù)據(jù)庫之前,首先要明確集成環(huán)境是否支持SQL SERVER。如若不支持,首先需要下載Microsoft SQL Server PHP 驅(qū)動程序,然后配置php和apache兩個目錄下的php.ini文件。重啟apache后,使用sqlsrv_connect(“數(shù)據(jù)庫服務器地址”,array(“UID”?“數(shù)據(jù)庫用戶名”“PWD”?“數(shù)據(jù)庫密碼”,“Database”?“數(shù)據(jù)庫名”))實現(xiàn)數(shù)據(jù)庫的連接。
數(shù)據(jù)庫連接是一種較為關(guān)鍵的、有限的、昂貴的資源類型,對數(shù)據(jù)庫的連接管理直接影響到整個系統(tǒng)的健壯性及程序?qū)嵤┑男阅?。?shù)據(jù)庫使用完之后,需要在合適的時間釋放數(shù)據(jù)庫資源,避免因沒有釋放數(shù)據(jù)庫連接而引起的數(shù)據(jù)庫連接漏洞問題。
數(shù)據(jù)庫作為程序中數(shù)據(jù)的主要載體,在整個系統(tǒng)的實現(xiàn)過程中發(fā)揮著重要的作用。經(jīng)過不斷的完善和修正,本數(shù)據(jù)庫的概念設(shè)計、邏輯設(shè)計及物理實施,能夠供學生的課程設(shè)計、畢業(yè)設(shè)計及企事業(yè)單位系統(tǒng)的基本需求。在對網(wǎng)上商城后臺系統(tǒng)進行數(shù)據(jù)庫設(shè)計,或者在此基礎(chǔ)上添加部分功能時,可以在本設(shè)計上進行添加和修改。在對其他系統(tǒng)進行數(shù)據(jù)庫設(shè)計時,本設(shè)計也可以為其提供借鑒。