【问题标题】:Mysql - Table design for authorization checkingMysql - 用于授权检查的表设计
【发布时间】: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 设置为主键的一部分,因此引发错误,因为不允许为空。有几种方法可以解决:

  1. 添加自增字段可以去掉老师和班级的主键设置
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
  1. 或者把它分成两个表
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


【解决方案1】:

他需要从 A 类访问 Peter 的个人资料

使用两个JOINs,而不是添加一个额外的表。

(如果您提供该“个人资料”并提供SHOW CREATE TABLEs,也许我会更清楚。)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-24
    • 1970-01-01
    • 2015-11-10
    • 1970-01-01
    • 1970-01-01
    • 2014-05-20
    相关资源
    最近更新 更多