02-Modelagem Relacional da StockAPI
Construção do DER da StockAPI
Materiais desta aula
02 - Modelagem Relacional da StockAPI
Disciplina: Desenvolvimento Back-end II
Sumário
- Do domínio ao DER
- Vocabulário: entidade, atributo, chave primária
- Relacionamentos: 1:N e N:N
- Chave estrangeira
- O DER oficial da StockAPI
- Convenções de nomenclatura
1. Do domínio ao DER
Na aula anterior, cada dupla mapeou informalmente as entidades de um domínio de negócio. Hoje formalizamos esse raciocínio com uma ferramenta padrão da indústria: o DER — Diagrama Entidade-Relacionamento.
Um DER mostra, antes de qualquer linha de código:
- quais tabelas o sistema vai ter
- quais dados cada tabela guarda
- como as tabelas se conectam entre si
2. Vocabulário: entidade, atributo, chave primária
| Termo | O que é | Exemplo |
|---|---|---|
| Entidade | Uma tabela — representa um "tipo de coisa" | produtos, clientes |
| Atributo | Uma coluna da tabela | nome, preco, email |
| Chave primária (PK) | A coluna que identifica um registro de forma única | id |
Toda tabela da StockAPI tem uma coluna id como chave primária — é o padrão que vamos seguir o semestre inteiro.
3. Relacionamentos: 1:N e N:N
Um-para-muitos (1:N)
Uma categoria tem muitos produtos, mas cada produto pertence a apenas uma categoria.
categorias (1) ────────── (N) produtos
Isso se resolve com uma chave estrangeira direto na tabela do lado "N": produtos.categoria_id.
Muitos-para-muitos (N:N)
Um pedido tem vários produtos, e um produto aparece em vários pedidos.
Nenhuma das duas tabelas sozinha resolve isso — é preciso uma tabela associativa (também chamada de tabela de junção):
pedidos (1) ── (N) itens_pedido (N) ── (1) produtos
A tabela itens_pedido guarda um par (pedido, produto) por linha, mais informações específicas daquele item (quantidade, preço no momento da compra).
Por que isso importa: é exatamente a peça que ficou em aberto na atividade da aula anterior, quando perguntamos "que tabela adicional seria necessária". Agora ela tem nome — tabela associativa — e um lugar certo no projeto:
itens_pedido.
4. Chave estrangeira
Uma chave estrangeira (FK) é uma coluna que aponta para a chave primária de outra tabela.
produtos.categoria_id → aponta para → categorias.id
É assim que o banco garante consistência: não é possível cadastrar um produto com uma categoria_id que não existe na tabela categorias.
5. O DER oficial da StockAPI
categorias (1)──(N) produtos (1)──(N) itens_pedido (N)──(1) pedidos (N)──(1) clientes
usuarios — tabela independente, usada para autenticação (JWT)
produtos
| Coluna | Tipo | Chave |
|---|---|---|
| id | INT | PK |
| nome | VARCHAR(100) | |
| descricao | TEXT | |
| preco | DECIMAL(10,2) | |
| quantidade_estoque | INT | |
| categoria_id | INT | FK → categorias.id |
categorias
| Coluna | Tipo | Chave |
|---|---|---|
| id | INT | PK |
| nome | VARCHAR(60) |
clientes
| Coluna | Tipo | Chave |
|---|---|---|
| id | INT | PK |
| nome | VARCHAR(100) | |
| VARCHAR(120) | ||
| telefone | VARCHAR(20) |
pedidos
| Coluna | Tipo | Chave |
|---|---|---|
| id | INT | PK |
| cliente_id | INT | FK → clientes.id |
| data_pedido | DATETIME | |
| status | VARCHAR(20) |
itens_pedido
| Coluna | Tipo | Chave |
|---|---|---|
| id | INT | PK |
| pedido_id | INT | FK → pedidos.id |
| produto_id | INT | FK → produtos.id |
| quantidade | INT | |
| preco_unitario | DECIMAL(10,2) |
Repare que itens_pedido tem duas chaves estrangeiras — é isso que resolve o relacionamento N:N entre pedidos e produtos.
6. Convenções de nomenclatura
Para manter o projeto consistente até a conclusão da disciplina:
- Nomes de tabela no plural e em snake_case:
produtos,itens_pedido - Toda tabela tem uma coluna
idcomo chave primária - Chave estrangeira nomeada como
entidade_id:categoria_id,cliente_id - Nomes em português, minúsculo, sem acento e sem espaço
Para a próxima aula
03 — Conectando ao MySQL. Vamos instalar o MySQL, criar o banco stockapi a partir do DER de hoje, e fazer a primeira conexão pelo Node.js usando o pacote mysql2.