SQL中的最佳实践布尔与整数

时间:2014-10-28 07:12:14

标签: mysql sql django django-models

我想就此案例提出问题。 据说我有3张桌子。

> class Event(models.Model):
>     class Meta:
>         verbose_name = _('Event')
>         verbose_name_plural = _('Events')
> 
>     def __str__(self):
>         return self.name
> 
>     name          = models.CharField(max_length = 255, null = True)
>     description   = models.TextField(null=True)
>    
>     organizer   = models.CharField(max_length=255, null=True)
>     date_from   = models.DateTimeField(null=True)
>     date_to     = models.DateTimeField(null=True)
> 
>     address         = models.ForeignKey('location.Address', null=True, blank=True, related_name="event_address")
>     active = models.BooleanField(default=False)

> class CityNomad(models.Model):
>     class Meta:
>         verbose_name = _('City Nomad')
>         verbose_name_plural = _('City Nomads')
> 
>     uid       = models.IntegerField()
>     event     = models.ForeignKey('event.Event', null=True, blank=True, related_name='citynomad_event')

> class YourSingapore(models.Model):
>     class Meta:
>         verbose_name = _('Your Singapore')
>         verbose_name_plural = _('Your Singapore')
> 
>     event   = models.ForeignKey('event.Event', null=True, blank=True, related_name='citynomad_event')
>     ys_priority = models.IntegerField()

然后我使用django rest框架查看视图,该框架将检索Event,Travelrave only事件,然后仅检索CityNomad事件。

所以我想到了三种方式:

1。在事件模型上插入两列。

is_travelrave = models.BooleanField()

is_citynomad = models.BooleanField()

2。插入一个整数

event_identifier = models.IntegerField()(将1标识为travelrave,将2标识为citynomad)

第3。创建一个名为event_identifier的表(带有id和event_identifier_name)

event_identifier = models.ForeignKey(' event_identifier')

有太多布尔列会影响性能吗? 外键是否有多余?

1 个答案:

答案 0 :(得分:1)

您无需手动执行任何操作。

如果你想获得所有CityNomad活动,你可以这样做:

Event.objects.filter(citynomad_event__isnull=False)

但是你必须注意related_name属性。在YourSingapore - 模型中,它与CityNomad related_name - 属性相同。