Mysql - 表结构

时间:2016-02-08 15:22:51

标签: php mysql

我想按如下方式实施计数系统

     test_id   email_id      attemptCount   status   score   subject
        1       a@a1.com           1          Fail     5       C
        1       a@a1.com           1          Pass     72      maths
        1       b@a1.com           1          Pass     62      C

看看,(test_id,email_id, attempt_count, subject)形成了独特的行。

我想为每次测试尝试插入一行。因此,对于same user, same test id, same subject,tryCount必须加1。

我该怎么办?

1)我可以从另一个表中获取密钥(测试ID,电子邮件ID,主题)的最后一次尝试计数

       test_id    email_id    subject   last_attempt 

2)我可以使用触发器自动增加尝试次数。 [我只是在SO帖子中读到这种方式]

3)我必须改变我的表格结构。所以我将为每个主题分别制作表格。因此主键组成为test_id, email_id, attempt_count

还有其他方法可以达到这个目的吗?哪一个是最好的方法?

我觉得我必须重新考虑我的桌面结构。

修改

在单个单元格中有多个值,这是一个好习惯吗?

     test_id  email_id   overallStatus              overallScore  subject
        1      a@a1.com     [pass,fail,fail,pass]   [10,2,3,10]     maths

然后组合(test_id, email_id, subject)只有一行。在这种情况下我不关心attemptCount。

我的目标是我想存储所有用户的所有测试的所有尝试结果。

2 个答案:

答案 0 :(得分:2)

我个人会使用3张桌子。

test,subject和test_result

我有这样的测试

test_id
email_id
//other columns such as date, description, etc

表主题

subject_id (auto_increment)
test_id
attempts
//you can add date and the latest status or score

如果你想要一份报告,这就像一张历史表:

test_result

test_result_id(auto increment)
test_id
subject
status
score

因此,当您在test_result上进行插入时,可以使用+1尝试(来自表主题)更新主题,并且如果要更新该表上的最新结果(以避免在此表上进行查询,可能很长,你也可以这样做)

答案 1 :(得分:0)

您的方法/函数必须以某种编程方法创建,您无法实现所有这些只将数据传递到数据库。

您在test_id上使用auto_increment是正确的,但是您的主键是test_id。

这没有错。