Sobre Universally Unique Identifier uuid

Posted on: July 31, 2025 02:54 PM

Posted by: Renato

Categories: uuid Dicas developer Laravel

Views: 159

Sobre Universally Unique Identifier uuid

Usar UUID (Universally Unique Identifier) como chave primária em bancos de dados pode ser uma escolha estratégica, dependendo do cenário. Aqui vai um balanço dos prós e contras pra te ajudar a avaliar:

Hoje

Quais os pos e contras usar em banco de dados uuid?

Ótima pergunta, Renato! Usar UUID (Universally Unique Identifier) como chave primária em bancos de dados pode ser uma escolha estratégica, dependendo do cenário. Aqui vai um balanço dos prós e contras pra te ajudar a avaliar:

✅ Vantagens do uso de UUID

  • Unicidade global: Ideal para sistemas distribuídos ou microsserviços, pois você pode gerar IDs únicos sem precisar consultar o banco.

  • Evita colisões: Especialmente útil em ambientes onde várias instâncias geram dados simultaneamente.

  • Independência da ordem de inserção: Diferente de IDs auto-incrementais, o UUID não depende do momento da inserção no banco.

  • Privacidade e segurança: Dificulta a engenharia reversa ou exposição de quantos registros existem (como id=1000).

❌ Desvantagens do uso de UUID

  • Performance: Pode degradar a performance em índices, especialmente em bancos que usam B-tree, por ser menos sequencial.

  • Espaço de armazenamento: Um UUID ocupa 16 bytes (ou 36 caracteres se armazenado como string), bem mais que um INT (normalmente 4 bytes).

  • Leitura e depuração: Difícil de memorizar, digitar e entender em logs ou testes manuais.

  • Desordem nos dados: Se o UUID for aleatório, pode causar fragmentação nos índices e queda no desempenho de consultas.

👉 Alternativas e mitigação

  • Usar UUIDs ordenados (como UUID v1 ou v6) ajuda a preservar parte da performance de escrita sequencial.

  • Armazenar UUID como binário (BINARY(16)) ao invés de string pode economizar espaço e melhorar performance.

Se você estiver lidando com sistemas distribuídos, replicação ou precisa de IDs gerados fora do banco, o UUID pode ser uma ótima pedida. Mas pra sistemas locais com alto volume de dados e consultas intensas, talvez o clássico INT seja mais eficiente.

Num sistema de chamados, usar UUID como identificador pode ser uma excelente escolha — especialmente se você espera crescer, integrar com outros serviços ou distribuir o sistema em múltiplos servidores. Vamos olhar com mais carinho pro seu cenário, Renato:

🧾 Por que UUID funciona bem em sistemas de chamados

  • Distribuição garantida: Sistemas de atendimento muitas vezes operam com múltiplas instâncias (ex: apps móveis, APIs), e o UUID permite que cada chamado seja criado com um ID único localmente — sem esperar pelo banco.

  • Integrações seguras: Se o sistema precisar expor IDs publicamente (em URLs, e-mails ou integrações com terceiros), o UUID é mais seguro que um INT sequencial, já que não revela a quantidade total de registros.

  • Sincronização simplificada: Se você tiver múltiplos bancos ou precisar replicar dados, o UUID ajuda a evitar colisões na hora de mesclar os chamados.

⚠️ Mas vale cuidar de alguns pontos...

  • Performance de busca: Use UUIDs ordenáveis (ex: UUID v1 ou UUID v7) pra reduzir fragmentação e melhorar eficiência dos índices.

  • Formato de armazenamento: Prefira armazenar como BINARY(16) ao invés de CHAR(36) — isso reduz uso de espaço e melhora performance.

  • Legibilidade nos logs: Uma alternativa é manter um campo extra com um identificador legível (ex: ticket-2024-00023) para facilitar suporte e rastreamento.

Se você estiver construindo um sistema com potencial para escalar ou integrar com outros serviços, UUID pode te salvar muitas dores de cabeça. E esse exemplo que você mandou — "uuid": "698729af-7071-4b40-983b-a26adb86c925" — está com cara de UUID v4 (aleatório), o que é bom pra segurança, mas pode gerar fragmentação se usado como chave primária.

No Laravel, trabalhar com UUID como chave primária é super viável, e vou te mostrar um exemplo bem prático de como configurar isso direitinho. Bora lá!

⚙️ Passo a passo para usar UUID como ID no Laravel

1. Criar a migration da tabela

php artisan make:migration create_chamados_table
 

No arquivo da migration:

Schema::create('chamados', function (Blueprint $table) {
    $table->uuid('id')->primary(); // Chave primária como UUID
    $table->string('titulo');
    $table->text('descricao');
    $table->timestamps();
});
 

💡 Dica: se quiser armazenar o UUID em formato binário, pode usar $table->binary('id') e ajustar o model.

2. Configurar o Model

No Chamado.php (model):

use Illuminate\Support\Str;

class Chamado extends Model
{
    public $incrementing = false; // Desativa incremento automático
    protected $keyType = 'string'; // UUID é string

    protected static function boot()
    {
        parent::boot();

        static::creating(function ($model) {
            if (empty($model->{$model->getKeyName()})) {
                $model->{$model->getKeyName()} = (string) Str::uuid();
            }
        });
    }
}

 

.

3. Criar registros

 

Chamado::create([
    'titulo' => 'Erro no sistema',
    'descricao' => 'Usuário não consegue logar.',
]);

Isso já salva seu chamado com um UUID no campo id, tipo: 698729af-7071-4b40-983b-a26adb86c925

🧪 Testando na prática

Você pode ver os dados com:

 

Chamado::all()->pluck('id');

3

Share

Donate to Site


About Author

Renato

Developer

Add a Comment

Blog Search


Categories

Laravel (227) PHP (151) linux (124) Variados (110) Dicas (58) ubuntu (58) developer (48) postgresql (45) database (44) sql (42) Docker (32) front-end (31) mysql (31) devops (26) webdev (24) programming (23) aws (19) tecnologia (19) eloquent (19) dba (18) OUTROS (17) backend (16) laravelphp (16) debian (12) dev (12) reactjs (10) 100DaysOfCode (10) git (10) react (10) nginx (9) inteligencia-artificial (9) PHP Swoole (9) node (9) javascript (9) linux-tools (8) Architecture (8) vue (7) github (7) ciencia (7) nodejs (6) api (6) vscode (6) webservice (6) jwt (6) vim (6) windows (6) arquitetura (6) authentication (5) ia (5) reactnative (5) rest (5) DevSecOps (5) servers (5) apache (5) macox (5) s3 (5) Kubernetes (4) gitlab (4) opensource (4) mariadb (4) jenkins (4) shell (4) mongodb (4) angular (4) autenticacao (4) wsl (4) Swoole (4) lets-encrypt (4) query (4) Raspberry (4) angularjs (4) inteligenciadedados (4) Padrao de design (4) artigo (4) google (4) npm (4) openai (4) js (3) mysqli (3) Black Hat (3) RabbitMQ (3) educacao (3) intel (3) CMS (2) sail (3) script (3) performance (3) json (3) authorization (3) phpswoole (3) ddd (3) blade (3) terminal (3) log (3) mac (3) fedora (3) containers (3) ssh (3) bash (3) hardware (3) tests (3) macos (3) web (2) jobs (3) websocket (3) db (3) politica (3) Curisidades (2) Solid (2) zsh (2) Go (2) BigLinux (2) POO (2) LazyVim (2) gource (2) Python (2) Oauth2 (2) android (2) unix (2) magento (2) iot (2) ffmpeg (2) combustivel (2) webhook (2) microservices (2) bancodedados (2) tailwind (2) homeOffice (2) html (2) openswoole (2) artificialintelligence (2) security (2) auth (2) cron (2) phpunit (2) kube (2) multiple_authen (2) policia (2) neovim (2) golang (2) noticias (2) livros (2) Transcribe (2) ElonMusk (2) redis (2) claude (2) ArchLinux (2) java (2) saude (1) seguranca (2) phpfpm (2) autorizacao (2) monitoring (2) laptop (2) gnome (2) powerbi (2) telefonia (2) nvm (2) imagick (2) maps (2) colors (2) Passport (2) JQuery (2) front (1) wine (1) covid19 (0) services (1) phpjasper (1) models (1) kali-linux (1) geojson (1) yarn (1) picpay (1) Monolith (1) banco (1) PNPM (1) Desenvolvedor (1) Structurizr (1) symfony (1) presenter (1) lider (1) guard (1) tensorflow (1) bootstrap (1) nuance (1) historia (1) dropbox (1) traefik (1) bug (1) akitando (1) llm (1) htm (1) transformers (1) cavalotroia (1) odd (1) m1 (1) Error (1) cinnamon (1) repmgr (1) federal (1) ruby (1) AppSec (1) orm (1) ArquiteturaDeSoftware (1) Passwordless (1) memcached (1) flow (1) compression (1) athena (1) Migration (1) workflow (1) cqrs (1) kitematic (1) geospacial (1) yeshua (1) data (1) sonarqube (1) Axios (1) pipelines (1) Mozilla (1) kvm (1) GitOps (1) sqlite (1) podcast (1) n8n (1) LaravelFilament (1) God (1) DesenvolvimentoProfissional (1) sw (1) bigtech (1) postgres (1) NoCookies (1) LeetCode (1) governancadedados (1) prf (1) nosql (1) Lideranca (1) Hackers (1) Bots (1) pytorch (1) nuxt (1) liquid (1) ec2 (1) transaction (1) c4 (1) rancher (1) algoritimo (1) Observability (1) Elasticsearch (1) translate (1) certbot (1) Oh My Zsh (1) ibm (1) escopos (1) usb (1) ckeditor (1) API_KEY_GOOGLE_MAPS (1) Manjaro (1) vicuna (1) coding (1) rust (1) markdown (1) JasperReports (1) Fibonacci (1) community (1) Samurai (1) payment (1) messaging (1) Jesus (1) flutter (1) militar (1) fullsta (1) smartphones (1) automacao (1) Monitor (1) zend (1) spaceship (1) PKCE (1) l2tp (1) Glacier (1) laraveloctane (1) Deus (1) binaural (1) gpt (1) bolsonaro (1) privacidade (1) linkedin (1) documentation (1) brain (1) adb (1) nvidia (1) host (1) ecommerce (1) c4-models (1) altadisponibilidade (1) octane (1) lucena (1) http (1) TypeScript (1) chatgpt (1) idiomas (1) eventdrive (1) uuid (1) restfull (1) aplicativo (1) optimization (1) mapas (1) Fetch (1) collections (1) RustLang (1) matematica (1) Filament (1) compactar (1) paypal (1) microg (1) forcas armadas (1) cor (1) auth (1) modelagemdedados (1) k8s (1) gasolina (1) wsl2 (1) csv (1) soap (1) piada (1) KubeCon (1) zorin-os (1) spring-boot (1) backup (1) playwright (1) Deepin (1) storage (1) benchmark (1) networking (1) Swoole (1) biologia (1) node-red (1) LETSENCRYPT (1) Grunt (1) Diagramas (1) boot (1) haru (1) dracula (1) TrabalhoEmEquipe (1) Brasil (1) queue (1) agi (1) llama (1) hotfix (1) economia (1) transcription (1) cache (1) Amazon (1) October (1) lumen (1) Hyperf (1) replication (1) faceapp (1) vala (1) cloudstack (1) rpi (1) apple (1) oracle (1) iode (1) ffaa (1) vpn (1) MeioAmbiente (1) firefox (1) composer (1) scheduling (1) Asahi (1) pendrive (1) microservice (1) front (1) OOD (0) controllers (0)

New Articles



Get Latest Updates by Email