【发布时间】:2021-11-27 14:36:27
【问题描述】:
我有一张名为Student的表,用来保存Class和Student的关系
| Class | Student (PK) |
|---|---|
| Class 1 | Peter |
| Class 1 | Harry |
| Class 2 | Sally |
| Class 2 | Tommy |
还有一张表叫Teacher
| Teacher(PK) |
|---|
| John |
| Emma |
| Chris |
最后,一个多对多表用于授权和描述每个教师的职责。例如,John 可以访问 1 班每个学生的个人资料和学习成绩
| Teacher (PK) | Class(PK) |
|---|---|
| John | Class 1 |
| Chris | Class 2 |
| Emma | Class 2 |
基本结构工作正常。然而,Chris,本应是 2 班的老师,但由于特殊原因,他需要访问 A 班的 Peter 的个人资料。因此,我尝试更新表结构。
| Teacher(PK) | Class(PK) | Student |
|---|---|---|
| John | Class 1 | Null |
| Chris | Class 1 | Peter |
| Chris | Class 2 | Null |
| Emma | Class 2 | Null |
由于键“Chris-Class1”重复但我无法将 student 设置为主键的一部分,因此引发错误,因为不允许为空。有几种方法可以解决:
- 添加自增字段可以去掉老师和班级的主键设置
| Index(PK) | Teacher | Class | Student |
|---|---|---|---|
| 1 | John | Class 1 | Null |
| 2 | Chris | Class 1 | Peter |
| 3 | Chris | Class 2 | Null |
| 4 | Emma | Class 2 | Null |
- 或者把它分成两个表
| Teacher (PK) | Class(PK) |
|---|---|
| John | Class 1 |
| Chris | Class 2 |
| Emma | Class 2 |
| Teacher(PK) | Class(PK) | Student(PK) |
|---|---|---|
| Chris | Class 1 | Peter |
我想问这种情况应该用哪种方法更好?
【问题讨论】:
-
规范化 joe 结构 caLSS8WITH ID; NAME) sudent 表教师表和所有的桥表
标签: mysql primary-key composite-primary-key