实验五数据库完整性 课外练习题答案
2010-11-20 09:09
489 查看
/*
【课外实验】
一、建立如下关系表
工程表(工程号,工程名,开工日期,竣工日期,状态,城市,项目经理号)
TProject(Pid,PName,PStartDate,PEndDate,PStatus,PCity,Wid)
职工表(职工号,姓名,年龄,籍贯,职称,基本工资)
TWorker(Wid,WName,WAge,WHome,WRank,WBaseSal)
岗位表(岗位号,岗位名)
TJob(Jid,JName)
工资表(序号,职工号,月份,绩效工资,奖金)
TSalary(Sid,Wid,SMonth,SPerformanceSal,bonuses)
要求:
1、籍贯只记城市。
2、正确确定四个表的主码
3、通过外码,正确把握关系间的联系
4、工程与职工具有多对多的联系,建立一个工程_职工表(工程号,职工号,岗位号,入职时间,状态)
5、工程表的状态有两种状态(0:未完工,1:已完工)
工程_职工表的状态有两种(0:在职,2:已离职)
6、工资表的月份只能取1-12,奖金只能取100的倍数
7、职工表的年龄取值范围是18-60;职称取值为:初级、中级、高级;
要求所有人员基本工资不低于800,高级人员的基本工资不低于4500.
*/
/*
职工表(职工号,姓名,年龄,籍贯,职称,基本工资)
TWorker(Wid,WName,WAge,WHome,WRank,WBaseSal)
*/
go
/* 保证插入到数据库中的基本工资满足:所有人员基本工资不低于800,高级人员的基本工资不低于4500. */
/*
工程表(工程号,工程名,开工日期,竣工日期,状态,城市,项目经理号)
TProject(Pid,PName,PStartDate,PEndDate,PStatus,PCity,Wid)
*/
go
/* 确定日期合理性 */
/*
岗位表(岗位号,岗位名)
TJob(Jid,JName)
*/
/*
工资表(序号,职工号,月份,绩效工资,奖金)
TSalary(Sid,Wid,SMonth,SPerformanceSal,Sbonuses)
*/
/*
工程_职工表(工程号,职工号,岗位号,入职时间,状态)
TProject_Worker(Pid,Wid,Jid,EntryTime,PWStatus)
*/
/*
二、创建视图工资视图(序号,职工号,月份,基本工资,绩效工资,奖金,[五险一金],应发,个人所得税,实发)
*/
/*
三、是否能删除工程表的工程
*/
【课外实验】
一、建立如下关系表
工程表(工程号,工程名,开工日期,竣工日期,状态,城市,项目经理号)
TProject(Pid,PName,PStartDate,PEndDate,PStatus,PCity,Wid)
职工表(职工号,姓名,年龄,籍贯,职称,基本工资)
TWorker(Wid,WName,WAge,WHome,WRank,WBaseSal)
岗位表(岗位号,岗位名)
TJob(Jid,JName)
工资表(序号,职工号,月份,绩效工资,奖金)
TSalary(Sid,Wid,SMonth,SPerformanceSal,bonuses)
要求:
1、籍贯只记城市。
2、正确确定四个表的主码
3、通过外码,正确把握关系间的联系
4、工程与职工具有多对多的联系,建立一个工程_职工表(工程号,职工号,岗位号,入职时间,状态)
5、工程表的状态有两种状态(0:未完工,1:已完工)
工程_职工表的状态有两种(0:在职,2:已离职)
6、工资表的月份只能取1-12,奖金只能取100的倍数
7、职工表的年龄取值范围是18-60;职称取值为:初级、中级、高级;
要求所有人员基本工资不低于800,高级人员的基本工资不低于4500.
*/
Create Database ProjectDB; go use ProjectDB; go
/*
职工表(职工号,姓名,年龄,籍贯,职称,基本工资)
TWorker(Wid,WName,WAge,WHome,WRank,WBaseSal)
*/
Create Table TWorker( Wid char(10) primary key, WName char(10) not null, WAge int check(WAge>=18 and WAge<=60), WHome char(100), WRank char(10) check(WRank in ('初级','中级','高级')), WBaseSal numeric(7,2), check((WRank='高级' and WBaseSal>=4500) or (WRank<>'高级' and WBaseSal>=800) ) /* 也可以用触发器解决,见下 */ );
go
/* 保证插入到数据库中的基本工资满足:所有人员基本工资不低于800,高级人员的基本工资不低于4500. */
Create Trigger BaseSalaryEnsure On TWorker For insert,update As set Nocount off Declare @Wid char(10), @WRank char(10), @WBaseSal numeric(7,2) Begin select @Wid=Wid,@WBaseSal=WBaseSal from inserted; if(@WRank='高级' and @WBaseSal<4500) Begin select @WBaseSal=4500 End; if(@WBaseSal<800) Begin select @WBaseSal=800 End; update TWorker set WBaseSal=@WbaseSal where Wid=@Wid; End; go
/*
工程表(工程号,工程名,开工日期,竣工日期,状态,城市,项目经理号)
TProject(Pid,PName,PStartDate,PEndDate,PStatus,PCity,Wid)
*/
Create Table TProject( Pid char(10) primary key, PName char(50) not null, PStartDate Date,/*check(PStartDate<=PEndDate), 表 'TProject' 的列 'PStartDate' 的列 CHECK 约束引用了另一列。*/ PEndDate Date, PStatus bit, /* 工程表的状态有两种状态(0:未完工,1:已完工) */ PCity char(10), Wid char(10), foreign key(Wid) references TWorker(Wid), check(PStartDate<=PEndDate) );
go
/* 确定日期合理性 */
Create Trigger ValidateDate On TProject For Insert,Update As Set Nocount off Declare @Pid char(10), @PSDate Date, @PEDate Date Begin select @Pid=Pid,@PSDate=PStartDate,@PEDate=PEndDate from inserted /* 如果工程开始日期小于竣工日期,则开始日期等于竣工日期 */ if(@PSDate>@PEDate) Begin update TProject set PStartDate=@PEDate where Pid=@Pid; End; End; go
/*
岗位表(岗位号,岗位名)
TJob(Jid,JName)
*/
Create Table TJob( Jid char(10) primary key, JName char(10) );
/*
工资表(序号,职工号,月份,绩效工资,奖金)
TSalary(Sid,Wid,SMonth,SPerformanceSal,Sbonuses)
*/
Create Table TSalary ( Sid char(10) primary key, Wid char(10) references TWorker(Wid), SMonth int check(SMonth>=1 and SMonth<=12), SPerformanceSal numeric(7,2), Sbonuses numeric(7,2) );
/*
工程_职工表(工程号,职工号,岗位号,入职时间,状态)
TProject_Worker(Pid,Wid,Jid,EntryTime,PWStatus)
*/
Create Table TProject_Worker( Pid char(10), Wid char(10), Jid char(10), EntryTime datetime, PWStatus int check (PWStatus=0 or PWStatus=2), foreign key(Pid) references TProject(Pid), foreign key(Wid) references TWorker(Wid), foreign key(Jid) references TJob(Jid) );
/*
二、创建视图工资视图(序号,职工号,月份,基本工资,绩效工资,奖金,[五险一金],应发,个人所得税,实发)
*/
go Create View 工资视图 As ( select Sid as 序号, TSalary.Wid as 职工号, SMonth as 月份, TWorker.WBaseSal as 基本工资, Sbonuses as 资金, 500 as 五险一金, TWorker.WBaseSal+Sbonuses as 应发, (TWorker.WBaseSal+Sbonuses)*0.05 as 个人所得税, TWorker.WBaseSal+Sbonuses-(TWorker.WBaseSal+Sbonuses)*0.05 as 实发 from TSalary,TWorker where TSalary.Wid=TWorker.Wid ) go
/*
三、是否能删除工程表的工程
*/
相关文章推荐
- 山东大学数据库系统实验答案
- 数据库实验题答案
- 数据库系统教程(第二版何玉洁)课后数据库上机实验答案
- 3.21 学数据库 练习题答案
- 冷备数据库能否追溯应用旧库归档日志呢?通过实验来寻找答案!
- 自己珍藏的数据库SQL基础练习题答案
- 山东大学数据库实验五答案
- 2013=12=3 数据库实验七 数据控制实验(完整性部分)
- 数据库——练习题答案
- 数据库查询实验60习题答案
- 数据库---MySQL练习题及答案
- 数据库练习题第二篇(附答案)
- 15-07-19数据库练习题答案
- 第三章 python基础练习题--自我总结的答案
- 驳刘志镜之数据库范式论述及请软考办修正2009年下半年信息系统项目管理师上午第9题之正确答案
- String PK StringBuilder,传说就是传说,只有动手实验,才能得出确定的答案
- SAT数学练习题及详细答案解析(6)
- 数据库 8---数据库的完整性与安全性
- 6-8 编程练习题答案
- 选课数据库SQL语句练习题