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)