数据库
首页 > 数据库> > mysql – 如何构建一个允许投票类似于stackoverflow的数据库?

mysql – 如何构建一个允许投票类似于stackoverflow的数据库?

作者:互联网

我是数据库和Web开发的新手,但我正在尽我所能,通过创建自己的动态网站来学习我的方式.我正在逐步采用它,目前正在设计纸上的数据模型.我想知道如何构建一个允许投票的网站数据库,就像stackoverflow一样?如果有一个包含问题列表的表,则用户创建的每个问题都会添加到此表中.不能简单地在这张桌子上有一个字段来计票,因为那样一个人可以拥有无​​限制的投票权吗?所以应该有一个连接到另一个表的密钥,该表计算投票并跟踪用户,因此他们不能投票两次,对吗?如果这是真的,那就是我感到困惑的部分.每个答案也可以投票.这是否意味着当用户提交答案时,除了将答案添加到可能是针对每个问题的答案的单独表格之外,模型还必须在运行时动态生成每个答案的新表格以跟踪所有答案这些票?

请注意,我并没有具体询问stackoverflow是如何做到的,而是用户体验的概念是如何工作的.

我还想做的一件事是查询单个用户的活动,所以如果必须为每个提交的数据动态创建所有这些表,那么随着时间的推移创建表的垃圾负载,不会是真的很慢,必须解析每个表,以检查特定用户是否提交了任何数据或投票?

有没有更好的方法来做这个,有人可以用非专业术语来解释?不需要特定的代码……我可以在以后的时间里找到它.我现在正在理论化,并建立一个纸模型以便以后工作.

编辑:哦,我明白了.当我想到数据库表时,我认为在excel类似的电子表格中,如果我的理解是错误的,请纠正我.因此,网站范围内的每个投票都在一张桌子上(在电子表格中垂直列出),每个投票都有一行数据(水平),将投票链接到各种所有者(用户和问题或答案)?那是对的吗?我说问题或答案是因为我不理解将它们都作为投票属性(不确定这是否是正确的术语)而不是为答案和问题创建两个单独的投票数据的情况.被投票.基本上我看到它的方式,每一行代表一个投票,有3个字段,1.值(1或-1),2.从谁(用户名),3.到什么(问题或答案).

解决方法:

你必须看看所有的元素.基本上你有

Questions
Users
Answers
Votes

用户与问题和答案以及投票相关联,因此您将需要足够的外键来处理此问题或连接这些的子表.比如你可以

tblQuestions
    questid
    question
    userid

然后

tblAnswer
    Answer
    answerid
    userid
    questid 
    accepted (to flag as accepted answer)

最后

tblVote
    vote (up or down)
    questid
    answerid
    userid

用户表非常简单,有趣的部分发生在幕后逻辑中.这显然是一个非常粗略的布局,还需要考虑很多其他事情,并且有很多方法可以完成表格布局.

标签:mysql,database,ruby,schema,voting
来源: https://codeday.me/bug/20190626/1291553.html