2.4 数据库设计
数据库就像是系统的“地基”,“地基”的好坏直接决定系统的性能。良好的数据库设计不仅能提高开发效率,还能为系统功能的扩充留有余地。
2.4.1 数据库分析
此系统由JSP+Spring+Hibernate+Tomcat+MySQL组成,对数据库的要求不算太高,故采用适用于中小型企业的MySQL数据库较为合适。
2.4.2 项目E-R图
本系统包含的实体主要有:商品、类别、客户、供应商、管理员等,下面介绍各实体的E-R图。
(1)商品的E-R图,如图2-10所示。
图2-10 商品的E-R图
(2)类别及管理员的E-R图,如图2-11所示。
图2-11 管理员、类别的E-R图
(3)客户的E-R图,如图2-12所示。
图2-12 客户的E-R图
(4)供应商的E-R图,如图2-13所示。
图2-13 供应商的E-R图
2.4.3 数据库基本表的设计
本系统中的基本信息表主要有5张表:商品资料表、商品类别表、客户资料表、供应商资料表、管理员资料表,下面分别对各表进行介绍。
(1)商品资料表:用于记录库存商品的基本信息,其主要字段有:商品ID、商品名称、商品类别、进价、售价、库存等,具体设计如表2-2所示。
表2-2 商品资料表
建立该表的SQL语句如下:
create table GoodsInfo(Gid varchar(20) primary key, Gname varchar(50) not null,GCid varchar(20), Gamount int not null, Gunit varchar(10) not null, Gpin double not null, Gpout double not null, Foreign key(GCid)references GoodsClassInfo(GCid)on delete cascade)engine innodb;
(2)商品类别表:用于记录商品的类别,主要由类别ID和类别名称组成,如表2-3所示。
表2-3 商品类别表
建立该表的SQL语句如下:
create table GoodsClassInfo(GCid varchar(20) primary key,GCname varchar(50) not null)engine innodb;
(3)客户资料表:用于记录客户的一些基本信息,包括客户ID、客户名称、联系人、公司地址、电话、E-mail、备注,详细情况如表2-4所示。
表2-4 客户资料表
建立该表的SQL语句如下:
create table ConsumerInfo(Cid varchar(20) primary key,Cname varchar(50) not null, Clinkman varchar(50) not null,Caddress varchar(50) not null,Ctel varchar(20) not null, Cemail varchar(50) default '暂无',Cremark varchar(100) default '暂无')engine innodb;
(4)供应商资料表:用于记录供应商的一些基本信息,包括供应商ID、供应商名称、联系人、公司地址、电话、E-mail、备注,详细情况如表2-5所示。
表2-5 供应商资料表
建立该表的SQL语句如下:
create table ProviderInfo(Pid varchar(20) primary key,Pname varchar(50) not null, Plinkman varchar(50) not null,Paddress varchar(50) not null,Ptel varchar(20) not null, Pemail varchar(50),Premark varchar(100))engine innodb;
(5)管理员资料表:该表用于记录管理员的信息,主要包括管理员ID、用户名、密码、级别,具体设计如表2-6所示。
表2-6 管理员资料表
建立该表的SQL语句如下:
create table AdminInfo(Aid varchar(20) primary key,Aname varchar(50) not null,Apwd varchar(20) not null, Alevel varchar(20) default '普通');
2.4.4 数据库数据表的设计
本系统中的数据表有8张,包括采购信息表及其明细表,销售信息表及其明细表,客户退货表及其明细表,采购退货表及其明细表,下面对其进行一一介绍。
(1)采购信息表:用于记录进货的信息,具体设计如表2-7所示。
表2-7 采购信息表
建立该表的SQL语句如下:
create table StockInfo(Sid varchar(20) primary key,Pid varchar(20),Sdate Date,Sbuyer varchar(50), Stotalprice double not null,Foreign key(Pid) references ProviderInfo(Pid) on delete cascade)engine innodb;
(2)采购明细表:用于记录具体的采购信息,主要字段有明细表ID、采购ID、商品ID、商品数量、商品单价、总价,具体设计如表2-8所示。
表2-8 采购明细表
建立该表的SQL语句如下:
create table StockDetail(SDid varchar(20) primary key,Sid varchar(20),Gid varchar(20),SDamount int not null, SDprice double,SDtotalprice double,Foreign key(Sid) references StockInfo(Sid) on delete cascade, Foreign key(Gid) references GoodsInfo(Gid) on delete cascade)engine innodb;
(3)销售信息表:用于记录销售信息,包括销售ID、客户ID、销售人等,具体设计如表2-9所示。
表2-9 销售信息表
建立该表的SQL语句如下:
create table SellInfo(Eid varchar(20) primary key,Cid varchar(20),Edate Date,Eseller varchar(50), Etotalprice double not null,Foreign key(Cid) references ConsumerInfo(Cid) on delete cascade )engine innodb;
(4)销售明细表:用于记录具体的销售信息,主要字段有明细表ID、销售ID、商品ID、商品数量、商品单价、总价,具体设计如表2-10所示。
表2-10 销售明细表
建立该表的SQL语句如下:
create table SellDetail(EDid varchar(20) primary key,Eid varchar(20),Gid varchar(20),EDamount int not null, EDprice double,EDtotalprice double,Foreign key(Eid) references SellInfo(Eid) on delete cascade, Foreign key(Gid) references GoodsInfo(Gid) on delete cascade)engine innodb;
(5)客户退货表:用于记录客户退货的信息,主要字段包括客户退货ID、退货客户ID、销售ID及退货时间,具体如表2-11所示。
表2-11 客户退货表
建立该表的SQL语句如下:
create table ConsumerBack(CBid varchar(20) primary key,Cid varchar(20),Eid varchar(20),CBdate date, Foreign key(Cid) references ConsumerInfo(Cid) on delete cascade, Foreign key(Eid) references SellInfo(Eid) on delete cascade)engine innodb;
(6)客户退货明细表:该表用于记录客户退货的详细信息,详细设计如表2-12所示。
表2-12 客户退货明细表
建立该表的SQL语句如下:
create table ConsumerBackDetail(CBDid varchar(20) primary key,CBid varchar(20),Gid varchar(20), CBDamount int not null,CBDprice double,CBDtotalprice double, Foreign key(CBid) references ConsumerBack(CBid) on delete cascade, Foreign key(Gid) references GoodsInfo(Gid) on delete cascade )engine innodb;
(7)采购退货表:用于记录采购退货的信息,主要字段包括退货ID、供应商ID、采购ID及退货时间,具体如表2-13所示。
表2-13 采购退货表
建立该表的SQL语句如下:
create table ProviderBack(PBid varchar(20) primary key,Pid varchar(20),Sid varchar(20),PBdate date, Foreign key(Pid) references ProviderInfo(Pid) on delete cascade, Foreign key(Sid) references StockInfo(Sid) on delete cascade)engine innodb;
(8)采购退货明细表:该表用于记录采购退货的详细信息,详细设计如表2-14所示。
表2-14 采购退货明细表
建立该表的SQL语句如下:
create table ProviderBackDetail(PBDid varchar(20),PBid varchar(20),Gid varchar(20), PBDamount int not null, PBDprice double,PBDtotalprice double, Foreign key(PBid) references ProviderBack(PBid) on delete cascade, Foreign key(Gid) references GoodsInfo(Gid) on delete cascade )engine innodb;
说明:在开发过程中,数据库中表的设计直接影响着系统后期的开发,因此对表的设计要相当细致,要为后期的维护和系统性能的扩展打下良好基础。