mysql - Django,当 99% 的列是默认值时,向表添加列的最佳实践是什么?

标签 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 行添加一列是浪费资源。

还有其他最好的方法来处理此类问题吗?

最佳答案

如果您使用 Django 附带的身份验证和管理应用程序,如果您没有这些应用程序用来指示用户和管理员状态的列:“is_active”、“is_staff”和“is_superuser”.. 即使您使用 Django Auth 的自定义用户模型功能,您的自定义用户模型仍然需要具有这些 bool 字段。因此,如果您正在使用这些应用程序,您不妨使用它们提供的字段。

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

关于mysql - Django,当 99% 的列是默认值时,向表添加列的最佳实践是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54880082/

相关文章:

django - 使用 Django 和 x-editable 将更改保存到数据库

python - Django 中的菜单选项卡突出显示问题

mysql - AppHarbor MySql Yocto 连接错误

mysql - 将 mysql 转储文本文件恢复到数据库

python - 将回车转换为 HTML 换行符

python - 来自 ManyToMany 关系的查询集

python - Django ORM,通过模型继承按类型过滤对象

Django 。如何减少每次使用后的优惠券总数

php - 如何在 MAMP Pro 上升级 phpMyAdmin?

javascript - 我想在表中显示以下数据