为一个学生管理系统进行数据库表结构设计,该系统包括:学生信息管理,课程管理,老师信息管理,选课管理(假定每门课程只能有一名老师讲解)大家看我设计的是否可行:Student(stuId,stuName)
stuId是主键
Teacher(teacherId,teacherName)
teacherId 是主键
Course(courseId,courseName)
courseId是主键
Course_manage (courseId,teacherId,stuId)
courseId,teacherId 是复合主键,同时三个字段分别和上面三张表外键约束

解决方案 »

  1.   

    楼主:(假定每门课程只能有一名老师讲解)这就有courseId->teacherId
    这违背了第二范式,会引起插入异常、删除异常和修改复杂等问题下面解释插入异常:
    如果一位老师开了一门课,但是还没有学生选课,那么就无法将这条信息插入到表中如果满足楼主的假定,那应该把teacherID作为Course的一个属性,修改如下:Course(courseId,teacherID,courseName)
    courseId是主键,teacherID外键
    Course_manage (courseId,stuId)
    courseId 是主键,同时外键约束
      

  2.   

    是的,刚才想了一下,发现确实有点欠考虑,想当然了。修改后Student(stuId,stuName)
    stuId是主键
    Teacher(teacherId,teacherName)
    teacherId 是主键
    Course(courseId,courseName,teacherId)
    courseId是主键,teacherId外键约束
    Course_manage (courseId,stuId)
    course主键,同时外键约束