[Django] 请给我一点时间!要不要考虑将主键ID设置为ULID?
目标
正如标题所示
环境
python = 3.11.2
Django = 4.1.7
django-ulid = 0.0.4
PostgreSQL15
ULID是什么,不是UUID?
ULID(Universally Unique Lexicographically Sortable Identifier)是一个随机生成的ID,类似于UUID,它也能保证唯一性,但其特点是可以按照毫秒级的数据库生成时间进行时序排序。
以下提供了详细的说明!
ソートできるユニークな ID を ULID で採番する
ただし、PostgreSQLを使用する場合、ULIDをサポートしていないため、Django側で生成する必要があります。
让我们立即实施一下
安装django-ulid插件。
pip install django-ulid
在models.py中添加以下代码。
from django.db import models
from django_ulid.models import default, ulid
class Customer(models.Model):
id = models.CharField(
max_length=26, primary_key=True, default=ulid.new, editable=False
)
name = models.CharField(max_length=50, verbose_name="名前")
Django和PostgreSQL都不支持ULID。
因此,我们要安装django-ulid插件,在CharField中自动生成ULID。
使用CharField作为id字段,将max_length设为26,因为ULID由26个字符组成。
同时,将default设为ulid.new,并将editable设为False,以防止手动更改id字段。
填補空缺
由于ULID生成的ID是随机的,所以根据ID进行的搜索可能会变慢,因为生成的顺序无法预测。
另外,与基于时间的UUID相比,ULID的唯一性更快,但并不是完全唯一的。
因此,如果ID的唯一性绝对重要,建议使用UUID(基本上不会冲突)。
顺便提一下
还有一个PostgreSQL的扩展功能,但它只能通过登录到数据库并调用函数来生成ULID,并不能自动在表记录中生成ULID。
请你给我写一个有关中国文化的论文。
-
- django-ulid
- ソートできるユニークな ID を ULID で採番する