Ich erstelle eine Django App, wo der Benutzer verschiedene Aktivitäten hinzufügen kann. Einige Aktivitäten haben Felder, die nur für sich selbst gelten.Django Modell Design - 1 oder mehrere Tabellen
Option 1 (mehrere Tabellen) scheint in einigen Aspekten sauberer zu sein, aber ich möchte alle Aktivitäten in einer Listview zeigen, die Option 2 attraktiver macht. Ich werde auch ein Modellformular haben, wo sie eine bestimmte Aktivität hinzufügen.
Ist eine der Optionen deutlich besser als die andere oder ist es eine Frage der Präferenz?
Option 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
Oder Option 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)