培训课程数据库应该获得更新。 现在,每个新用户(由客户的客户编辑)都存储在给定的培训课程中(可由客户编辑)。用户被计算在内,因此永远不会超过f.a.每个培训课程有12个用户。
好的,这是旧概念。
对于新用户,每个新用户可以订阅更多课程,而不是使用复选框。 我现在遇到的困难是,我在给定列的SELECT / DELETE / UPDATE语句中处理数组概念时遇到了麻烦(sID是训练ID)
表培训课程
id | from_date | til_date | | ...
---+-----------------------+---------------------+---------
2 | 2012-04-16 08:30:00 | 2012-04-16 08:30:00 | ...
表培训用户:
id | sID | name | ...
---+-----+----------+---------------------------------------
1 | 2 | User A | ...
2 | 6 | User B | ...
我喜欢将不同课程写成一栏(2,4,7,9)与“,”分开的概念。 但是我会遇到问题,我不能再对该列进行COUNT。安全课程数据也只是将选中的课程输出到复选框。但客户的客户必须手动更新课程成员。所以我不能将每个课程“硬编码”到一个复选框。
有人知道如何正确地做到这一点吗?
谢谢和问候, 伯纳德答案 0 :(得分:1)
你至少需要三张桌子。
courses: (id, name, etc....)
users: (id, name, etc....)
user_courses: (user_id, course_id)
在课程中添加/删除用户只会涉及user_courses表的更新。新用户:添加记录,旧用户:删除记录。每个用户/课程配对在user_courses中为自己创建一条记录,您仍然可以非常轻松地完成计数。
将逗号分隔值嵌入到字段中会否定关系数据的整个目的。您失去了将数据相互关联的能力,因为您干净利落的用户< - >课程映射位于数据库/逗号中,而DB无法为您解释。
答案 1 :(得分:0)
我建议在users
和courses
之间创建一个联合表。使用逗号分隔字段对于您在此处所做的事情非常苛刻。
用户:
user_id | user_name | ...
课程:
user_id | course_name | ...
User_Course_Union
union_id | user_id | course_id | ...
然后,您可以轻松地根据SELECT COUNT(union_id) AS count WHERE ...
进行查询,并获取您需要的所有数据。
答案 2 :(得分:0)
如果你有many-to-many关系(例如学生的课程),你通常应该使用它们之间的表格。也就是说,你应该有你的课程表,你的学生表,然后你的课程 - 学生表(或“注册”表)。注册表可能如下所示:
Id | Student | Course | Grade |
1 | A | 10 | Pass |
2 | B | 10 | Fail |
3 | A | 12 | Withdraw |
这表示学生A分为两门课程(10和12),两名学生(A和B)分别为10分。这样做的好处是可以保留特定于注册的数据,例如:等级或通过/失败状态(如示例所示)。
答案 3 :(得分:0)
我会做三张桌子。 userInformation
,courseInformation
和userCourseInformation
。 userCourseInformation
会保留哪个用户正在参加哪些课程。
userInformation
user_id, user_name, etc..
courseInformation
course_id, course_name, etc..
userCourseInformation
user_course_id, user_id, course_id, etc..
所有注册的课程都在userCourseInformation
上,并引用其他两个表id
作为外键。如果要提供新课程,请将其添加到courseInformation
。添加新用户,创建新的userInformation
。当学生来来往往时,大多数UPDATE / DELETE / SELECT将在userCourseInformation
上发生。您也可以使用标志(布尔值)来显示是否处于活动状态。这意味着您可以随时返回并查看过去的数据。