假设我有一个Student表,它有一个int ID。 我有一组固定的10个多项选择题,有5个可能的答案。 我有一个标准化的答案表,其中包含问题ID,Student.answer(1-5)和Student.ID

我正在尝试编写一个查询,该查询将返回一定百分比的所有分数。 为此,我编写了一个简单的UDF,它接受Student.answers和正确的答案,因此它具有20个参数。

我开始怀疑对答案表进行非规范化是否更好,将其放入我的应用程序中,然后让我的应用程序进行评分。

任何人都可以解决这样的事情并拥有洞察力吗?

===============>>#1 票数:2 已采纳

如果我正确理解了您的架构并提出了疑问,那么这样的事情怎么样:

select student_name, score
from students
  join (select student_answers.student_id, count(*) as score
        from student_answers, answer_key
        group by student_id
        where student_answers.question_id = answer_key.question_id
          and student_answers.answer = answer_key.answer)
  as student_scores on students.student_id = student_scores.student_id
where score >= 7
order by score, student_name

例如,应该选择分数为7或更高的学生。 只需根据您的目的调整where子句。

===============>>#2 票数:1

我可能会留给您的应用程序来执行评分。 请查看Jeff Atwood的“ 也许规范化不是正常”

===============>>#3 票数:0

从长远来看,您所讨论的体系结构可能会变得非常繁琐,并且如果您需要更改问题,则意味着您正在使用的UDF会有更多更改。

我认为您可能可以在代码中进行分析,而不必对数据库进行非规范化。 非规范化还可能导致灵活性不足,或者至少增加了更新的费用。

===============>>#4 票数:0

绝对不可能,您绝对要保持其标准化。 甚至没有那么难查询。

基本上,您想让学生将正确答案与该问题的总答案结合起来,然后计算一次。 这将为您提供正确的百分比。 对每个学生进行此操作,然后在where子句中输入最小的正确百分比。

===============>>#5 票数:0

非正规化通常被认为是不得已的方法。 这个问题似乎与非常普遍的调查应用程序非常相似。 没有看到您的数据模型,很难提出解决方案,但是我会说这绝对是可能的。 我想知道为什么您需要该功能20个参数?

在大多数情况下,基于关系集的解决方案将更简单,更快。

===============>>#6 票数:0

这个查询应该很容易...假设您在问题表中存储了正确的答案。 您确实在问题表中存储了正确答案,对吗?

  ask by Webjedi translate from so

未解决问题?本站智能推荐: