【问题标题】:The relationship among models模型之间的关系
【发布时间】:2016-05-12 05:16:44
【问题描述】:

我想设计一个简单的应用程序,每个用户将针对 30 个问题进行相同的调查,对于每个问题,他或她将选择是或否。

据我所知,有 3 种关系:一对一、多对一、多对多。

但是,我不知道哪种方式最适合设置关系。

这是我的想法:

User:
+ id (PK)
+ name

Question:
+ id (PK)
+ content

Choice:
+ user (Foreign Key) //Many-To-One or One-To-One ? (1) 
+ question (Foreign Key) //Many-To-One or One-To-One ? (2) 

我被困在这里是因为我不确定:

(1) 1 位用户可以做出多个选择(多对一)或 1 位用户只能为每个问题做出 1 个选择(一对一)?

(2) 1 个问题只有 1 个选项(是/否)或 1 个问题对于该用户可以是“是”,而对于另一个用户可以是“否”。

谢谢!

【问题讨论】:

    标签: django database


    【解决方案1】:

    您的要求如下:

    1. 有30个问题供许多用户选择。
    2. 对于一个问题,用户有两个选择,是或否。

    所以

    from django.db import models
    class Choice(models.Model):
        user = models.ForeignKey(User)
        question = models.ForeignKey(Question)
        choice = models.BooleanField()
    

    【讨论】:

    • 谢谢 Bill.He!美好的一天!
    【解决方案2】:

    User 和 Choice 之间的关系是简单的一对多,因为一个用户可以针对多个问题有多个选择。

    出于同样的原因,用户和问题之间的关系也是如此。

    此外,可能令人困惑的是,Choice 模型的用户和问题字段都应该有unique_together 约束,因为每个用户每个问题应该只有一个选择。

    更多关于model meta options and unique together

    【讨论】:

    • 感谢您的快速回答。如果我的下一个问题太无知,请原谅我:据我了解,用户和问题处于一对多关系,因为 1 个用户有很多问题对象。但是,我想知道是否有一种方法可以只创建 30 个问题对象并在许多用户中重用它们。如果这是可能的,那么许多用户可以使用 1 个问题。在这种情况下,用户和问题之间的关系将是多对多?另外,Choice 和 Question 是什么关系?
    • 你对此太困惑了,我不知道如何让你更清楚。在数据建模方面总是存在意见问题,但在我看来,除了选择模型之外,问题和用户似乎完全没有关系,选择模型显示了用户对问题做出的选择。话虽如此,您可以通过多种方式对此进行建模,这取决于许多因素,例如您将使用的查询等。例如,您可以使用多对多关系,其中 Choice 是直通模型。如果你应该这样做,在这种情况下没人能说得通。
    • 谢谢Wtower!我将从您给我的模型元选项中阅读更多内容并尝试您的建议!美好的一天!
    猜你喜欢
    • 2014-12-02
    • 2012-09-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-27
    • 1970-01-01
    • 2021-01-24
    相关资源
    最近更新 更多