期末大作业:数据库设计(总7页)
--本页仅作为文档封面,使用时请直接删除即可-- --内页可以根据需求调整合适字体及大小--
期末大作业: 学生毕业设计 数据库设计
一、实验目的
(1)掌握数据库设计的基本方法 (2)掌握各种数据库对象的设计方法
二、实验内容
1.数据库概要设计:用文字简要描述实体之间的联系,画出E-R图(标出各联系中实体的基数)。
实体之间关系:主要是以学生基本信息这个实体为一个中心,首先涉及的就是实习单位信息的问题,这个部分是一个实习单位对应多个学生的关系,再后就是论文的问题,这个也是一个论文对应多个学生,而一个学生只能对应一个论文题目的关系,最后涉及的一个就是学生和导师之间的关系,这部分又可以分为两种情况,主要是视学生的实习方式而定,分校内实习和校外实习两种,在校内实习中,是一个学生对应一个老师,而一个老师则可以对应多个学生的关系,校外实习的情况稍有不同,一个学生可以对应两个老师,而一个老师则可以对应多个学生的关系。
下面是实体关系图:
实习单位信(0,n) 1 实n (1,学生信息 (1,1 选n 论文信息 (0,n(0,1) n n 指1 校外教师信指1 (0,校内教师信 (0,n)
2、数据表设计:将E-R图转换为数据表,给出创建各表的SQL语句。
数据库的创建:
create database 学生毕业设计 on primary
(name=学生毕业设计,
filename='f:\\学生毕业设计.mdf', size=20mb, maxsize=50mb,
2
filegrowth=10%) log on
(name=学生毕业设计_log, filename='f:\\学生毕业设计', size=15mb, maxsize=30mb, filegrowth=10%) go
建表:
use 学生毕业设计
create table 实习单位信息 (单位编号 char(4)not null, 实习单位 varchar(50)not null,联系电话 varchar(20), 通信地址 varchar(50), 邮编 char(6),
primary key(实习单位)) create table 校内教师信息 (教师编号 char(4)not null, 校内教师 varchar(20)not null,性别 char(2),
专业名称 varchar(20), 职称 varchar(20), 职务 varchar(20), primary key(校内教师)) create table 校外教师信息 (教师编号 char(4)not null, 校外教师 varchar(20)not null,性别 char(2), 部门 varchar(20), 职称 varchar(20), 职务 varchar(20), primary key(校外教师)) create table 论文信息 (论文ID char(6),
论文题目 varchar(50)not null,要求 varchar(100), primary key(论文题目)) create table 学生基本信息 (学号 char(8)not null, 姓名 varchar(20)not null, 性别 char(2), 出生日期 datetime,
3
专业名称 varchar(20)not null, 籍贯 varchar(20), 实习单位 varchar(50),
校内教师 varchar(20)not null, 校外教师 varchar(20), 论文题目 varchar(50), primary key(学号),
foreign key(实习单位)references 实习单位信息(实习单位), foreign key(校内教师)references 校内教师信息(校内教师), foreign key(校外教师)references 校外教师信息(校外教师), foreign key(论文题目)references 论文信息(论文题目) )
3、完整性约束:根据需要给数据表添加数据完整性,并说明添加的理由。
完整性约束:
Create rule phone_rule
AS @联系电话 Like '([0-9][0-9][0-9][0-9])-[0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
use 学生毕业设计
exec Sp_bindrule phone_rule, '学院信息.专业电话'(为了约束电话号码形式,保证数据的
完整性和正确性)
create rule code_rule
as @code like '[0-9][0-9][0-9][0-9][0-9][0-9]'; use 学生毕业设计
exec Sp_bindrule code_rule, '实习单位信息.邮编';(保证邮编的正确性)
Create rule lunwen_rule
AS @code Like '[l][w][0-9][0-9][0-9][0-9]';
use 学生毕业设计
exec Sp_bindrule lunwen_rule, '论文信息.论文ID';(确定论文编号的格式,保证数据的完
整性以避免数据库的混乱和输入信息时产生欺骗)
CREATE rule xuehao_rule
as @code like '[2][0][0][9][0-9][0-9][0-9][0-9]'; use 学生毕业设计
exec Sp_bindrule xuehao_rule, '学生基本信息.学号';(确定学号的格式,保证学生身份的
真实性)
create rule a_rule
as @code like '[a][0-9][0-9][0-9]'; use 学生毕业设计
exec Sp_bindrule a_rule, '校内教师信息.教师编号'; (确定教师编号的格式,保证教室身
份的真实性)
4
create rule b_rule
as @code like '[b][0-9][0-9][0-9]'; use 学生毕业设计
exec Sp_bindrule b_rule, '校外教师信息.教师编号'; (确定教师编号的格式,保证教室身
份的真实性并与校内教师编号区分)
4、存储过程、触发器和视图:根据需要给数据库添加几个实用的存储过程、触发器和视图,并说明它们各自的功能。 查询:
use 学生毕业设计
select 学号,姓名,学生基本信息.性别,学生基本信息.校内教师,职称,职务 from 学生基本信息,校内教师信息
where 学生基本信息.校内教师= 校内教师信息.校内教师 and 学生基本.校内教师='孙贝贝'
use 学生毕业设计
select *from 学生基本信息 where 校外教师 is not null;
use 学生毕业设计
select *from 学生基本信息
5
返回指导老师与其指导的学生名字的存储过程:
Create Proc 校内指导情况
as select 校内教师信息.校内教师,学生基本信息.姓名 from 校内教师信息 inner join 学生基本信息 on 校内教师信息.校内教师=学生基本信息.校内教师 return 查看:
exec sp_depends 校内指导情况
返回学生实习情况的存储过程:
create proc 学生实习
as select *from 学生基本信息 return 查看:
exec sp_depends 学生实习
6
创建视图:
create view 学生与指导老师情况 as
select 学号,姓名,专业名称,校内教师,校外教师 from 学生基本信息
查看视图:
触发器:
一位教师指导学生人数不得超过10人
use 学生毕业设计 go
CREATE TRIGGER lxx_6 ON 学生基本信息 after insert As begin if (
select COUNT(distinct 姓名) from 学生基本信息,校内教师信息
where ( 学生基本信息.校内教师=校内教师信息.校内教师 and 学生基本信息.校内教师='孙贝贝'))>10
print '一个老师指导学生不能超过十人!' end go
职称不到副教授、教授级别的教师只能指导本专业学生
use 学生毕业设计 go
CREATE TRIGGER lxx_7 ON 学生基本信息 after update
7
As
select 职务,学生基本信息.专业名称 from 校内教师信息,学生基本信息 if 校内教师信息.职务 <>'副教授'or 校内教师信息.职务 <> '教授' and 校内教师信息.专业名称=学生基本信.专业名称 begin
print '此老师只能指导本专业学生!' end go
5、实验小结:
这次的实验把我们这学期所学的数据库知识全部综合在了一起,其实开始学习数据库的时候,并没有想到数据库设计要花费那么多的心思和想法,首先吧,要设计之前,总体的需求分析是必须的,再后就是分析实体以及实体关系,这套方法还是很有效的,尤其对我们这样数据库的初学者来说,最起码我觉得是最正常的设计思维了。这个学期的另外一门课程,专业实训上,我们小组的项目也是和数据库系统设计挂钩的,在整体数据库设计学习之前,我们就已经先学会数据库的需求分析等等了,只是还是没有做的很到位,因为对数据完整性这一块知识的缺乏,所有涉及的数据库是很简单的,也是不严谨的,不安全的,总的看来说,我觉得数据库设计的好与否和数据完整性这一部分是很有大的关联的。这次的实验我还是花了心思的,从复习数据库设计再到熟悉个数据完整性约束等,使我对数据库设计和刚学时有了很大的不同认识。虽然在此过程中也出现了一些问题,或者说我的数据库设计不一定很完美,但至少我在这个过程中还是掌握了很多数据库设计的知识,也加深了对数据库安全性的认识,收获还是不错的。
8
因篇幅问题不能全部显示,请点此查看更多更全内容