【发布时间】:2017-12-12 17:57:59
【问题描述】:
我有一个网站,其中有一个讨论论坛。所有问题都有唯一 ID,答案也有唯一 ID,外键引用问题 ID。
我有一个用户登录。使用ajax,我可以发送数据(upvote/downvote,QID/AID,用户名)。但是很少有问题。
每当用户重新登录时,我希望当他打开一个问题时,应该显示他以前的赞成票和反对票。
用户不能多次赞成/反对同一个问题。就像他将一个问题投票给 +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 为他们的问题和答案投票实现的东西。
【问题讨论】:
-
您不能只将 questionid/answer id 和 userid 设为唯一约束吗?
-
越来越多的人用 PHP 标记 Python 问题。我不明白为什么。
-
您的意思是创建另一个表,其属性为 (QID/AID, username)?
-
既不是python也不是php,只是一个数据库结构问题。我可以在 python 或 php 中做同样的事情。还是谢谢
-
您已经在存储信息,所以添加一个唯一约束,表格将不允许插入额外的投票。
标签: mysql django database database-design