Генератор UUID v4 і v7
До ста ідентифікаторів за раз, з верхнім регістром і варіантом без дефісів.
Дає ідентифікатори, які можна одразу вставити в код
Потрібен пакет ідентифікаторів для сіду, фікстур або тестових даних: тут вони генеруються сотнею за раз, кожен копіюється окремо. Є обидві версії, які реально використовують: v4 повністю випадковий, v7 містить час створення на початку й тому природно сортується.
У PHP стандартної функції для UUID немає, тому беруть ramsey/uuid або symfony/uid. Laravel генерує UUID через Str::uuid() і Str::orderedUuid(), а трейт HasUuids дає моделі ключі автоматично. Для нових таблиць v7 майже завжди краще за v4: значення зростають у часі, тому індекс не фрагментується.
use Symfony\Component\Uid\Uuid;
$random = Uuid::v4(); // 550e8400-e29b-41d4-a716-446655440000
$sorted = Uuid::v7(); // час усередині, зростає монотонно
// В Eloquent
use Illuminate\Database\Eloquent\Concerns\HasUuids;
class Order extends Model
{
use HasUuids; // впорядковані UUID для первинного ключа
}
Що питають про цей інструмент
v7, якщо таблиця буде рости. Випадковий v4 вставляється у випадкове місце індексу, що фрагментує B-дерево й уповільнює запис на великих обʼємах. v7 має час на початку, тому нові рядки додаються в кінець: поведінка близька до автоінкремента, але без розкриття кількості записів.
Практично ні. У v4 сто двадцять два випадкові біти: щоб ймовірність колізії стала помітною, потрібні мільярди значень. У v7 випадковості менше, але додається мілісекундна позначка часу, тож у межах одного застосунку колізія теж нереальна.
У PostgreSQL є тип uuid, він займає 16 байтів і індексується швидко: використовуйте його. У MySQL вибір між BINARY(16), який економить місце, і CHAR(36), який читається в консолі. Для таблиць до кількох мільйонів рядків різниця несуттєва, беріть читабельний варіант.