一、实验项目要求
实验目的
要求学生熟练掌握和使用 SQL语句创建数据库、表、索引和修改表结构,并学会使用SQL Server进行可视化建表和SQL语句建表两种方法。
实验内容
1.创建数据库和查看数据库属性。
2.创建表、确定表的主码。
3.查看和修改表结构。
4.具体内容:
(1)使用SQL语句按教材中的内容建立学生数据库。
(2)查看学生数据库的属性,并进行修改,使之符合要求。
(3)使用SQL语句,在建好的学生数据库中建立学生、课程、选课和系部4个表,其结构为;
- 学生(学号,姓名,年龄,性别,所在系)
- 课程(课程号,课程名,先行课,学分)
- 选课(学号,课程号,成绩)
- 系部(系号,系名称,系主任)
要求:
(1)建库、建表和建立表间联系。(表间联系通过外键实现,在属性关系中建)
(2)选择合适的数据类型。
(3)定义必要的主键和索引。
(4)使用SQL语句在上述4个表中尽可能的多输入些数据(每个表不能少于10条记录)。要求记录不仅满足数据约束要求,还要有表间关联的记录。
二、理论分析或算法分析
首先,需要创建一个STUEDNT库,然后在库里面建表,使用SQL语言建立了四个学生表、课程表、选课表、系部表,在建立表的时候,设置里面的属性,属性的内容以及性质(是什么类型的数据),然后进行数据的输入,根据表的含义,把自己想要的数据输进去;在学生表中,学号就是这个表的主码,其他就是一些基本信息;在课程表中,课程号就是这个表的主码,其他是一些基本信息;选课表中,对于学号和课程号两个码来说,参考系不同,码的属性就是不同,学号是外码,对于参照表为学生表,课程号是外码,对于参照表为课程表来说;在系部表中,系号是主码,其他就是一些信息。在创建表的过程中,清楚的知道每个属性里面最后需要输入的数据的类型。
三、实现方法
1.创建数据库:
create database ST;
use ST;
2.学生表的创建:
主码:学号
CREATE TABLE STUDENT(
Sno CHAR(9)PRIMARY KEY,
Sname CHAR(20),
Ssex CHAR(8),
Sage SMALLINT,
Sdept CHAR(20),
Foreign key (Sdept) references SEDPT (SSno)
);
3.课程表的创建:
主码:课程号
CREATE TABLE COURSE(
Cno CHAR(8)PRIMARY KEY,
Cname CHAR(40) NOT NULL,
Cpo CHAR(8),
CGrade SMALLINT,
Foreign key (Cpo) references COURSE (Cno)
);
4.选课表的创建:
主码:课程号和学号
CREATE TABLE SC(
Sno CHAR(9),
Cno CHAR(8),
Grade SMALLINT,
PRIMARY KEY(Sno,Cno),
FOREIGN KEY (Sno) REFERENCES STUDENT(Sno),
FOREIGN KEY (Cno) REFERENCES COURSE(Cno),
);
5.系部表的创建:
主码:系号
CREATE TABLE SEDPT(
SSno CHAR(20)PRIMARY KEY,
SSname CHAR(30) unique,
SSperson CHAR(8),
);
1.学生表信息的插入
Insert
into STUDENT(Sno,Sname,Ssex,Sage,Sdept)
Values('192054201', '张三','男','20','05'),('192054202','李四','男','20','05'),
('192054203','王五','男','20','05'),('192054204','张雅','女','18','05'),
('192041301','赵立','女','18','04'),('192041302','凌婷','女','19','04'),
('192041303','刘舒','女','19','04'),('192012201','张小','男','20','01'),
('192012202','高六','男','20','01'),('192012203','郭七','男','20','01');
2.系部表信息的插入
Insert
into SEDPT(SSno,SSname,SSperson)
Values('05','计算机工程系','钱老'),
('04','化学与化工系','孙老'),
('01','数学系','李老');
3.课程表信息的插入
Insert
into COURSE(Cno,Cname,Cpo,CGrade)
Values('001','数据库','003','2'),('002','计算机导论','003','2'),
('003','数学','001','4'),('004','计算机网络','003','3'),
('005','概率论','003','4'),('006','线性代数','003','3'),
('007','化学原理','003','3'),('008','机械制图','003','2'),
('009','计算机组成原理','002','4'),('010','数字图像处理','003','4');
4.选课表信息的插入
Insert
into SC(Sno,Cno,Grade)
Values('192054201','001','98'),('192054202','001','78'),
('192054203','001','60'),('192041303','008','90'),
('192041301','008','70'),('192041302','008','58'),
('192054201','003','100'),('192054202','003','45'),
('192041301','003','98'),('192054203','003','89');
5.建立索引表
Create Unique Index Depdon ON SEDPT(SSno);
Create Unique Index Stuson ON STUDENT(Sno);
Create Unique Index Coucon ON COURSE(Cno);
Create Unique Index SCon ON SC(Sno ASC,Cno DESC);
四、实验结果分析
实验结果
学生表的信息
课程表的信息
选课表的信息
系部表的信息
遇到的问题
- 在输入信息的时候,没有了解清楚char的含义,在char(8)就是可以输入4个汉字,8个数字和字母的含义,导致输入的数据的一直错误,最后在同学的提醒下,成功解决此问题;
- 在参考表的时候参考类型必须是一致哒,否则会建表不成功;
处理方式
- 输入数据的时候,注意数据类型;
思考题
1.为什么要建立索引?
1、创建唯一性索引,保证数据库表中每一行数据的唯一性。
2、加快数据的检索速度,这也是创建索引的最主要的原因。
3、减少磁盘IO(向字典一样可以直接定位)。
4、通过使用索引,可以在查询的过程中,使用优化隐藏器,提高系统的性能。
2.学生库选课表中的学号、课程号采用数值型、还是采用字符型的?采用哪种数据类型更好?
学号、课程号采用字符型,因为字符型包含数值型,学号比较长,导致数值比较大,所以采用字符型更好。