一、实验目的
1.理解和掌握数据库设计的方法和主要步骤;
2.熟练掌握概念结构的建立方法和常用表达工具(E-R 图);
3.熟练掌握概念结构到逻辑结构的转换原则;
4.掌握SQL 流程控制语句、存储过程的语法;
5.理解存储过程的概念和原理;
6.掌握SQL Server 2005中数据库编程的有关操作。
二、实验环境
1.实验室名称:软件实验室
2.主要仪器设备:PC机、SQL Server2008环境
三、实验内容
假设要根据某大学的系、学生、班级、学会等信息建立一个数据库。一个系有若干个专业,每个专业每年只招一个班,每个班由若干学生。一个系的学生住在同一个宿舍区。每个学生可以参加多个学会,每个学会有若干个学生,学生参加某学会有个人入会年份。
试根据上述业务规则,完成数据库设计,并在SQL Server中实现。
1.应用规范设计法设计该数据库,要求达到3NF。请给出详细设计过程。
2.指出每个关系的主码和外码。
3.请设计一个存储过程,以学会编号作为输入参数,实现统计指定学会学生人数的功能。
四、调试分析
(一)概念结构设计:
对四个实体之间的关系进行分析:
一个系有若干个专业,1:n;每个专业每年只招一个班,1:1;每个班由若干学生,1:n;一个系的学生住在同一个宿舍区,1;1;每个学生可以参加多个学会,每个学会有若干个学生,m:n;学生参加某学会有个人入会年份,1:1.
(二)抽象结构设计:
涉及的基本要素:实体、属性、码、域、联系等。
(1)实体:系、学生、专业、学会、专业、班级
(2)属性【实体具有的特性】
各个实体的属性:
系:系编号、系名称
学生:学号、学生姓名、学生性别
学会:学生会名、学会编号
班级:班级编号、班级名称
专业:专业编号、专业名称
(3)关系:实体内部关系与实体之间的关系:1对1、1对多、多对多。
五、实验结果
六、实验源代码
/*
假设要根据某大学的系、学生、班级、学会等信息建立一个数据库。
一个系有若干个专业,每个专业每年只招一个班,每个班由若干学生。
一个系的学生住在同一个宿舍区。每个学生可以参加多个学会,
每个学会有若干个学生,学生参加某学会有个人入会年份。
1.应用规范设计法设计该数据库,要求达到3NF。请给出详细设计过程。
2.指出每个关系的主码和外码。
3.请设计一个存储过程,以学会编号作为输入参数,实现统计指定学会学生人数的功能。
*/
create table 学生信息表(
学号 varchar(10) primary key not null,
姓名 varchar(20) not null,
性别 varchar(5) not null,
年龄 int not null,
专业编号 varchar(10) not null,
foreign key(专业编号) references 专业信息表(专业编号)
);
insert into 学生信息表(学号,姓名,性别,年龄,专业编号) values('s25301','李雯','女',18,'B21')
insert into 学生信息表(学号,姓名,性别,年龄,专业编号) values('s25302','小张','男',21,'B22')
insert into 学生信息表(学号,姓名,性别,年龄,专业编号) values('s25303','小李','女',22,'A20')
insert into 学生信息表(学号,姓名,性别,年龄,专业编号) values('s25304','李静静','男',21,'A22');
select * from 学生信息表;
create table 专业信息表(
专业编号 varchar(10) primary key not null,
专业名称 varchar(20) not null
);
insert into 专业信息表(专业编号,专业名称) values('B21','计算机科学与技术')
insert into 专业信息表(专业编号,专业名称) values('B22','数据科学与大数据技术')
insert into 专业信息表(专业编号,专业名称) values('A20','软件工程')
insert into 专业信息表(专业编号,专业名称) values('A22','人工智能');
select * from 专业信息表;
create table 学会信息表(
学会编号 varchar(10) primary key not null,
学会名称 varchar(20) not null
);
insert into 学会信息表(学会编号,学会名称) values('20021','心理学会')
insert into 学会信息表(学会编号,学会名称) values('20022','篮球学会')
insert into 学会信息表(学会编号,学会名称) values('20023','舞蹈学会')
insert into 学会信息表(学会编号,学会名称) values('20024','音乐学会');
select * from 学会信息表;
create table 系部信息表(
系部编号 varchar(10) primary key not null,
系部名称 varchar(20) not null
);
insert into 系部信息表(系部编号,系部名称) values('201','数学系')
insert into 系部信息表(系部编号,系部名称) values('202','计算机科学与技术系')
insert into 系部信息表(系部编号,系部名称) values('203','教育系')
insert into 系部信息表(系部编号,系部名称) values('204','外语系');
select * from 系部信息表;
create table 参会信息表(
学号 varchar(10) primary key not null,
学会编号 varchar(10) not null,
入会时间 varchar(20) not null,
foreign key(学会编号) references 学会信息表(学会编号)
);
insert into 参会信息表(学号,学会编号,入会时间) values('s25301','20021','4/21');
insert into 参会信息表(学号,学会编号,入会时间) values('s25302','20022','4/13');
insert into 参会信息表(学号,学会编号,入会时间) values('s25303','20023','4/1');
insert into 参会信息表(学号,学会编号,入会时间) values('s25304','20024','4/12');
select * from 参会信息表;