多所学校用户的架构设计 类

Schema design for users with many school classes

我正在尝试添加一个名为 user_classes 的新 table,它将关联我用户的 classes。我正在建立一个允许他们生成 class 时间表的网站。在我的数据库中,我有两个现有的 table——一个 users table,其中包含 idnameemail

=users table=                                                            
id    name    email                                                       
1     John    john@example.com   

我还有一个 classes table,其中包含我所有的 classes。 crn 只是课程编号,而 name 是 class.

的名称
=classes table=                                                              
id    crn    name                                                              
1     4000   CS 101                                                             
2     4001   CS 102                                                             
3     4003   CS 103  

这个新的table就是我的想法。我有一个 id 这是 PK,有一个 user_id 列表明 John Doe 具有以下所有 crn

=user_classes table=                                                         
id    user_id   crn                                                       
1     1         4000                                                      
2     1         4001                                                      
3     1         4003          

我的问题是,user_classes 是一个好的设计吗?我应该使用 classes 中的 id 而不是 crn 吗?

在此架构中,用户有很多 classes。不过,一个class也有很多用户。

您只需要 classes 和用户

的 2 列
create table user_classes 
(
  user_id int, class_id int,
  foreign key (user_id) references users(id),
  foreign key (class_id) references classes(id),
  unique (user_id, class_id)
);

例如,如果您需要 select 名为 'math' 的 class 的所有用户,您可以执行

select u.*
from users u
join user_classes uc on uc.user_id = u.id
join classes c on uc.class_id = c.id
where c.name = 'math'