数据库实验.docx
- 文档编号:4856475
- 上传时间:2022-12-10
- 格式:DOCX
- 页数:24
- 大小:1.07MB
数据库实验.docx
《数据库实验.docx》由会员分享,可在线阅读,更多相关《数据库实验.docx(24页珍藏版)》请在冰豆网上搜索。
数据库实验
数据库原理实验指导
实验前准备:
请设计一个企业销售管理据库,其中需要保存的信息如下:
员工信息,包括:
员工编号、员工姓名、性别、所属部门、职称、到职日、生日、薪水、填表日期;
客户信息,包括:
客户号,客户名称,客户住址,客户电话、邮政编码;
产品信息,包括:
产品编号,产品名称;
员工和客户可以签订订单,每签订一个订单,就要保存订单信息,包括:
订单编号、客户号、业务员编号、订单金额、订货日期、出货日期、发票号码。
此外,每个订单可能涉及到多种产品,每种产品可能被多个订单订购。
因此需要每个订单中每类产品的销售明细,包括每种产品的销售数量、单价、订单日期;
要求:
(1)给出系统的ER图(可以用word或其它画图工具,如Visio画),要求画出所有的实体,联系,属性以及联系的类型;
(2)将ER图转换为关系模型;
实验一
实验名称:
数据定义(2课时)
一、实验目的
1、理解数据库模式的概念,通过使用SQLSERVER企业管理器或者MySql建立数据库和基本表。
模式为人事表、客户表、销售表、销售明细表、产品表。
熟悉SQLSERVER企业管理器的使用,并将得到的表生成脚本,然后保存。
2、理解上述基本表之间的关系,建立关系表。
3、掌握修改表结构的基本方法
4、掌握索引和视图的创建方法
二、实验环境
MSSQLSERVER或者MySql。
三、实验内容与步骤
1、建立一个数据库和五张表的表结构。
(1)/*员工人事表employee*/
emp_no
char(5)
Notnull
primarykey
员工编号
emp_name
char(10)
Notnull
员工姓名
sex
char
(1)
Notnull
性别
dept
char(4)
null
所属部门
title
char(6)
null
职称
date_hired
datetime
null
到职日
birthday
datetime
Null
生日
salary
int
null
薪水
addr
char(50)
null
住址
Mod_date
datetime
Default(getdate())
操作日期
Createdatebasesale;
createtableemployee(
emp_nochar(5)Notnullprimarykey,
emp_namechar(10)Notnull,
sexchar
(1)Notnull,
deptchar(4)null,
titlechar(6)null,
date_hireddatetimenull,
birthdaydatetimenull,
salaryintnull,
addrchar(50)null,
Mod_datedatetimeDefault0,
constraintc1check(性别in('男','女'))
);
(2)/*客户表customer*/
cust_id
char(5)
Notnull
primarykey
客户号
cust_name
char(20)
Notnull,
客户名称
addr
char(40)
Notnull,
客户住址
tel_no
char(10)
Notnull,
客户电话
zip
char(6)
null
邮政编码
createTABLEcustomer(
cust_idchar(5)Notnullprimarykey,
cust_namechar(20)Notnull,
addrCHAR(40)Notnull,
tel_nochar(10)Notnull,
zipchar(6)null
);
(3)/*销售主表sales*/
order_no
Char(5)
Notnull
primarykey
订单编号
cust_id
char(5)
Notnull,
客户号
sale_id
char(5)
Notnull,
业务员编号
tot_amt
numeric(9,2)
null,
默认0
订单金额
order_date
datetime
null,
订货日期
ship_date
datetime
null,
出货日期
invoice_no
char(10)
null
发票号码
createTABLEsales(
order_nochar(5)Notnullprimarykey,
cust_idchar(5)Notnull,
sale_idCHAR(5)Notnull,
tot_amtnumeric(9,2)null,
order_datedatetimenull,
ship_datedatetimenull,
invoice_nochar(10)null
);
(4)/*销货明细表sales_item*/
order_no
Char(5)
Notnull,
primarykey
订单编号
prod_id
char(5)
Notnull,
产品编号
qty
int
Notnull
默认0
销售数量
unit_price
numeric(9,2)
Notnull
默认0
单价
order_date
datetime
null
订单日期
createTABLEsales_item(
order_nochar(5)Notnull,
prod_idchar(5)Notnull,
primarykey(order_no,prod_id),
qtyINTNotnull,
unit_pricenumeric(9,2)Notnull,
order_datedatetimenull,
CONSTRAINTFK_1FOREIGNkey(order_no)REFERENCESsales(order_no),
CONSTRAINTFK_2FOREIGNkey(prod_id)REFERENCESproduct(prod_id)
);
(5)/*产品名称表product*/
prod_id
char(5)
Notnull
primarykey
产品编号
prod_name
char(20)
Notnull
产品名称
createTABLEproduct(
prod_idchar(5)Notnullprimarykey,
prod_namechar(20)Notnull
);
2、建立5张表的关系图
3、修改表结构,通过SQL语句修改表约束。
①?
在表employee加入CHECK约束:
输入的员工编号必须以E开头的5位数编号,性别只能为M/F。
据更新
①在每个表中插入若干条记录;
--employee
INSERTemployeeVALUES('E0001','赵三','男','销售部','经理','2013/3/4','1992/3/4',8000,'杭州','2013/4/2');
INSERTintoemployeevalues('E0002','赵四','M','销售部','成员','2017/3/5','1994/2/3',2500,'泰州','2018/4/2');
INSERTemployeeVALUES('E0003','钱四','男','销售部','组长','2015/3/4','1991/3/4',8000,'杭州','2015/4/2');
INSERTemployeeVALUES('E0004','钱行','男','后勤部','经理','2014/8/4','1981/9/8',10000,'杭州','2015/4/2');
INSERTemployeeVALUES('E0005','欧阳泽明','男','后勤部','组长','2016/8/4','1986/7/8'7000,'杭州','2017/4/2');
INSERTemployeeVALUES('E0006','欧阳凤','女','后勤部','成员','2012/5/4','1989/3/5',7000,'杭州','2016/4/2');
INSERTemployeeVALUES('E0007','欧阳峰','男','宣传部','副经理','2013/5/4','1989/3/9',9000,'泰州','2016/4/2');
INSERTemployeeVALUES('E0008','欧阳创正','男','宣传部','成员','2017/8/8','1999/7/25',4000,'泰州','2016/4/2');
INSERTemployeeVALUES('E0009','王阳凤','女','宣传部','经理','2012/7/13','1985/3/6',9090,'杭州','2016/4/2');
INSERTemployeeVALUES('E0010','王航','女','联络部','成员','2017/5/4','1997/8/15',4000,'扬州','2016/4/2');
INSERTemployeeVALUES('E0011','王凤','女','联络部','经理','2015/7/13','1989/3/6',9090,'扬州','2016/4/2');
INSERTemployeeVALUES('E0012','王立','男','联络部','副经理','2013/8/14','1989/5/19',9000,'泰州','2016/4/2');
--customer
INSERTcustomerVALUES('K0001','李立','泰州','77','225700');
INSERTcustomerVALUES('K0002','李才','苏州','72','295702');
INSERTcustomerVALUES('K0003','王吉','苏州','89','235701');
INSERTcustomerVALUES('K0004','王嘉','扬州','77','225400');
INSERTcustomerVALUES('K0005','王洛','苏州','77','221706');
INSERTcustomerVALUES('K0006','端木镇','泰州','77','215709');
INSERTcustomerVALUES('K0007','端木释俗','北京','77','225230');
INSERTcustomerVALUES('K0008','孙可','上海','77','225245');
INSERTcustomerVALUES('K0009','孙立','北京','77','225764');
INSERTcustomerVALUES('K0010','孙苏','苏州','77','212403');
--sales
INSERTsalesVALUES('S0010','K0001','E0001','7477','2018/4/29','2018/5/29','2');
INSERTsalesVALUES('S0009','K0002','E0002','6477','2018/4/22','2018/5/29','2');
INSERTsalesVALUES('S0008','K0003','E0003','5432','2018/5/9','2018/5/29','5');
INSERTsalesVALUES('S0007','K0004','E0004','9432','2018/4/15','2018/5/29','5');
INSERTsalesVALUES('S0006','K0005','E0005','5432','2018/5/9','2018/5/29','5');
INSERTsalesVALUES('S0005','K0006','E0006','8432','2018/5/19','2018/5/29','5');
INSERTsalesVALUES('S0004','K0007','E0007','9432','2018/5/19','2018/5/29','5');
INSERTsalesVALUES('S0003','K0008','E0008','6432','2018/5/24','2018/5/29','0');
INSERTsalesVALUES('S0002','K0009','E0009','5890','2018/5/2','2018/5/29','9');
INSERTsalesVALUES('S0001','K0010','E0010','10383','2018/5/7','2018/5/29','8');
--product
INSERTproductVALUES('C0001','短袖');
INSERTproductVALUES('C0002','短裤');
INSERTproductVALUES('C0003','长袖');
INSERTproductVALUES('C0004','牛仔裤');
INSERTproductVALUES('C0005','七分裤');
INSERTproductVALUES('C0006','五分裤');
INSERTproductVALUES('C0007','外套');
INSERTproductVALUES('C0008','短裙');
INSERTproductVALUES('C0009','连衣裙');
INSERTproductVALUES('C0010','衬衫');
--sales_item
INSERTsales_itemVALUES('S0010','C0001',77,1,'2018/5/9');
INSERTsales_itemVALUES('S0009','C0002',146,12,'2018/5/9');
INSERTsales_itemVALUES('S0008','C0003',126,18,'2018/5/9');
INSERTsales_itemVALUES('S0007','C0004',124,9,'2018/5/9');
INSERTsales_itemVALUES('S0006','C0005',128,12,'2018/5/9');
INSERTsales_itemVALUES('S0005','C0006',124,42,'2018/5/9');
INSERTsales_itemVALUES('S0004','C0007',446,52,'2018/5/9');
INSERTsales_itemVALUES('S0003','C0008',846,12,'2018/5/9');
INSERTsales_itemVALUES('S0002','C0009',1277,22,'2018/5/9');
INSERTsales_itemVALUES('S0001','C0010',2240,30,'2018/5/9');
将所有员工的薪水增加100;
UPDATEemployeeSETsalary=salary+100;
将产品名称为'A'的产品的单价改为10
据查询
(1)查找所有经理的姓名、职称、薪水。
SELECTemp_name,title,salary
FROMemployee
WHEREtitle='经理';
找出姓“王”并且姓名的最后一个字为“功”的员工。
价=inserted.单价and销货明细表.销售数量=inserted.销售数量)<>0
or
(selectcount(*)from销售主表,deleted,销货明细表
where销货明细表.单价=deleted.单价and销货明细表.销售数量=deleted.销售数量)<>0
)
begin
update销售主表
set订单金额=(selectsum(单价*销售数量)from销货明细表where订单编号=销售主表.订单编号)
end
droptriggersales_item_trigger
修改某个订单的“销售数量”或“单价”。
查看sales表中,该订单的“订单金额”的变化。
update销货明细表
set单价=100
where订单编号='d001'
select*from销售主表
删除某个某个订单的一个明细(即一个产品)。
查看sales表中,该订单的“订单金额”的变化。
deletefrom销货明细表
where产品编号='c001'
select*from销售主表
已经存在的订单,新建该订单的一个明细(即一个产品)。
查看sales表中,该订单的“订单金额”的变化。
select*from销货明细表
insertinto销货明细表
values('d005','c005','12','123','2012-2-1')
select*from销售主表
新建一个触发器sales_trigger,当修改sales表中数据时,确保sales中tot_amt(订单金额),不能随意修改,必须和sales_item中信息一致。
createtriggersales_triggeron销售主表
forinsertas
if(select销货明细表.订单编号from销货明细表.insertedwhereinserted.订单编号
=销货明细表.订单编号)isnull
update销售主表set订单金额=0where订单编号=(
select订单编号frominserted
)
删除触发器sales_trigger
droptriggersales_trigger;
四、实验报告
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据库 实验
![提示](https://static.bdocx.com/images/bang_tan.gif)