【问题标题】:Database Design: ordered many-to-many relationship数据库设计:有序的多对多关系
【发布时间】:2011-04-13 08:19:06
【问题描述】:

在 Django 中,我有以下模型:

class Pink(models.Model):
    ...

class White(models.Model):
    ...
    pinks = models.ManyToManyField(Pink)
    ...



在某些时候,我需要在White 中定义Pinks 的排序 (为了有White1.pinks: P1, P2, P3 而不是随机的White1.pinks: P2, P3, P1, 所以我创建了

class PinkInWhite(models.Model):
    pink = models.ForeignKey(Pink)
    white = models.ForeignKey(White)
    position = models.PositiveIntegerField("pink's position inside this white")

    class Meta:
        ordering = ['white','position']



问题 1:这是更好的解决方案吗?

问题 2: 这显然是多余的:我的 White 模型中仍然有一个 pinks 字段,因为我在其他不需要排序的情况下需要它。我可以保留它,还是删除它更好,并始终使用PinkInWhite 关系模型?




(模型名称是虚构的。为了简化问题,我没有使用模型的真实姓名,谈论 X 先生和 Y 先生无助于阅读。 ..)

【问题讨论】:

    标签: database django database-design django-models


    【解决方案1】:

    这取决于您对预期用途的明确定义。

    如果您只是在寻找一组有序的白色粉红色,您可以将所有东西都放在一个表中,避免使用连接表 PinkInWhite

    但是,如果您将来可能想要除红色以外的其他色调,那么将粉红色直接绑定到白色就太受限制了。只需将白色保留为白色,并创建一个连接表,将粉色与适当的白色(带有排序)联系起来。然后你就可以灵活地制作蓝色、黄色等等。

    但是对您的问题的简短回答,您所拥有的将是可用的。

    【讨论】:

    猜你喜欢
    • 2012-09-30
    • 2011-05-03
    • 2011-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-16
    相关资源
    最近更新 更多