数据库设计优秀作品范例.docx
《数据库设计优秀作品范例.docx》由会员分享,可在线阅读,更多相关《数据库设计优秀作品范例.docx(29页珍藏版)》请在冰豆网上搜索。
数据库设计优秀作品范例
数据库设计与实现实训报告
完成人:
完成时刻:
2012年12月21日
项目名称:
超市商品管理系统
项目功能:
1.入库表、出库表、供给商表、营业员表、销售表的录入和贮存;
2.依照用销售表的要求出各个商品的销售额和所有商品的销售总额单;
3.依照用入库表的要求出各个商品的进价额单;
4.由供给商表、入库表生成商品所属供给商表;
5.生成商品盈利表;
6.生成商品表。
数据库设计与制作:
一、表结构:
一、GYSB(供给商信息表)的创建。
列名
说明
数据类型
长度
约束
GYSBH
供应商编号
Char
8
主键
NAME
姓名
Char
20
不允许为空
SEX
性别
Char
3
检查(check)约束
ADDRESS
地址
Char
50
不允许为空
PHONE
电话
Varchar2
20
不允许为空
二、RKB(入库表)的创建。
列名
说明
数据类型
长度
约束
SPBH
商品编号
Char
8
主键
SPMC
商品名称
VarChar2
20
不允许为空,外键
GYSBH
供应商编号
Char
8
不允许为空,外键
SPSL
数量
Number
7
不允许为空
PRICE
单价(元)
Number
7
不允许为空
LEIBIE
类别
VarChar2
20
不允许为空
GUIGE
规格
VarChar2
20
不允许为空
CFWZ
存放位置
VarChar2
50
不允许为空
YT
用途
VarChar2
100
不允许为空
RQ
日期
DATE
默认为空
3、CKB(出库表)的创建。
列名
说明
数据类型
长度
约束
SPBH
商品编号
Char
8
不允许为空,外键
NAME
商品名称
VarChar2
20
主键
SPSL
数量
Number
7
不允许为空
PRICE
单价(元)
Number
7
不允许为空
YYYH
营业员号
Char
20
不允许为空,外键
RQ
日期
DATE
默认为空
4、YEYB(营业员信息表)的创建。
列名
说明
数据类型
长度
约束
YYYH
营业员号
Char
20
主键
NAME
营业员姓名
VarChar2
20
不允许为空
PHONE
电话
Varchar2
20
不允许为空
五、SPXSB(商品销售表)的创建。
列名
说明
数据类型
长度
约束
SPBH
商品编号
Char
8
主键
NAME
商品名称
VarChar2
20
不允许为空
SPSL
数量
Number
7
不允许为空
PRICE
单价(元)
Number
7
不允许为空
XSE
销售额
VarChar2
20
允许为空
RQ
日期
DATE
默认为空
二、SQL语句:
注意:
创建数据库语句,请写在这里
一、创建GYSB(供给商信息表)
createtableGYSB
(GYSBHchar(8)primarykey,
NAMEchar(8)notnull,
SEXchar
(2)check(SEXin('男','女')),
ADDRESSchar(50)notnull,
PHONEVarchar2(20)notnull);
注意:
创建约束的语句写在这里
-------------为GYSB表创建名为GYSB_squ(序号)序列。
--------
createsequenceGYSB_squ
incrementby1
startwith1
nocycle
nocache;
---------------利用序列的SQL语句对表GYSB插入数据。
--------
insertintoGYSB(GYSBH,NAME,SEX,ADDRESS,PHONE)
values,'李林','男','陕西省商洛市丹循环工业经济区','001');
insertintoGYSB(GYSBH,NAME,SEX,ADDRESS,PHONE)
values,'李海','男','重庆市渝中区','001');
insertintoGYSB(GYSBH,NAME,SEX,ADDRESS,PHONE)
values,'张东林','男','河南省信阳市平桥区','001');
insertintoGYSB(GYSBH,NAME,SEX,ADDRESS,PHONE)
values,'王明','男','河南省驻马店市永辉批发超市','001');
insertintoGYSB(GYSBH,NAME,SEX,ADDRESS,PHONE)
values,'王林林','女','河南省信阳市浉河区','01');
insertintoGYSB(GYSBH,NAME,SEX,ADDRESS,PHONE)
values,'赵权','男','河南省信阳市羊山区','074');
-------------为GYSB表创建名为GYSB_view的视图。
-------------
createviewGYSB_view
as
select*fromGYSB;
---------------为GYSB表的GYSBH,NAME字段创建索引。
-------
createindexGYSBH_sql
onGYSB(GYSBH,NAME)
tablespaceusers
pctfree10;
----------------按照营业员编号(GYSBH_no)创建一个查询GYSB表,查询供给商的姓名(NAME)的进程。
-------------------------
createorreplaceprocedurepro_GYSB(GYSBH_nochar)
as
XNAMEchar(8);
DPHONEVarchar2(20);
begin
selectNAME,PHONEintoXNAME,DPHONEfromGYSBwhereGYSBH=GYSBH_no;
('供给商的姓名是:
'||XNAME);
('电话号码是:
'||DPHONE);
exception
whenno_data_foundthen
('供给商的编号为找到!
');
end;
----------------按照供给商姓名创建一个查询GYSB表,来查询供给商的地址的进程。
----------------------------
createorreplaceprocedureproce_GYSB(NAME_nachar)
as
DADDRESSchar(50);
begin
selectADDRESSintoDADDRESSfromGYSBwhereNAME=NAME_na;
('供给商的地址是:
'||DADDRESS);
exception
whenno_data_foundthen
('供给商的姓名为找到!
');
end;
------------------创建程序包,此程序包有两个进程。
进程按照营业员编号打印供给商的姓名、电话号码、地址。
编写挪用程序执行(利用GYSB表)。
----------------------------
createorreplacepackagepack_GYSB
is
procedurepro_GYSB(GYSBH_nochar);
procedureproce_GYSB(NAME_nachar);
endpack_GYSB;
createorreplacepackagebodypack_GYSB
as
procedurepro_GYSB(GYSBH_nochar)
is
XNAMEchar(8);
DPHONEVarchar2(20);
begin
selectNAME,PHONEintoXNAME,DPHONEfromGYSBwhereGYSBH=GYSBH_no;
('供给商的姓名是:
'||XNAME);
('电话号码是:
'||DPHONE);
exception
whenno_data_foundthen
('供给商的编号为找到!
');
end;
procedureproce_GYSB(NAME_nachar)
is
DADDRESSchar(50);
begin
selectADDRESSintoDADDRESSfromGYSBwhereNAME=NAME_na;
('供给商的地址是:
'||DADDRESS);
exception
whenno_data_foundthen
('供给商的姓名为找到!
');
end;
end;
---------------------在GYSB表上成立触发器,在更新表之前触发。
并显示供给商的编号、姓名。
----------
createtriggerbiud_GYSB
beforeinsertorupdateordelete
onGYSB
begin
selectGYSBH,NAMEfromGYSB;
('供给商的编号是:
'||DADDRESS);
('供给商的姓名是:
'||NAME);
end;
注意:
若是有事务,请写在这里
二、RKB(入库表)的创建。
createtableRKB
(SPBHchar(8)primarykey,
SPMCvarchar2(20)notnull,
GYSBHchar(8)notnull,
SPSLnumber(7)notnull,
PRICEnumber(7)notnull,
LEIBIEvarchar2(20)notnull,
GUIGEvarchar2(20)notnull,
CFWZvarchar2(50)notnull,
YTvarchar2(100)notnull,
RQdatedefaultnull,
constraintfk_3foreignkey(SPMC)referencesCKB(NAME),
constraintfk_4foreignkey(GYSBH)referencesGYSB(GYSBH));
tablespaceusers
pctfree10
pctused100
initrans1maxtrans255;
注意:
创建约束的语句请写在这里。
-----为RKB表创建名为syn_RK的public同义词,然后用select语句查询。
-------
createpublicsynonymsyn_RKforRKB
select*fromRKB
select*fromsyn_RK
------------为RKB表创建名为RKB_squ(序号)序列。
----------------
createsequenceRKB_squ
startwith100001
nocycle
nocache
order;
---------------利用序列的SQL语句对表RKB插入数据。
-------
insertintoRKB(SPBH,SPMC,GYSBH,SPSL,PRICE,LEIBIE,GUIGE,CFWZ,YT)
values,'雪碧','3',1000,3,'饮料','500ml','饮料区','饮用');
insertintoRKB(SPBH,SPMC,GYSBH,SPSL,PRICE,LEIBIE,GUIGE,CFWZ,YT)
values,'五香瓜子','5',200,4,'零食','30kg','食物区','吃');
insertintoRKB(SPBH,SPMC,GYSBH,SPSL,PRICE,LEIBIE,GUIGE,CFWZ,YT)
values,'绿豆糕','7',500,3,'食物','15kg','食物区','吃');
insertintoRKB(SPBH,SPMC,GYSBH,SPSL,PRICE,LEIBIE,GUIGE,CFWZ,YT)
values,'北京方便面','9',500,5,'食物','5kg','食物区','吃');
-------------为RKB表创建名为RKB_view的视图。
-------------
createviewRKB_view
as
selectSPBH,SPMC,GYSBH,SPSL,PRICE,RQfromRKB;
---------------为RKB表的SPBH,SPMC字段创建索引。
------------
createindexRKB_sql
onRKB(SPBH,SPMC)
tablespaceusers
pctfree10
storage(initial128knext128kminextents1maxextents100pctincrease5);
----------------按照商品编号(SPBH_no)创建一个查询RKB表,返回商品的商品名称,数量,单价(SPPNAME,SSPSL,SPRICE)的进程。
-------------------------
createorreplaceprocedurepro_RKB(SPBH_nochar)
as
SPPNAMEvarchar2(20);
SSPSLnumber(7);
SPRICEnumber(7);
begin
selectSPSL,PRICE,SPMCintoSPPNAME,SSPSL,SPRICEfromRKBwhereSPBH=SPBH_no;
('商品名称:
'||SPPNAME);
('数量:
'||SSPSL);
('单价:
'||SPRICE);
exception
whenno_data_foundthen
('商品编号为找到!
');
endpro_RKB;
begin
pro_RKB('100002');
end;
----------------按照商品编号(SPBH_no)创建一个查询RKB表,返回供给商编号(GYSBH)的进程。
-------------------------
createorreplaceprocedureproce_RKB(SPBH_nochar)
as
SGYSBHchar(8);
begin
selectGYSBHintoSGYSBHfromRKBwhereSPBH=SPBH_no;
('供给商编号:
'||SGYSBH);
exception
whenno_data_foundthen
('商品编号为找到!
');
endproce_RKB;
begin
proce_RKB('100002');
end;
----------------编写函数以同意商品的商品编号来计算各类商品的金额。
--------------
createorreplacefunctionfun_RKB(SPBH_nochar)
returnnumber
as
iChar:
=100001;
xnumber(7);
ynumber(7);
RKB_sumnumber:
=0;
begin
selectSPSL,PRICEintox,yfromRKBwhereSPBH=SPBH_no;
foriin100001..100004loop
RKB_sum:
=x*y;
endloop;
returnRKB_sum;
exception
whenno_data_foundthen
('商品编号为找到!
');
endfun_RKB;
------------------创建程序包,此程序包有两个进程和一个函数。
进程按照商品编号打印商品名称,数量,单价、供给商编号。
函数按照商品编号返回各类商品的金额。
编写挪用程序执行(利用RKB表)。
createorreplacepackagepack_RKB
is
procedurepro_SPXSB(SPBH_nochar);
functionfun_SPXSB(SPBH_nochar)returnnumber;
end;
createorreplacepackagebodypack_RKB
as
procedurepro_RKB(SPBH_nochar)
is
SPPNAMEvarchar2(20);
SSPSLnumber(7);
SPRICEnumber(7);
begin
selectSPSL,PRICE,SPMCintoSPPNAME,SSPSL,SPRICEfromRKBwhereSPBH=SPBH_no;
('商品名称:
'||SPPNAME);
('数量:
'||SSPSL);
('单价:
'||SPRICE);
exception
whenno_data_foundthen
('商品编号为找到!
');
endpro_RKB;
procedureproce_RKB(SPBH_nochar)
is
SGYSBHchar(8);
begin
selectGYSBHintoSGYSBHfromRKBwhereSPBH=SPBH_no;
('供给商编号:
'||SGYSBH);
exception
whenno_data_foundthen
('商品编号为找到!
');
endproce_RKB;
functionfun_RKB(SPBH_nochar)
returnnumber
is
iChar:
=100001;
xnumber(7);
ynumber(7);
RKB_sumnumber:
=0;
begin
selectSPSL,PRICEintox,yfromRKBwhereSPBH=SPBH_no;
foriin100001..100004loop
RKB_sum:
=x*y;
endloop;
returnRKB_sum;
exception
whenno_data_foundthen
('商品编号为找到!
');
endfun_RKB;
endpack_RKB;
---------------------在RKB表上成立触发器,在更新表之前触发。
不允许该商品编号是“100000”。
------------------
createtriggerbiud_RKB
beforeinsertorupdateordelete
onRKB
begin
if(to_char(SPBH)!
='100000')then
raise_application_error(-20600,'商品编号不能是“100000”');
endif;
end;
注意:
若是有事务,请写在这里。
3、CKB(出库表)的创建。
createtableCKB
(SPBHchar(8)notnull,
NAMEvarchar2(20)primarykey,
SPSLnumber(7)notnull,
PRICEnumber(7)notnull,
YYYHchar(20)notnull,
RQdatedefaultnull,
constraintfk_1foreignkey(YYYH)referencesYEYB(YYYH),
constraintfk_2foreignkey(SPBH)referencesSPXSB(SPBH));
tablespaceusers
pctfree10
pctused100
initrans1maxtrans255;
注意:
创建约束语句,请写在这里。
------------为CKB表创建名为CKB_squ(序号)序列。
---------------
createsequenceCKB_squ
startwith100001
nocycle
nocache
order;
---------------利用序列的SQL语句对表CKB插入数据。
-----------
insertintoCKB(SPBH,NAME,SPSL,PRICE,YYYH)
values,'雪碧',1000,3,'1001');
insertintoCKB(SPBH,NAME,SPSL,PRICE,YYYH)
values,'五香瓜子',200,4,'1002');
insertintoCKB(SPBH,NAME,SPSL,PRICE,YYYH)
values,'绿豆糕',500,3,'1004');
insertintoCKB(SPBH,NAME,SPSL,PRICE,YYYH)
values,'北京方便面',500,5,'1005');
-------------为CKB表创建名为CKB_view的视图。
-------------
createviewCKB_view
as
select*fromCKB;
---------------为CKB表的SPMC字段创建索引。
--------------
createindexCKBql
onCKB(NAME)
tablespaceusers
pctfree10
storage(initial128knext128kminextents1maxextents100pctincrease5);
----------------按照商品编号(SPBH_no)创建一个查询CKB表,返回商品的商品名称(SPNAME)的进程。
------------------------
-createorreplaceprocedurepro_CKB(SPBH_nochar)
as
SPNAMEvarchar2(20);
begin
selectNAMEintoSPNAMEfromCKBwhereSPBH=SPBH_no;
('商品名称:
'||SPNAME);
exception
whenno_data_foundthen
('商品编号为找到!
');
endpro_CKB;
begin
pro_CKB('100002');
end;