gpt4 book ai didi

mysql - 讨论论坛中赞成票/反对票的数据库设计?

转载 作者:搜寻专家 更新时间:2023-10-30 20:03:55 24 4
gpt4 key购买 nike

我有一个网站,其中有一个讨论论坛。所有问题都有唯一 ID,答案也有唯一 ID,外键引用问题 ID。

我有一个用户登录。使用 ajax,我可以发送数据(赞成票/反对票,QID/AID,用户名)。但是几乎没有问题。

  1. 每当用户重新登录时,我希望当他打开一个问题时,应该显示他之前的赞成票和反对票。

  2. 用户不能对同一问题多次投赞成票/投反对票。就像如果他对一个问题投了 +1 票,他只能投反对票,而不能再次投赞成票。

根据我的解决方案。我正在考虑维护一个表,其中用户名是主键,另一个属性是他所做的所有赞成票和反对票的列表。示例:

(username, array)
(baqir, up_A001 up_A050 down_Q011 up_Q123)

每当用户登录时,我都会获取这个数组并确保用户之前的所有赞成票和反对票都保持原样。如果有新的投票,我将其添加到数组中。

有没有更好的解决方案?

附言不需要,但我当前的数据库结构。

class Question(models.Model):
QID = models.CharField( default="",max_length=1000, primary_key=True)
title = models.CharField(max_length=30, default="")
description = models.CharField(max_length=1055, default="")
date = models.DateTimeField(default=datetime.now, blank=True)
username = models.CharField(max_length=6, default="")
votes = models.IntegerField(default=0)
approved = models.BooleanField(default=False)

def __str__(self):
return self.title

class Answer(models.Model):
AID = models.CharField(max_length=1000, default="", primary_key=True)
QID = models.ForeignKey(Question,on_delete=None)
description = models.CharField(max_length=1055, default="")
date = models.DateTimeField(default=datetime.now, blank=True)
username = models.CharField(max_length=6, default="")
votes = models.IntegerField(default=0)
approved = models.BooleanField(default=False)

def __str__(self):
return self.AID

我正在使用 Django。我基本上想要 stackoverflow 为他们的问题和答案投票实现的任何东西。

最佳答案

什么阵法的人,你们在说什么?你为每个 Q/A 或每个用户制作另一个表,或者一个你只链接两件事的表,即用户和 Q/A 及其可以重复键的投票(这个表没有主键)。任何类似数组的东西都是时间和精力的损失,无论如何它都违反了良好的数据库设计规则。

表格保存投票的例子:

Table votes:
UID | QID | AID | VOTE

因此,您将每个用户与他/她投票的每个问题或答案联系起来。 QID 或 AID 可以为 NULL。当你遇到某个问题时,你只需检查表投票是否有任何关于它的说法以及与之相关的答案。如果当前 QID 和 UID 匹配并且您得到结果,您只需相应地操作即可。

如果您有很多用户,这可能会很慢,但基本上会很好。

第二种解决方案是将您的问题/答案与另一个表联系起来,只保留做了某事(投票赞成/反对)的用户。这将使 DB 看起来更困惑,但是当您的用户给出 Q 及其答案时,您只需检查此表是否有关于所述访问者的信息。如果我不够清楚,我会重复每个 Q 和/或 A 的新表格。

您可以反向应用相同的技术,即将用户连接到一个表,该表包含用户投票的所有 Q/A,这可能是保持秩序和效率的最佳方式。因此,每次用户访问任何 Q 页面时,您都会检查他/她是否有该 Q 的任何历史记录。

没有数组,没有废话。只需一个额外请求即可检查当前查看的 Q/A 的状态。

关于mysql - 讨论论坛中赞成票/反对票的数据库设计?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44987661/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com