多所学校用户的架构设计 类
Schema design for users with many school classes
我正在尝试添加一个名为 user_classes
的新 table,它将关联我用户的 classes。我正在建立一个允许他们生成 class 时间表的网站。在我的数据库中,我有两个现有的 table——一个 users
table,其中包含 id
、name
和 email
:
=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'
我正在尝试添加一个名为 user_classes
的新 table,它将关联我用户的 classes。我正在建立一个允许他们生成 class 时间表的网站。在我的数据库中,我有两个现有的 table——一个 users
table,其中包含 id
、name
和 email
:
=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'