为一个学生管理系统进行数据库表结构设计,该系统包括:学生信息管理,课程管理,老师信息管理,选课管理(假定每门课程只能有一名老师讲解)大家看我设计的是否可行:Student(stuId,stuName)
stuId是主键
Teacher(teacherId,teacherName)
teacherId 是主键
Course(courseId,courseName)
courseId是主键
Course_manage (courseId,teacherId,stuId)
courseId,teacherId 是复合主键,同时三个字段分别和上面三张表外键约束
stuId是主键
Teacher(teacherId,teacherName)
teacherId 是主键
Course(courseId,courseName)
courseId是主键
Course_manage (courseId,teacherId,stuId)
courseId,teacherId 是复合主键,同时三个字段分别和上面三张表外键约束
这违背了第二范式,会引起插入异常、删除异常和修改复杂等问题下面解释插入异常:
如果一位老师开了一门课,但是还没有学生选课,那么就无法将这条信息插入到表中如果满足楼主的假定,那应该把teacherID作为Course的一个属性,修改如下:Course(courseId,teacherID,courseName)
courseId是主键,teacherID外键
Course_manage (courseId,stuId)
courseId 是主键,同时外键约束
stuId是主键
Teacher(teacherId,teacherName)
teacherId 是主键
Course(courseId,courseName,teacherId)
courseId是主键,teacherId外键约束
Course_manage (courseId,stuId)
course主键,同时外键约束