数据库模型最佳实践 - 即调查

时间:2012-04-05 10:10:41

标签: database django

有了这两个课程,我总是怀疑哪个是“连接”它们的最佳实践(如果有的话)

问题

class Question(models.Model):
    text = models.CharField('Question',max_length=120)
    created = models.DateTimeField(auto_now_add=True)
    opens = models.DateTimeField()
    closes = models.DateTimeField()

答案

class Answer(models.Model):
    text =  models.CharField('Answer',max_length=120)
    votes = models.IntegerField(default=0)

错误 - 我可以将此行添加到答案(这是复制/粘贴错误):

answers = models.ForeignKey(Answer)

修改

answers = models.ManyToManyField(Answer)

我可以将此行添加到答案:

question = models.ForeignKey(Question)

我想知道它是否真的无关紧要,或者我应该考虑不同的方面。

谢谢!

2 个答案:

答案 0 :(得分:2)

class Question: 
    answer = models.ForeignKey(Answer)
  

“这个特殊问题只有一个可能的答案”。


class Answer: 
    question = models.ForeignKey(Question)
  

“这个答案仅属于一个特定问题,但该问题可能有多个单独的答案”


class Answer:
    question = models.ManyToManyField(Question)
  

“这个特定的答案是多个问题的答案。所以问题可以有多个单独的答案”


class Question:
    answers = modes.ManyToManyField(Answer)
  

“这个问题有多个不同的答案。答案也可以属于多个问题。” [最佳方法]


问题必须有答案。你没有回答(通常)回答多个问题,相反,答案回答了一个特定的问题,但可能有多个答案(例如来自不同的用户)。所以我选4。

答案 1 :(得分:1)

answers = models.ForeignKey(Answer)

question = models.ForeignKey(Question)

这些不等同。第一个(假设你的意思是第一个应该在Question上意味着一个问题只有一个答案,但答案有一个以上的问题 - 猜测这不是你想要的。

第二个意思是答案只有一个问题而且问题将有多个答案,这可能是你想要的答案。默认情况下,这将向Question添加一个answer_set字段,其中包含所有问题答案。