数据库原理 实验三 数据定义
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
《数据库原理及应用》上机实验
实验三数据定义
一、学时
2学时
二、实验类型
设计
三、实验目的
1.巩固数据库的基础知识;
2.熟悉SQL Server2012中常用的数据类型;
3.熟悉和掌握利用查询分析器进行数据表的建立、修改和删除的方法;
4.利用查询分析器用SQL语言定义索引并进行相关操作。
四、实验准备
1.熟悉SQL Server 2012的工作环境;
2.复习有关表的建立、修改和删除的SQL语言命令和方法;
3.复习有关索引的建立、修改和删除的SQL语言命令和方法。
五、实验方法及步骤
1.登陆企业管理器/查询分析器;
2.创建数据库或连接已建立的数据库;
3.在当前数据库上建立新表,并注意定义表的主码,外码;
4.修改表的结构;
5.在表上建立索引;
6.删除表的定义。
六、实验内容
使用企业管理器完成以下操作:
1.创建学生课程数据库SCDB,并在SCDB中完成以下操作。
CREATE DATABASE SCDB
2.创建附录中的学生关系表student:(学号为主码,姓名要求唯一值,各属性数据类型根据实际情况设置);
CREATE TABLE student
(sno CHAR(11)PRIMARY KEY,
sname VARCHAR(12)UNIQUE,
ssex VARCHAR(6),
sage INT,
sdept VARCHAR(50)
)
3.创建附录中的课程关系表course:(课程号为主码,各属性数据类型根据实际情况设置);
CREATE TABLE course
(cno CHAR(3)PRIMARY KEY,
cname VARCHAR(12),
cpo VARCHAR(12),
credit INT
)
4.创建附录中的选课关系表sc:(sno和cno共同作为主码,sno和cno分别为外码,各属性数据类型根据实际情况设置);
CREATE TABLE sc
(sno CHAR(11)FOREIGN KEY REFERENCES student(sno),
cno CHAR(3)FOREIGN KEY REFERENCES course(cno),
grade int,
PRIMARY KEY (sno,cno)
)
5.在表student上增加“出生日期”属性列sbirth,数据类型为日期型。
ALTER TABLE student ADD sbirth date
6.删除表student的“年龄”属性列。
ALTER TABLE student DROP COLUMN sage
7.删除表student姓名列的唯一值约束。
ALTER TABLE student DROP CONSTRAINT [UQ__student__0F1ED583F2CE182F] 8.修改sc表成绩属性列为精确数字型。
ALTER TABLE sc ALTER COLUMN grade DECIMAL(4,2)
9.在表student上,按学号属性列的唯一值方式建立索引。
CREATE UNIQUE INDEX index_sno ON student(sno)
10.在course表上,按课程号属性列升序和课程名属性降序建立唯一值索引。
CREATE INDEX index_cno ON course(cno ASC)
CREATE INDEX index_cname ON course(cname DESC)
1.删除student上的唯一值索引。
DROP INDEX student.index_sno
七、实验思考
1.SQL Server提供的系统数据类型有哪些?
答:SQL Server 提供的系统数据类型有以下几大类,共25种:
1)整数数据类型
int、bigint、smallint、tinyint
2)浮点数据类型
float[n]、decimal[(p[,s])]和numeric[(p[,s])、real
3)字符数据类型
char(n)、varhcar(n|max)、nchar(n)、nvarchar(n|max)
4)日期和时间数据类型
Date、time、datetime、datetime2、smalldatetime、datetimeoffset
5)文本和图形数据类型
text、ntext、image
6)货币数据类型
money、smallmoney
7)位和二进制数据类型
bit、binary(n)、varbinary(n|max)
8) 其他数据类型
rowversion、timestamp、uniqueidentifier、cursor、sql_variant、table、xml
2.什么是主码和外码?它们的作用是什么?
答:主码--是在实体集中区分不同实体的候选码(关系中的某一属性组的值能唯一
地标识一个元组),一个实体集中可以有多个候选码,但是只能有一个主码。
作用:唯一标识一个元组
外码—相对于内码而言。
设F是基本关系R的一个或一组属性,但不是关系R 的码。
如果F与基本关系S的主码K相对应,则称F是R的外码。
作用:用于建立和加强两个表数据之间的链接的一列或多列
3.定义表结构是对数据模型的那个要素进行描述,对主属性有什么要求?
答:定义表结构是对数据模型的数据结构进行描述,候选码的的诸属性才称为主属
性。
4.修改表结构时,能否修改已定义属性的参数?新增加的属性列能否定义为非空?为什么?
答:可以,可以通过SQL语句进行修改。
新增属性列可以定义为空,因为允许多
个属性列为空。
5.分别在表student、sc上按“sno”列的唯一值方式建立索引,可能出现问题吗?情况有什么区别?
答:不会出现问题,因为他们是两张独立的表。
6.能否在非主属性列上建立索引?其恰当的方式是什么?
答:可以,一张表可以有多个索引。
例如:对于经常查询的数据列最好建立索引;
定义为主键、外键的属性列;对于需要在指定范围内的快速或频繁查询的数据列,经常用where子句中的数据列;经常出现在关键字order by、group by、distinct
后面的字段。
八、问题
1.在表的定义中,如何确定属性是NOT NULL / NULL?
答:属性在插入数据要求不能为空时定义为NOT NULL,在数据不要求为非空时
用NULL。
2.能否将student,course,sc表单独以一个数据文件的形式保存在磁盘上?
答:可以,可以将它们转储为sql文件的形势存储在磁盘上。
3.在表student的“SNO”、“SNAME”属性上分别按唯一值方式建立索引和在表student 的“SNO”+“SNAME”上按唯一值方式建立联合索引有无区别?
答:有区别。
创建两个独立索引,索引1 (sname)、索引2 (sdept)那么:
SELECT * FROM student WHERE sdept='IS' AND sname='张立' 将根据
数据库的分析信息,自动选择使用索引1或者索引2中的一个
SELECT * FROM 学生表WHERE sname='张立' 将使用索引1 .
SELECT * FROM 学生表WHERE sdept='IS' 将使用索引2。
组合索引--是组合条件查询时有条件查询的,顺序很重要。
在学生表中创建一个,组合索引(sdept,sname), 那么:
SELECT * FROM student WHERE sdept='IS 'AND sname='张立' 将使用索引。
SELECT * FROM student WHERE sdept='IS '将使用索引。
SELECT * FROM student WHERE sname='张立'将不使用索引。
4.要修改主属性的定义,正确的方式是什么?
答:ALTER TABLE table_name modify col_name col_definition [first|after col_name]此时不需要重新声明主键属性primary key
[附]
表
表2.3 学生选课关系表sc。