我正在使用JavaScipt,jQuery,PHP& MySQL包含~100课程。我试图想出一种有效的方法来存储每个用户在课程中的进度状态,而不必过多地查询MySQL数据库。
现在,我认为最简单的实现是为每个用户创建一个表,然后将每个课程的状态存储在该表中。唯一的问题是,如果我添加新课程,我将不得不更新每个用户的表。
我考虑的第二个实现是将每个课程存储为一个表,并记录完成该课程的每个用户的用户ID,然后生成状态报告(用户完成的课程,他们的表现如何,等)意味着从100个表中提取数据。
我缺少一个明显的解决方案吗?如何通过100课程存储用户进度,因此生成显示其流程的状态报告非常简单快捷。
干杯!
答案 0 :(得分:1)
如果报告一次只限于一个用户 - 也就是说,生成报告时,它是针对特定用户而不是大量用户 - 为什么不考虑存储在文件中的javascript对象表示法?如果可扩展性是关键,那么它就会变得简单。
显然,如果您要同时针对任意数量的用户运行报告,单独的数据文件将变得效率低下。
放弃效率论证,json还会给你一种非常人性化和可互换的格式。
最后,如果报告输出的安全性不是一个很大的问题,那么您还可以轻松地将视图渲染卸载到客户端上。
答案 1 :(得分:1)
使用2个表之间的关系。一个用户具有用户特定的列,如ID,用户名,电子邮件,w / e您想要存储的其他列。 然后是具有UID外键的状态表。 ID UID状态等。
最好在表格上保留datecreated和dateupdated。
然后加入表ON status.UID = users.ID
答案 2 :(得分:1)
一个好的选择是创建一个表,其中user_ID作为主键,而status(int)表的每一行代表一个用户。由于您拥有用户ID索引,因此访问其进度非常简单。
通过这种方式,添加新的leassons不会让你改变de DB
答案 3 :(得分:1)
我建议的表格结构是保留包含非唯一字段userid
和lessonid
的单个表格,以及相关的进度字段。如果您想在课程x
上取得用户y
的进度,请执行以下操作:
SELECT * FROM lessonProgress WHERE userid=x AND lessonid=y LIMIT 1;
除非您发现它确实存在问题,否则您无需担心性能问题。为每个用户创建一个表或为每个课程创建一个表都是不好的解决方案,因为数据库中并不存在动态数量的表。