【发布时间】:2020-06-05 09:48:51
【问题描述】:
我正在构建一个测验系统,但我不确定如何在数据库端构建它。
假设测验系统是针对树种的。用户将看到一张树图片(一个条目),并且必须从 6 个列表中选择正确的物种(5 个随机,1 个正确)。 测验中有250种。
我需要解决的两个主要问题:
1) 用户不应再看到相同的树条目。 2) 树条目的所有者,必须能够查看其条目中所有投票的统计信息:因此他将看到其他用户在其条目中输入的每个树种的投票数。因为用户会在投票中出错,所以条目的所有者会看到这些错误的统计信息以及他的条目被误认为是哪个错误物种。
一个简单的方法是创建几个表:
- 用户表
- 树表:用户表的外键。这是用户必须投票的条目。一位用户可以创建一个条目。
- 投票表:用户表和树表都有外键。该表将保存每一个投票,包括用户在该投票中选择的树种名称。
所以要解决我的问题:
1) 防止用户再次看到相同的条目:在获取“树”以呈现新树进行投票之前,运行第一个查询以获取该用户的所有“投票”以排除用户已经投票的“树” .
2) 查看自己条目的投票统计:获取指向自己条目的所有投票,然后按所选树种计算统计信息。
这种方法很简单,但困扰我的是必须为每张选票创建一个条目。可以有很多。我对数据库设计没有经验,所以不确定这是否是个问题。
这种替代方式会更好吗:
1) 跟踪已经投票的条目:在单个记录(每个用户)上,在单个字段中保存所有投票的 id,因此无需运行查询来预取每个投票条目,只需从单个记录中获取它们场地。不确定这是否可行,以及单个字段的限制大小是多少,可能会持有数千票,实际上是投票的条目的 ID。
2) 因此,条目的所有者可以查看条目统计信息:在每个树条目上,创建 250 列,每个树种一个,并根据投票的内容在每个列上增加一个 INT。因此,要获取每个条目的统计信息,只需获取一条记录并执行计算客户端即可。
最好的方法是什么?有没有应该避免的?
【问题讨论】:
-
问是有道理的,应该根据基础避免1。但是您应该参考已发布的设计方法/教科书/参考来证明其合理性,或者合理的答案只是用定制的教程重写一个并且没有给出任何研究。另外——我们不能告诉任何人什么是工程中的“最佳”,除非他们足够详细地定义它并提供足够的相关细节以使所有人都同意估值。而且它混乱地依赖于细节。即使可以做到这一点,这里的问题也太多了。然后你需要解释为什么你不能自己评估。