2016-04-13 10 views
2

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) 

Antwort

1

Ich denke, es hängt davon ab, wie erweiterbar Sie es haben wollen. Wenn Sie dies tun, können Sie neue Aktivitäten hinzufügen, ohne sich um die Aktualisierung der gesamten Datenbank kümmern zu müssen. Es würde die Logik für die Eingabe und den Handel etwas schwieriger machen, aber nicht so viel. Option 2 wäre schwieriger zu erweitern, aber wenn Sie sich darüber keine Sorgen machen, ist es ein viel einfacherer Weg, damit insgesamt umzugehen.

Ich würde persönlich die Option 1 wählen.