Database design 问答系统的数据库结构
我正在构建一个测验系统,但我不确定如何在数据库方面构建它 假设测验系统是针对树木物种的。用户将收到一张树木图片(条目),并且必须从6个列表中选择正确的物种(5个随机,1个正确)。 测验中有250个物种 我需要解决的两个主要问题: 1) 用户不应再看到相同的树条目。 2) 树条目的所有者必须能够看到其条目上所有投票的统计信息:因此他将看到其他用户在其条目上输入的每个树种的投票数。因为用户会在投票中出错,所以条目所有者将看到这些错误的统计信息,以及条目被误认为是哪种不正确的物种 一种简单的方法是创建几个表:Database design 问答系统的数据库结构,database-design,cloudkit,Database Design,Cloudkit,我正在构建一个测验系统,但我不确定如何在数据库方面构建它 假设测验系统是针对树木物种的。用户将收到一张树木图片(条目),并且必须从6个列表中选择正确的物种(5个随机,1个正确)。 测验中有250个物种 我需要解决的两个主要问题: 1) 用户不应再看到相同的树条目。 2) 树条目的所有者必须能够看到其条目上所有投票的统计信息:因此他将看到其他用户在其条目上输入的每个树种的投票数。因为用户会在投票中出错,所以条目所有者将看到这些错误的统计信息,以及条目被误认为是哪种不正确的物种 一种简单的方法是创建
- 用户表
- Trees表:具有用户表的外键。这是用户必须投票的项目。一个用户可以创建一个条目
- 投票表:具有用户表和树表的外键。此表将保存每次投票,包括用户在该投票中选择的树种名称
最好的方法是什么?有没有一个应该避免的方法?最好的方法肯定是您描述的第一个方法-有一个用户表、一个树表和一个投票表 其他的选择是可怕的和不可扩展的-按顺序排列:
每个数据库都有适当的数据类型来存储多个数据点,称为表。有些数据库还支持XML、Json或数组等类型,但应谨慎使用,因为大多数情况下,它们是比添加另一个表更糟糕的选择
如果您想再添加一个选项,则必须在其中添加一列。
宽表在存储具有许多不同属性的实体时非常有用,即使这样,也只有在其他备选方案用尽后才应该考虑宽表,因为它们通常是维护的噩梦
正如你所说的,在使用第一个规范化设计时要考虑的事情有:
SUM
,COUNT
等,可能不需要获取所有行并逐行计算此数据有理由问,根据基本情况应该避免1。但是你应该参考一个出版的设计方法/教科书/参考书来证明,或者一个合理的答案只是用一个定制的教程重写一个&没有给出任何研究。此外,我们不能告诉任何人什么是工程中的“最佳”,除非他们对其进行了足够详细的定义,并提供了足够的相关细节,使所有人都能就估价达成一致。而且它在混乱中依赖于细节。即使可以这样做,这里的问题也太多了。然后你需要解释为什么你不能自己评估。谢谢你分享你的经验,非常感谢。很高兴帮助:-)
SELECT TOP 1 Id, Picture, Name -- return only one record
FROM Trees
WHERE NOT EXIST
(
SELECT 1
FROM Votes
WHERE Votes.TreeId = Trees.TreeId
AND UserId = @UserId
)
ORDER BY NewID(); -- random order