首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何建立(多对多)的关系

如何建立(多对多)的关系
EN

Database Administration用户
提问于 2014-03-05 12:04:02
回答 1查看 882关注 0票数 4

你好,我面临以下情况。我有一张学生桌,其结构如下。

代码语言:javascript
复制
Student
id(PK), matriculation number, first_name, last_name, email

一个学生可以有多个专业(BSc机械工程,MSc机械工程等)。

代码语言:javascript
复制
Major
id(PK), major

同时,一个专业可能被分配给多个学生,因此学生和专业之间的关系是多到多的。我使用下面的映射表实现了它。

代码语言:javascript
复制
MajorStudent
id(PK), student_id(FK), major_id(FK)

然而,每个学生都可以参加许多考试。但是对于每一次考试,了解他的专业是很重要的。也就是说,他可以参加与BSc机械工程和MSc机械工程相同的考试,但这应该算作两次不同的考试。同时,每一次考试都分配一个分数,这个分数可以有四个值之一。我的考试表和成绩表都是这样的。

代码语言:javascript
复制
Exam
id(PK), major_student_id(FK), grade_id(FK)

Grade
id(PK), grade(value1, value2, value3, value4)

我最后想得到的是

代码语言:javascript
复制
View
student_id | first_name | last_name |... | major      | exam_id | grade
1            test1       testtest1        BSc M.engin   1         value1
1            test1       testtest1        MSc M.engin   2         value3

你认为我的设计是正确的吗。一般说来,你会如何建立一种从多到多到多的关系?(如果有帮助,我将使用MySQL和cakephp来实现它)

EN

回答 1

Database Administration用户

发布于 2015-04-29 22:53:27

桌子、学生和专业都很好。

但是,可以/应该作出以下改进。

  • 将MajorStudent中的FKs合并到PK,去掉id
  • 保存StudentFKMajorFK而不是Exam中的MajorStudentFK,虽然可以讨论这一点,但是它会更快,而且在我的考虑中不是多余的
  • 等级未标准化。所有属性都应该是原子的,而等级则不是。要么创建4列(坏),要么使用以下Exam(id[PK], studentId[FK], MajorId[FK]) Grades(id[PK], examId[FK], value)

我不明白为什么一次考试有四年级。

票数 2
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/60184

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档