【问题标题】:Best practices Boolean vs Integer in SQLSQL 中的最佳实践 Boolean vs Integer
【发布时间】:2014-10-28 07:12:14
【问题描述】:

我想就这种情况提出问题。 假设我有 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 唯一事件,然后是 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')

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

【问题讨论】:

    标签: mysql sql django django-models


    【解决方案1】:

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

    如果您想获得所有 CityNomad 事件,您可以像这样获得它们:

    Event.objects.filter(citynomad_event__isnull=False)
    

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

    【讨论】:

    • 哇,谢谢!不知道django可以做到这一点,非常感谢!
    猜你喜欢
    • 2010-10-04
    • 2023-03-04
    • 2011-05-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多