Django,当列的99%为默认值时,向表中添加列的最佳做法是什么?

时间:2019-02-26 07:09:05

标签: mysql django django-models

我想在表中添加一列

class User(models.Model):
    name = models.CharField(max_length=255)
    phone = models.CharField(max_length=255)
    birthday = models.DateField(null=True, blank=True)

现在我要添加

is_admin = models.BooleanField(default=False)

但是只有3位管理员,因此列值的99%为False

我认为只为3行添加一列会浪费资源。

还有另一种解决此类问题的最佳方法吗?

1 个答案:

答案 0 :(得分:1)

如果您使用的是Django随附的Auth和Admin应用程序,那么如果您没有这些应用程序用来指示用户和管理员状态的列,则会破坏所有内容:“ is_active”,“ is_staff”和即使您使用Django Auth的自定义用户模型功能,您的自定义用户模型仍然需要具有这些布尔字段。因此,如果您使用的是这些应用,则最好使用它们提供的字段。

现在,如果您的“ is_admin”标志对Django Admin或Django Auth绝对没有意义,而仅对您自己的应用程序代码有意义,那么您可以将其作为一个简单的布尔列,也可以将其作为外键关系..例如您可以创建一个Administrators模型,其中包含一个返回给User的ForeignKey字段。管理员表中的任何用户都是管理员。因此,您将不会使该字段混乱到您的User表。缺点是,每当您想知道用户是否是管理员时,都必须进行联接。如果您计划在站点上拥有数百万个用户,那么如果您拥有一个管理员,那可能是值得的几百甚至几千,也许不是...