mysql - 在数据库中存储与动态数量的类关联的用户

标签 mysql sql database database-design

我有一个表,将用户信息存储在 MySQL 数据库的表中。我需要一种方法来存储这些用户关联的类。

就像在学校一样上课。

与用户关联的类需要是动态的,并且对于每个用户来说可以不同。

我正在考虑在我的用户配置文件表中设置与类相关联的特定数量的列。然后,如果它们与该类关联,则只需将 classId 插入到行中。并继续填充它。

这看起来很脏而且很糟糕。我可以通过哪些其他选项查询数据库以了解用户与哪些类关联?

最佳答案

设置两个额外的表:一个用于类(id、name,...),另一个关联表用于将用户与其类相关联。关联表有两列:用户 ID 和类别 ID。然后获取用户的类别:

select class_id
from user_classes
where user_id = X

其中X是用户的ID。同样,要获取类(class)中的用户:

select user_id
from user_classes
where class_id = X

您可能希望将关联表的 PK 设置为 (user_id,class_id) 并单独为每一列建立索引。

如果您想要有关该类的更多信息而不仅仅是 ID,请执行连接:

select u.name, ...
from users u join user_classes uc on u.id = uc.user_id
where uc.user_id = X

关于mysql - 在数据库中存储与动态数量的类关联的用户,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7844231/

相关文章:

mysql - `possible_keys` 中没有索引……但仅在某些环境中

php - 将 MySQL 结果相互比较,同时将它们放入表中

ios - 如何在 SQLITE 中使用 AM/PM 按日期/时间排序

MySQL高效多表多索引选择

mysql - 外键是否可以存储与主键值不匹配的值?

mysql - 获取相关表mysql中的记录数

mysql - 如何创建一个具有由 2 个引用其他表的外键组成的复合键的表?

sql - 不确定如何从一个表中获取数据并将其移动到另一个表中

mysql - 在多结果选择中排除 future 日期

database - 计算邮政编码之间的距离...和用户。