数据库架构设计

Database schema Desigining

关系:
学生(s_id,姓名), 部门(d_id,姓名), course(d_id,c_id,name) d_id FK, 来自 Dept, 已注册(s_id,d_id).

根据给定的模式,如何形成一个关系registeredin,其中应该包含学生注册的课程信息,但限制学生只能注册已经注册的部门学生提供的课程。

提前致谢!

您的数据模型使用单一技术 ID。现在您正在寻找一种通过 table 树来保证一致性的方法。这对于单个代理键是不可能的,并且确实是这种设计的主要缺点。改为使用复合键:

学生(student_no,姓名)

  • 主键:(student_no)

部门(department_no,姓名)

  • 主键:(department_no)

课程(department_no、course_no、姓名)

  • 主键:(department_no, course_no)
  • 外键:(department_no)参考部门(department_no)

enrolled_in (student_no, department_no)

  • 主键:(student_no, department_no)
  • 外键:(student_no) 引用学生 (student_no)
  • 外键:(department_no)参考部门(department_no)

registered_in (student_no, department_no, course_no)

  • 主键:(student_no, department_no, course_no)
  • 外键:(student_no, department_no) 引用 enrolled_in (student_no, department_no)
  • 外键:(department_no,course_no)参考课程(department_no,course_no)