Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

[Dúvida] Utilização de schema quando há múltiplas "tabelas"

Bom dia! Minha dúvida é, em uma estrutura maior que a do exemplo, sempre definiremos e transacionaremos um único schema?

No exemplo fizemos um schema que em uma alusão a um banco relacional seria a tabela de produtos, onde definimos nome slug e preço desse produto.... Mas e se nosso exemplo tivesse também mais informações de outro contexto, como se fosse uma "tabela" de clientes, como seria essa representação? Definiria e transacionaria um novo schema? Faríamos tudo no mesmo schema e só criaríamos um outro model separado?

1 resposta
solução!

Bom dia Diego, tudo bem?

Em uma estrutura maior que envolva diferentes contextos, como produtos e clientes, o ideal é definir schemas separados para cada tipo de dado. Isso ajuda a manter a organização e a responsabilidade de cada entidade bem delimitada. Cada schema representaria uma parte específica do domínio, como um para produtos e outro para clientes, com seus respectivos campos e regras de validação.

A transação dos dados aconteceria de forma independente para cada schema, mas, se fosse necessário relacionar essas informações, você poderia realizar operações que combinassem dados de ambos, mantendo cada entidade bem encapsulada. Dessa forma, a arquitetura se torna mais modular, facilitando a manutenção e a expansão do sistema.

Exemplo:

from pydantic import BaseModel, Field, EmailStr
from typing import List

# Schema para Produto
class ProdutoSchema(BaseModel):
    nome: str = Field(..., min_length=2, max_length=100)
    slug: str
    preco: float = Field(..., gt=0)

# Schema para Cliente
class ClienteSchema(BaseModel):
    nome: str = Field(..., min_length=2, max_length=100)
    email: EmailStr
    produtos_comprados: List[ProdutoSchema] = []

# Exemplo de uso
produto1 = ProdutoSchema(nome="Camiseta", slug="camiseta-branca", preco=59.90)
produto2 = ProdutoSchema(nome="Tênis", slug="tenis-nike", preco=399.90)

cliente = ClienteSchema(
    nome="João Silva",
    email="joao@email.com",
    produtos_comprados=[produto1, produto2]
)

print(cliente)
  1. Cada entidade (Produto e Cliente) tem seu próprio schema, definindo suas propriedades e validações.

  2. O schema ClienteSchema tem uma lista de produtos comprados, que usa o ProdutoSchema como tipo.

  3. A validação é feita separadamente para cada schema.

  4. Isso facilita a manutenção e permite que cada entidade evolua de forma independente.

Se em algum momento for necessário adicionar mais detalhes aos produtos ou clientes, basta atualizar apenas o schema correspondente, sem impactar o outro.

Espero tê-lo ajudado, bons estudos!