10.4 - Construindo a Base — Tabelas, Colunas e Linhas
Já decidimos que nosso QG Supabase vai usar o estilo Relacional, aquele das tabelas organizadinhas, tipo planilhas superpoderosas. Agora, vamos aprender a construir a estrutura dessas tabelas.
Pensa que estamos projetando uma casa. Antes de sair levantando parede, a gente precisa definir os cômodos (quartos, sala, cozinha) e o que vai ter dentro de cada um, certo?
No mundo dos bancos de dados, é parecido. Precisamos definir:
Quais "coisas" queremos guardar? (As Entidades)
Quais características dessas "coisas" são importantes? (Os Atributos)
Depois, transformamos isso na estrutura do nosso banco:
Onde guardamos cada tipo de "coisa"? (As Tabelas)
Como chamamos cada característica na tabela? (As Colunas/Campos)
Como chamamos cada "coisa" individual guardada? (As Linhas/Registros)
Vamos desvendar cada um desses!
Entidades: As "Coisas" do Nosso Mundo 🌍
Entidade é qualquer objeto, conceito ou evento do mundo real sobre o qual queremos guardar informações. Geralmente, é um substantivo.
Pensa no projeto que você quer criar:
Mini Rede Social: Quais são as "coisas" importantes?
Usuarios
,Posts
,Comentarios
,Likes
...Catálogo de Jogos:
Jogos
,Plataformas
(PC, PS5, Xbox),Generos
(Ação, RPG),Avaliacoes
...Lista de Tarefas:
Tarefas
,Usuarios
,Categorias
...
Cada uma dessas "coisas" é uma Entidade. É o assunto principal que vamos armazenar.
Atributos: As Características das "Coisas" 🏷️
Beleza, já sabemos o que queremos guardar (as Entidades). Agora, quais informações sobre cada uma delas são relevantes? Essas características são os Atributos.
Vamos pegar a entidade Usuario
de uma rede social:
Quais atributos um usuário tem?
Nome
,Email
,Senha
(criptografada, claro!),DataDeNascimento
,FotoDePerfil
(o link pra ela),NumeroDeSeguidores
...
E a entidade Post
?
TextoDoPost
,DataDePublicacao
,UsuarioQuePostou
(aqui tem uma conexão!),NumeroDeLikes
...
E a entidade Jogo
?
Titulo
,AnoDeLancamento
,Genero
,Plataforma
,Descricao
,CapaDoJogo
...
Os atributos são os detalhes que descrevem cada entidade.
Tabelas: As "Planilhas" do Banco de Dados 📊
Agora sim, vamos pro banco de dados! Cada Entidade que definimos geralmente vira uma Tabela no nosso banco Supabase (PostgreSQL).
A Tabela é a estrutura onde vamos organizar os dados de um tipo específico de entidade.
Entidade
Usuario
-> Tabelausuarios
Entidade
Post
-> Tabelaposts
Entidade
Jogo
-> Tabelajogos
(Usamos nomes no plural e em minúsculo por convenção, fica mais organizado!)
Dentro do Supabase, você vai usar o Table Editor pra criar essas tabelas.
Colunas (Campos): As Características na Tabela 🏷️➡️📊
E os Atributos? Eles viram as Colunas (ou Campos) da nossa tabela!
Se a entidade Usuario
tem os atributos Nome
, Email
e DataDeNascimento
, a tabela usuarios
vai ter as colunas nome
, email
e data_nascimento
.
Cada coluna guarda um tipo específico de informação sobre a entidade.
Linhas (Registros): Cada "Coisa" Guardada 📝
E cada "coisa" individual que a gente guarda na tabela? Cada usuário específico, cada post específico, cada jogo específico? Isso é uma Linha (ou Registro).
Na tabela usuarios
acima:
A primeira linha representa o usuário "João Silva".
A segunda linha representa a usuária "Maria Souza".
Cada linha contém os valores dos atributos (colunas) para aquela instância específica da entidade.
Tipos de Dados: Que Tipo de Info Cabe Aqui? 🤔🔢🔤📅✅
Muito importante! Quando criamos uma coluna na nossa tabela, precisamos dizer pro banco de dados que tipo de informação ele pode guardar ali. Isso ajuda a manter a organização e a evitar erros (tipo guardar um texto onde deveria ter um número).
Esses são os Tipos de Dados. Os mais comuns que vamos usar no Supabase (PostgreSQL) são:
Texto:
text
: Para textos de tamanho variável, sem limite prático (bom pra descrições longas, posts).varchar(n)
: Para textos com um limite máximo den
caracteres (bom pra nomes, emails, títulos curtos). Ex:varchar(100)
guarda até 100 caracteres.
Números:
int
ouinteger
: Para números inteiros (sem casas decimais), como idade, quantidade, IDs. Ex:10
,-5
,1500
.bigint
: Para inteiros MUITO grandes.numeric(p, s)
oudecimal(p, s)
: Para números com casas decimais, como preço, notas.p
é o total de dígitos es
é quantos ficam depois da vírgula. Ex:numeric(10, 2)
guarda um número como12345678.99
.real
oufloat
: Para números decimais com precisão aproximada (menos usado para dinheiro, mas comum em cálculos científicos).
Datas e Horas:
date
: Guarda só a data (Ano-Mês-Dia). Ex:2025-06-03
.time
: Guarda só a hora (Hora:Minuto:Segundo). Ex:14:30:00
.timestamp
outimestamptz
: Guarda data E hora juntos. Otimestamptz
(com timezone) é geralmente o mais recomendado no Supabase, pois ele lida bem com fusos horários diferentes. Ex:2025-06-03 14:30:00+00
.
Lógico (Booleano):
boolean
: Guarda apenas dois valores:true
(verdadeiro) oufalse
(falso). Perfeito para marcar coisas comotarefa_concluida
,usuario_ativo
,post_publicado
.
Identificador Único:
uuid
: Um identificador único universal. O Supabase gosta de usaruuid
como chave primária (veremos no próximo capítulo!) porque é super difícil de repetir, mesmo entre tabelas diferentes.
Por que isso importa?
Organização: Garante que cada coluna tenha o tipo certo de dado.
Validação: O banco não deixa você colocar "batata" numa coluna de número.
Eficiência: O banco sabe como guardar e buscar cada tipo de dado da forma mais rápida.
Cálculos Corretos: Você só pode somar números com números, não números com texto.
Quando você for criar suas colunas no Table Editor do Supabase, você vai escolher um desses tipos!
Ufa! Bastante coisa, né? Mas agora você já sabe como pensar na estrutura do seu banco:
Defina as Entidades (as coisas).
Liste os Atributos (as características) de cada entidade.
Crie as Tabelas (uma pra cada entidade).
Defina as Colunas (uma pra cada atributo), escolhendo o Tipo de Dado correto.
As Linhas serão os dados que você vai inserir depois!
No próximo capítulo, vamos falar das Chaves Mestras (Primária e Estrangeira), que são essenciais pra identificar unicamente cada linha e pra conectar nossas tabelas. Bora lá descobrir esses segredos?
Last updated