我在这里和其他地方已经阅读了许多关于在 mysql 中存储数组的强有力的声明。规范化规则似乎表明它是一个坏主意,并且在存储的数组中搜索会导致不雅的代码。但是,对于我正在开发的应用程序,将数组存储在字段中似乎是一个合理的解决方案。我敢肯定这是每个人在这个职位上的错误想法,但我想不出更好的方法。这是设置:
我有一系列表格来存储注册学生、他们可以参加的课程以及他们在每门课程中的表现。所有都“标准化”以避免重复和错误。我希望能够生成一个“我的课程”部分,以便学生在登录后看到他们有资格参加的课程以及他们已经参加但可以自由复习的课程。想到的方法是两个数组;my_eligible_courses 和 my_completed_courses。注册时,学生将获得一组他们有资格参加的课程。这可以存储为多个出现 studentid 的行,他们可以参加的每门课程都有一个:
学生 1 课程 1 学生 1 课程 2 学生 1 课程 n
然后可以在该表中查询学生 1 的所有符合条件的课程,并在学生登录时显示为列表。
或者,studentid 可以是主键,并且在“eligible_courses”列中会有一个数组(课程 1、课程 2、课程 n)。
有一个学生表现表,记录每门课程以及与学生表现相关的指标。它将被查询以报告学生表现、课程质量等,但此表会变得非常大。我很难相信生成 my_completed_courses 列表的最有效方法是每次登录时通过 studentid 查询此表,以便为他们提供已完成课程的列表。
另一个复杂情况是,学生有资格的课程集是可变的,并且随着新课程的开发而扩展,在我看来,这似乎表明为每门新课程生成一组新列是一个坏主意——例如,new course_name , pretest_score, posttest_score, time_to_complete, ... 此外,对于生成一组简单列表的相对平凡的端点来说,每门新课程的表格似乎是一个复杂的解决方案。
因此,为了重申这个问题,将合格和已完成课程的“不雅”排列列表存储在注册学生表中或动态生成这些列表更好吗?
我猜这仍然太含糊,但是任何关于数据库设计的讨论都将不胜感激。