2016-04-13 13 views
2

Kullanıcının çeşitli etkinlikler ekleyebileceği bir Django uygulaması oluşturuyorum. Bazı aktivitelerin sadece kendileri için geçerli olan alanları vardır.Django model tasarımı - 1 veya çoklu tablo

Seçenek 1 (birden çok tablo) bazı yönlerden daha temiz görünüyor, ancak tüm etkinlikleri bir liste görünümünde göstermek istiyorum, bu seçenek 2'yi daha çekici kılar. Belirli bir etkinliği ekledikleri bir model formum da olacak.

Seçeneklerden biri diğerinden açıkça daha iyi mi yoksa tercih mi?

Seçenek 1:

class BaseActivity(models.Model):  
    user = models.ForeignKey(User) 
    date = models.DateField() 
    ave_heart_rate = models.FloatField(validators=[MinValueValidator(0)]) 

    class Meta: 
     abstract = True 

class TennisActivity(BaseActivity): 
    pass # no extra fields 

class GolfActivity(BaseActivity):  
    score = models.IntegerField() #only applicable to golf 

class JogActivity(BaseActivity):  
    distance = models.FloatField() #only applicable to jogging 

Ya seçenek 2:

class BaseActivity(models.Model):  
    activity_choices = (('Tennis', 'tennis'), 
         ('Golf','golf'), 
         ('Jog','jog')) 

    user = models.ForeignKey(User) 
    activity_type = models.Charfield(choices=activity_choices) 
    date = models.DateField() 
    ave_heart_rate = models.FloatField(validators=[MinValueValidator(0)]) 
    score = models.IntegerField(blank=True, null=True) 
    distance = models.FloatField(blank=True, null=True) 

cevap

1

Ben bunu olmak istiyorum nasıl uzayabilir bağlıdır sanırım. Bunu yaparsanız, DB'nin tamamını güncellemeden endişe etmeden yeni aktiviteler ekleyebilirsiniz. Giriş ve işlemenin ardındaki mantığı biraz daha zorlaştırır, ama o kadar değil. Seçenek 2'nin uzatılması daha zor olacaktır, ancak bunun için endişelenmiyorsanız, genel olarak bununla başa çıkmak için daha kolay bir yoldur.

Kişisel olarak seçenek 1'i seçerim.