私はさまざまなアクティビティを追加できるDjangoアプリケーションを作成しています。一部のアクティビティには、それ自身にのみ適用可能なフィールドがあります。Djangoモデルデザイン - 1つまたは複数のテーブル
オプション1(複数のテーブル)はいくつかの点ではよりクリーンであるようですが、私はすべてのアクティビティをリストビューに表示したいので、オプション2をより魅力的にします。また、特定のアクティビティを追加するモデルフォームも用意されています。
他のオプションより明らかに優れているオプションの1つですか、それとも優先事項ですか?
オプション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
またはオプション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)