SQL 查询帮助 - 多项选择测试评分
假设我有一个 Student 表,它有一个 int ID。 我有一组固定的 10 个多项选择题,有 5 个可能的答案。 我有一个标准化答案表,其中包含问题 id、Student.answer (1-5) 和 Student.ID
我正在尝试编写一个查询,该查询将返回超过特定百分比的所有分数。 为此,我编写了一个简单的 UDF,它接受 Student.answers 和正确答案,因此它有 20 个参数。
我开始想知道是否最好对答案表进行非规范化,将其带入我的应用程序并让我的应用程序进行评分。
有人曾经处理过这样的事情并且有洞察力吗?
Say I have a Student table, it's got an int ID. I have a fixed set of 10 multiple choice questions with 5 possible answers. I have a normalized answer table that has the question id, the Student.answer (1-5) and the Student.ID
I'm trying to write a single query that will return all scores over a certain pecentage. To this end I wrote a simple UDF that accepts the Student.answers and the correct answer, so it has 20 parameters.
I'm starting to wonder if it's better to denormalize the answer table, bring it into my applcation and let my application do the scoring.
Anyone ever tackle something like this and have insight?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
从长远来看,您正在谈论的架构可能会变得非常麻烦,如果您需要更改问题,则意味着您正在使用的 UDF 需要进行更多更改。
我认为您可能可以在代码中进行分析,而不必对数据库进行反规范化。 非规范化还可能导致不灵活,或者至少增加未来的更新费用。
The architecture you are talking about could become very cumbersome in the long run, and if you need to change the questions it means more changes to the UDF you are using.
I would think you could probably do your analysis in code without necessarily de-normalizing your database. De-normalization could also lend to inflexibility, or at least added expense to update, down the road.
如果我正确理解你的模式和问题,那么这样的事情怎么样:
例如,应该选择分数为 7 或更高的学生。 只需根据您的目的调整 where 子句即可。
If I understand your schema and question correctly, how about something like this:
That should select the students with a score of 7 or more, for example. Just adjust the where clause for your purposes.
我可能会将其留给您的应用程序来执行评分。 查看 Jeff Atwood 的也许标准化并不正常。
I would probably leave it up to your application to perform the scoring. Check out Maybe Normalizing Isn't Normal by Jeff Atwood.
这个查询应该很容易......假设您在问题表中存储了正确的答案。 你确实在问题表中存储了正确答案,对吗?
This query should be quite easy... assuming you have the correct answer stored in the question table. You do have the correct answer stored in the question table, right?
非规范化通常被认为是最后的手段。 这个问题似乎与很常见的调查应用程序非常相似。 如果没有看到你的数据模型,很难提出解决方案,但我会说这绝对是可能的。 我想知道为什么该函数需要 20 个参数?
在大多数情况下,基于关系集的解决方案会更简单、更快。
Denormalization is generally considered a last resort. The problem seems very similar to survey applications, which are very common. Without seeing your data model, it's difficult to propose a solution, but I will say that it is definitely possible. I'm wondering why you need 20 parameters to that function?
A relational set-based solution will be simpler and faster in most cases.
没办法,你肯定想保持正常化。 这甚至不是那么难的查询。
基本上,您需要将学生的正确答案与该问题的总答案连接起来,然后进行计数。 这将为您提供正确的百分比。 对每个学生都这样做,并将最小正确百分比放入 where 子句中。
No way, you definitely want to keep it normalized. It's not even that hard of a query.
Basically, you want to left join the students correct answers with the total answers for that question, and do a count. This will give you the percent correct. Do that for each student, and put the minimum percent correct in a where clause.