实验二数据库的定义实验报告
1. 建立表之间的关系:
(1)主键(primary key)
学生表和班级表的主键:因为学生表的学号列可以唯一的标识学生表的每一行,这是因为对于每个学生来讲学号是唯一的,因此,学号可以作为学生表的主键,同样,班级表的班号也可以单独作为班级表的主键。
授课表和成绩表的主键:这两个表均无法用单一列作主键,因为在授课表中同一门课程会有多个班上课,同一个老师也会给不同的班上不同的课,因此只有用班号,课号,教师号的组合才能唯一地标识授课表的每一行,因此授课表的主键由课号,班号,教师号3个列组合而成。同样,成绩表的主键只能由学号,班号2个列组合而成。
(2)外键:班级表中的列班号是班级表的主键,而学生表中的班号是学生表的外键。学生必须属于一个特定的班级。一旦在设计数据库是确定了班级表和学生表的主键和外键的这种关系,在给学生表输入数据时,学生所在的班号必须存在于班级表中,否则,该学生的数据无法输入到系统中,这就有效地避免了由于无意间数据输入的错误,保证了数据库中数据的完整性。
班号列是班号表的主键,班号列也是班级表的主键,在授课表中的的课号和班号列组合起来可定义为授课表的外键。同样,成绩表的主键可以是学号和课号两个列的组合。
2.为各表创建约束
/*为学生表创建约束*/
CONSTRAINT [CK_学生] CHECK ([学号] like '[S][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'),
CONSTRAINT [CK_学生_1] CHECK ([班号] like '[S][0-9][0-9][0-9][0-9][0-9][0-9]'),
CONSTRAINT [CK_学生_性别] CHECK ([性别] = '女' or [性别] = '男')
/*为课程表创建约束*/
CONSTRAINT [DF_课程_所属系] DEFAULT ('机电学院') FOR [所属系],
CONSTRAINT [DF_课程_课时] DEFAULT (40) FOR [课时],
CONSTRAINT [CK_课程_课号] CHECK ([课号] like '[0-9][0-9][0-9][0-9][0-9][0-9]'),
CONSTRAINT [CK_课程_课时] CHECK ([课时] <= 30 and [课时] >= 80)
/*为成绩表创建约束*/
CONSTRAINT [CK_成绩_成绩] CHECK ([成绩] <= 0 and [成绩] >= 100)
/*为班级表创建约束*/
CONSTRAINT [DF_班级表_专业] DEFAULT ('机械制造及自动化') FOR [专业],
CONSTRAINT [DF_班级表_所在系] DEFAULT ('机电学院') FOR [所在系],
CONSTRAINT [DF_班级表_人数] DEFAULT (40) FOR [人数],
CONSTRAINT [CK_班级表] CHECK ([人数] <= 0 and [人数] >= 100)
/*为教师表创建约束*/
CONSTRAINT [DF_教师_性别] DEFAULT (N'男') FOR [性别],
CONSTRAINT [DF_教师_职称] DEFAULT ('讲师') FOR [