SQL数据库(Django) - 将表B中的所有记录与表A中的每个记录相关联

时间:2015-09-28 22:10:29

标签: mysql django database

我在Django工作,但这个问题一般适用于任何数据库。

在我的模型中,我有一个UserProfile表。另一个表UserQA包含question_text的字段和question_answer的字段。这个模型的问题是我需要一个ManyToMany关系,每个问题有两个longint的开销,而且每个用户都会复制question_text。

基本上,要求是:

  1. 用户可以通过添加自己的问题做出贡献的问题表
  2. 为每个用户的每个问题存储1个字符答案(Y / N / O / Null)
  3. 2.1如果我想要一些问题以获得更复杂的答案,有没有办法扩展这个?

    这似乎是一个容易解决的问题,但我无法弄明白......我想这样做的方式似乎非常低效,是否有更好的方法?

    谢谢!

1 个答案:

答案 0 :(得分:1)

您需要另一个型号,可以是Question。最终的结果将是:

class User(models.Model):
    user_name = models.CharField(...)

class Question(models.Model):
    question_text = models.CharField(...)

class UserAnswer(models.Model):
    question = models.ForeignKey(Question)
    user = models.ForeignKey(User)
    answer = models.CharField(...)

如果您想要更复杂的答案,例如特定值,值列表,您可以再创建一个模型:

class QuestionAlternative(models.Model):
    question = models.ForeignKey(Question)
    value = models.CharField(...)

然后重新定义UserAnswer

class UserAnswer(models.Model):
    question = models.ForeignKey(Question)
    user = models.ForeignKey(User)
    answer = models.ForeignKey(QuestionAlternative)

有了这个,您将在一个地方Questions,每个问题一个UserAnswer,以及QuestionAlternative他们必须存在多少次。不担心ForeignKey字段,它们不是开销,而是构建漂亮,可重用的结构。