django模型设计 - ManyToMany或ForeignKey

时间:2016-01-22 12:23:33

标签: django django-models foreign-keys many-to-many

我很难决定是否使用ForeignKey或ManyToManyField。

假设我正在构建一个活动的应用程序,该活动要求获得访问活动的门票,并且代表可以根据他们所采用的门票类别获得一些优惠券。我可能会有以下课程:

class Coupon(models.Model):
    name = models.CharField()
    event = models.ForeignKey(Event)
    created_by = models.ForeignKey(User)
    expired_time = models.DateTimeField()
    description = models.TextField()
    created_at = models.DateTimeField()


class CouponTicketMap(models.Model):
    coupon = models.ForeignKey(Coupon)
    tickets = models.ManyToManyField(Ticket)


class CouponUserMap(models.Model):
    coupon = models.ForeignKey(Coupon)
    users = models.ManyToManyField(User)
  • 组织者可以将优惠券映射到一张或多张门票。

  • 或者他可以映射到一些选定的或随机的用户。

(我不需要中间表中的额外字段,这就是我在这里没有使用through的原因。)

我可以将2nd3rd模型重新设计为

class CouponTicketMap(models.Model):
    coupon = models.ForeignKey(Coupon)
    tickets = models.ForeignKey(Ticket)


class CouponUserMap(models.Model):
    coupon = models.ForeignKey(Coupon)
    users = models.ForeignKey(User)

我认为我可以从两种设计中实现我所需要的,但是想要了解这两种设计的后果。因此,在考虑性能,存储,传统风格等方面时,哪种设计会获得更多选票。任何人都可以做出决定。

由于

1 个答案:

答案 0 :(得分:0)

我会说这个模型是因为你说的话:

class CouponTicketMap(models.Model):
    coupon = models.ForeignKey(Coupon)
    tickets = models.ForeignKey(Ticket)


class CouponUserMap(models.Model):
    coupon = models.ForeignKey(Coupon)
    users = models.ManyToManyField(User)

Cuz,一个偶像可以有很多门票,很多用户都可以拥有相同的优惠券。当你可以根据设计需要使用它们时,不要只看到一个参数。希望我的意见有所帮助。