2016-01-22 102 views
0

我很困惑,以決定是否使用ForeignKey或ManyToManyField。django模型設計 - ManyToMany或ForeignKey

假設我正在爲要求門票訪問事件的事件構建應用程序,並且代表可能會根據他們所購買的門票類別獲得一些優惠券。我可能有以下類別:

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) 

我認爲我可以從兩個設計中實現我所需要的,但是想要了解這兩種設計的後果。那麼當考慮性能,存儲,傳統風格等方面時,哪種設計會獲得更多的選票。任何人都可以在做出決定時點亮一些。

感謝

+0

您的兩個選項在功能上並不相同,所以後果無關緊要,因爲其中一個選項不起作用。請記住,外鍵_只能保存一個值_而多對多具有_幾個值_ – Anentropic

+0

我知道。我的意思是說,我有這兩種選擇,並且說明了我正在使用的這種情況。我想知道哪一個更適合我的情況。 – ManikandanV

+0

您目前沒有兩個選項:您有一個選項和其他沒有意義的選項 – Anentropic

回答

0

I'll說,這種模式由於你說的話:

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


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

曲子,一個coupone能有多少票,並且許多用戶可以有一個相關的相同優惠券。不要看到neccesary只能使用一個參數,當你可以根據設計需要使用它們。希望我的意見有幫助。

+0

優惠券也可以映射到一張或多張門票。所以票= models.ManyToManyField(Ticket)更合適,不是嗎?由於它是一個或多個,這個設計也很好.. – ManikandanV