O Prisma ORM é uma ferramenta poderosa que simplifica o acesso e a modelagem de dados em aplicações modernas. Um dos seus principais recursos é a capacidade de definir relacionamentos entre modelos no schema, permitindo representar com precisão as ligações entre os dados da sua aplicação.
Com exemplos práticos e explicações objetivas, você entenderá como estruturar esses relacionamentos e aplicá-los de forma eficiente na sua base de código.
Relacionamento One-to-One (Um para Um)
Um relacionamento One-to-One define que um registro em uma tabela está associado exclusivamente a um único registro em outra tabela.
Esse tipo de relação é útil quando há uma associação única entre dois modelos, como entre usuário e perfil ou cliente e documento de identificação.
Exemplo no schema do Prisma:
model User {
id Int @id @default(autoincrement())
profile Profile?
}
model Profile {
id Int @id @default(autoincrement())
user User @relation(fields: [userId], references: [id])
userId Int @unique
}
No exemplo acima, cada Profile
está associado a um único User
, e vice-versa. O uso de @unique
garante que não haja mais de um perfil vinculado ao mesmo usuário.
Relacionamento One-to-Many (Um para Muitos)
O relacionamento One-to-Many é o mais comum em sistemas de banco de dados. Ele permite que um registro esteja associado a vários outros registros em outra tabela.
Exemplos típicos incluem usuários e posts, categorias e produtos, ou clientes e pedidos.
Exemplo no schema do Prisma:
model User {
id Int @id @default(autoincrement())
posts Post[]
}
model Post {
id Int @id @default(autoincrement())
author User @relation(fields: [authorId], references: [id])
authorId Int
}
Aqui, um User
pode ter vários registros em Post
, mas cada Post
pertence a apenas um User
. A chave estrangeira (authorId
) está localizada no modelo Post
.
Relacionamento Many-to-Many (Muitos para Muitos)
Um relacionamento Many-to-Many ocorre quando múltiplos registros em uma tabela estão associados a múltiplos registros em outra tabela.
Casos de uso comuns incluem usuários e grupos, produtos e categorias, ou autores e livros.
No Prisma, esse tipo de relação é implementado usando uma tabela intermediária (join table), que é gerenciada automaticamente pelo Prisma Client.
Exemplo no schema do Prisma:
model User {
id Int @id @default(autoincrement())
projects Project[]
}
model Project {
id Int @id @default(autoincrement())
users User[]
}
Internamente, o Prisma cria uma tabela chamada _ProjectToUser
para armazenar as relações entre projetos e usuários, facilitando consultas e manipulações.
Self-Relations (Relações Auto-Referenciais)
Uma Self-Relation acontece quando um modelo possui uma relação com ele mesmo. Esse tipo de estrutura é útil para representar hierarquias, árvores genealógicas ou comentários aninhados.
Exemplo no schema do Prisma:
model Category {
id Int @id @default(autoincrement())
name String
parent Category? @relation("CategoryParent")
parentId Int?
subcategories Category[] @relation("CategoryParent", fields: [parentId], references: [id])
}
Nesse caso, uma categoria pode ter uma categoria pai (parent
) e várias filhas (subcategories
). O nome "CategoryParent"
ajuda a identificar a relação e conectar corretamente os campos.
Conclusão
Os relacionamentos são fundamentais para estruturar corretamente os dados em qualquer sistema. Com o Prisma Schema, você tem à disposição uma sintaxe clara e intuitiva para definir relações complexas com simplicidade.
Seja qual for o tipo de aplicação que você está desenvolvendo, saber utilizar os relacionamentos no Prisma — sejam eles One-to-One, One-to-Many, Many-to-Many ou Self-Relations — vai ajudar a construir um sistema mais organizado, escalável e performático.
One comment