MySQL:在单独的列中存储列表?还是有更好的东西?

时间:2015-09-19 05:25:32

标签: mysql

所以,我在PHP / MySQL方面经验丰富,我之前做过一些事情,比如创建一个小型聊天网站甚至是一个小页面分析应用程序。不过,这个最近的项目正在挑战我的能力。

所以,我正在为学校设计这个应用程序。我有一个用户列表和一个类列表。我希望能够将用户分配给多个类(现在我通过引用类表中的条目的UID来存储单个赋值)。我是否必须通过为每个可能分配的类添加额外的列来实现这一目标(有一个列为他们的第一个类,第二个类,等等到某个限制)?我是否必须将用户限制为多个已分配的课程?还是有更优雅的解决方案?我知道建议不要在单个单元格中进行逗号分隔列表(我可以就此达成一致,因为我打算根据类UID等搜索学生)。

所以,抱歉我对此有点新意,但我真的不知道该怎么做。每个指定类的列都可以使用,但我觉得应该有一个更优雅的解决方案。

无论如何,请告诉我,谢谢。

2 个答案:

答案 0 :(得分:2)

简而言之,您需要第三个表来跟踪用户和类之间的关系

用户1 - 1级

用户1 - 第2类

...

用户2 - 2级

...

将2个字段设为PK,以确保用户1不能在第1类中注册两次。

您需要确保用户和/或类表中的删除以某种方式传播到此处,您将走在正确的轨道上

答案 1 :(得分:2)

使用第三个表来处理许多关系。 class_roll表包含两个字段class_id& student_id。两者都是主要的,以避免重复。这是一个班级可以有零个或多个学生,一个学生可以被分配零个或多个班级

class
-----
+ class_id
  class_name
  ...

student
-------
+ student_id
  student_name
  ...

class_roll
----------
+ class_id
+ student_id