Mรณdulo 2 ยท Ciclo Comum ยท IN02 ยท Aula 2 de 11
Banco de Dados I
Conceitos, Modelagem e SQL
๐Ÿ“ฆ Modelo Conceitual
๐Ÿ—‚๏ธ Modelo Lรณgico
โš™๏ธ Modelo Fรญsico
๐Ÿ˜ PostgreSQL
๐Ÿ“ SQL DDL
๐Ÿ”‘ Constraints
โฑ๏ธ Daily โ€” 15 Minutos
O que vocรช fez? O que vai fazer? Algum impedimento?
15:00
โœ… O que fiz ๐ŸŽฏ O que vou fazer ๐Ÿšง Impedimentos ๐Ÿ“ฆ Progresso do projeto
๐Ÿ“‹ Agenda da Aula 2
Estrutura e objetivos da aula de hoje

๐Ÿ• Bloco 1 โ€” Fundamentos de Banco de Dados (20 min)

Conceitos de BD, SGBD, modelos conceitual, lรณgico e fรญsico.

๐Ÿ•‘ Bloco 2 โ€” Modelagem e SQL DDL (30 min)

Entidades, relacionamentos, tipos de dados, CREATE TABLE e constraints.

๐Ÿ•’ Bloco 3 โ€” Prรกtica com PostgreSQL (30 min)

Criaรงรฃo de schema real, definiรงรฃo de PK/FK, NOT NULL e UNIQUE.

๐ŸŽฏ Objetivo da Aula

Ao final, o aluno deve criar um banco de dados com tabelas, tipos e constraints usando SQL DDL.

O que รฉ um Banco de Dados?
Por que nรฃo basta uma planilha?

๐Ÿ“ O que รฉ?

Coleรงรฃo organizada de dados persistentes, estruturados de forma que possam ser acessados, gerenciados e atualizados com eficiรชncia.

๐Ÿค” Por que precisamos?

  • Mรบltiplos usuรกrios simultรขneos
  • Integridade e consistรชncia dos dados
  • Consultas complexas e rรกpidas
  • Persistรชncia, backup e recuperaรงรฃo

๐Ÿ“ฑ Exemplos do dia a dia

Instagram (posts/likes), Spotify (playlists), iFood (pedidos), sistemas bancรกrios, cadastros de alunos no Inteli.

๐Ÿ“ˆ Evoluรงรฃo do armazenamento

๐Ÿ“„
Arquivo .txt
Simples, sem estrutura
๐Ÿ“Š
Planilha Excel
Organizado, mas limitado
๐Ÿ˜
Banco de Dados Relacional
SQL, transaรงรตes, integridade
โ˜๏ธ
Cloud Database
Escala global, replicaรงรฃo
SGBD โ€” Sistema Gerenciador de Banco de Dados
O software que fica entre a aplicaรงรฃo e os dados
๐Ÿ–ฅ๏ธ
Aplicaรงรฃo
Node.js / Python
SQL Query
๐Ÿ˜
SGBD
PostgreSQL
Processa
โš™๏ธ
Motor SQL
Planner / Executor
Lรช/Escreve
๐Ÿ’พ
Arquivos em disco
Pรกginas de dados

๐Ÿ” Gerencia acesso

Controla quem pode ler, escrever ou administrar cada objeto. Autenticaรงรฃo e autorizaรงรฃo por usuรกrio e role.

โœ… Garante integridade

Constraints (PK, FK, NOT NULL, UNIQUE) impedem que dados invรกlidos entrem no banco.

๐Ÿ”„ Controla transaรงรตes

ACID: Atomicidade, Consistรชncia, Isolamento, Durabilidade. Ou tudo funciona, ou nada รฉ salvo.

๐Ÿ“ฆ Faz backups

Recuperaรงรฃo em caso de falha com WAL (Write-Ahead Log) e snapshots periรณdicos.

Modelagem โ€” O Processo em 3 Etapas
Do conceito ao banco real
๐Ÿ“ฆ
Modelo Conceitual โ€” O QUE
Diagrama ER ยท Entidades e Relacionamentos
Independente de tecnologia. Foco nos dados do domรญnio: o que existe e como se relaciona.
โฌ‡๏ธ Mapeamento para tabelas
๐Ÿ—‚๏ธ
Modelo Lรณgico โ€” COMO
Tabelas, Colunas, Chaves Primรกrias e Estrangeiras
Define a estrutura das tabelas e suas relaรงรตes. Ainda independente do SGBD escolhido.
โฌ‡๏ธ Implementaรงรฃo no SGBD
โš™๏ธ
Modelo Fรญsico โ€” EM QUAL BANCO
SQL DDL ยท CREATE TABLE ยท Tipos de dados PostgreSQL
Cรณdigo SQL especรญfico para o SGBD. Inclui tipos, รญndices, partiรงรตes e otimizaรงรตes.
Entidades, Atributos e Relacionamentos
Os blocos de construรงรฃo do Diagrama ER
USUARIO
id PK
nome
email
senha
faz
PEDIDO
id PK
data
status
total
contรฉm
PRODUTO
id PK
nome
preco
estoque

๐ŸŸฆ Entidade

Substantivo โ€” algo com existรชncia prรณpria no domรญnio do sistema. Ex.: USUARIO, PEDIDO, PRODUTO

๐Ÿ”ท Atributo

Caracterรญstica de uma entidade. Ex.: nome, email, preรงo. O atributo id com PK identifica cada linha unicamente.

๐Ÿ”— Relacionamento

Verbo entre entidades. "USUARIO faz PEDIDO" ยท "PEDIDO contรฉm PRODUTO". Implementado com Foreign Keys.

Modelo Lรณgico โ€” Tabelas e Colunas
Estrutura da tabela usuarios
Coluna Tipo Constraint Descriรงรฃo
id SERIAL PRIMARY KEY Identificador รบnico
nome VARCHAR(100) NOT NULL Nome completo
email VARCHAR(200) UNIQUE NOT NULL Email de login
senha VARCHAR(255) NOT NULL Hash da senha
criado_em TIMESTAMP DEFAULT NOW() Data de criaรงรฃo
Diagrama ER โ€” Notaรงรฃo de Chen
Quadrado, losango e oval โ€” e a regra do N:N
id nome USUARIO 1 faz N id data PEDIDO N contรฉm M quantidade nome preco PRODUTO

๐Ÿ”ฃ Sรญmbolos da notaรงรฃo

Quadrado = entidade (substantivo) ยท Losango = relacionamento (verbo) ยท Oval = atributo. Linhas conectam com cardinalidade 1, N, M.

๐Ÿ” Regra do N:N โ€” quadrado em volta do losango

Quando o relacionamento รฉ muitos-para-muitos, ele vira uma tabela associativa com PK prรณpria โ€” e pode carregar atributos como quantidade.

Modelo Lรณgico โ€” Da ER ร s Tabelas
Cada entidade vira tabela ยท 1:N gera FK ยท N:N vira tabela associativa
usuarios
idSERIALPK
nomeVARCHAR(100)
emailVARCHAR(200)UQ
produtos
idSERIALPK
nomeVARCHAR(100)
precoDECIMAL(10,2)
FK usuario_id โ†’ id
FK produto_id โ†’ id
pedidos
idSERIALPK
dataTIMESTAMP
usuario_idINTEGERFK
FK pedido_id โ†’ id
pedido_produto
pedido_idINTEGERPKFK
produto_idINTEGERPKFK
quantidadeINTEGER

๐Ÿ“ Regras de traduรงรฃo

Entidade โ†’ tabela ยท Atributo โ†’ coluna ยท 1:N โ†’ FK no lado muitos (pedidos.usuario_id โ†’ usuarios.id) ยท N:N โ†’ tabela associativa com PK composta.

๐Ÿ” Tabela associativa pedido_produto

Nasce do losango contรฉm com quadrado em volta. Tem PK composta (pedido_id + produto_id) โ€” ambas FKs โ€” e absorve o atributo quantidade do relacionamento.

SQL โ€” Criando as Tabelas
CREATE TABLE para cada tabela do modelo lรณgico
parents.sql โ€” tabelas-pai

children.sql โ€” FK e N:N

REFERENCES cria a FK que liga pedidos.usuario_id โ†’ usuarios.id. Em pedido_produto, a PK composta (pedido_id, produto_id) impede duplicar o mesmo produto no mesmo pedido โ€” e ambas as colunas tambรฉm sรฃo FKs apontando para os pais.

SQL โ€” As 5 Sublinguagens
Cada grupo de comandos tem um propรณsito bem definido
DDL
Data Definition
Define a estrutura do banco
CREATE TABLE
ALTER TABLE
DROP TABLE
DML
Data Manipulation
Manipula registros nas tabelas
INSERT INTO
UPDATE SET
DELETE FROM
DQL
Data Query
Consulta e lรช os dados
SELECT ... FROM
WHERE / ORDER BY
GROUP BY / HAVING
DCL
Data Control
Controla permissรตes de acesso
GRANT SELECT ON
REVOKE INSERT ON
TO / FROM user
TCL
Transaction Control
Gerencia transaรงรตes ACID
BEGIN
COMMIT
ROLLBACK

Esta aula cobre DDL + DML + DQL + DCL + TCL. Cada sublinguagem resolve um problema diferente โ€” juntas formam o SQL completo.

SQL DDL โ€” CREATE TABLE
Transformando o modelo lรณgico em cรณdigo SQL real
schema.sql โ€” PostgreSQL

Tipos de Dados SQL
Escolha o tipo certo para cada coluna
INTEGER / SERIAL
Nรบmeros inteiros
SERIAL รฉ auto-increment โ€” ideal para chaves primรกrias.
id SERIAL PRIMARY KEY
VARCHAR(n) / TEXT
Textos
VARCHAR limita o tamanho. TEXT nรฃo tem limite definido.
nome VARCHAR(100)
DECIMAL(p,s)
Decimais precisos
p = total de dรญgitos, s = casas decimais. Use para dinheiro.
preco DECIMAL(10,2)
BOOLEAN
Verdadeiro / Falso
Aceita true/false ou 1/0. รštil para flags de estado.
ativo BOOLEAN DEFAULT true
TIMESTAMP / DATE
Data e hora
TIMESTAMP inclui hora. DATE รฉ apenas data. NOW() retorna o instante atual.
criado_em TIMESTAMP
JSON / JSONB
Dados semi-estruturados
JSONB รฉ indexรกvel e mais rรกpido. รštil para metadados flexรญveis.
config JSONB
Constraints โ€” Regras de Integridade
O banco garante que sรณ dados vรกlidos entram
PRIMARY KEY
Identifica unicamente cada linha
NOT NULL
Campo obrigatรณrio
UNIQUE
Valor nรฃo pode repetir
FOREIGN KEY
Liga tabelas, garante integridade referencial
DEFAULT
Valor padrรฃo quando nรฃo informado

๐Ÿ’ก Por que constraints importam?

Elas garantem que a aplicaรงรฃo nรฃo precise validar tudo manualmente. O banco rejeita automaticamente dados invรกlidos, protegendo a integridade mesmo com bugs no cรณdigo.

DQL โ€” SELECT
Data Query Language ยท Consultando e filtrando dados no banco
queries.sql

๐Ÿ“‹ Resultado

idnomeemail
1Ana Limaana@inteli.edu.br
2Bruno Costabruno@inteli.edu.br
3Carla Souzacarla@inteli.edu.br
4Diego Alvesdiego@inteli.edu.br
5Elena Martinselena@inteli.edu.br
DML โ€” INSERT INTO
Data Manipulation Language ยท Inserindo registros na tabela
dml_insert.sql โ€” PostgreSQL
INSERT bรกsico
Linha รบnica
Especifica colunas explicitamente. Colunas com DEFAULT e SERIAL podem ser omitidas.
INSERT mรบltiplo
Vรกrias linhas de uma vez
Muito mais eficiente que mรบltiplos INSERTs individuais. Um รบnico round-trip ao banco.
INSERT โ€ฆ RETURNING
Retorna o ID gerado
Elimina a necessidade de um SELECT apรณs o INSERT para buscar o id autogerado.
DML โ€” UPDATE e DELETE
Data Manipulation Language ยท Alterando e removendo registros
dml_update_delete.sql
โš ๏ธ UPDATE sem WHERE
Atualiza TODOS os registros
UPDATE usuarios SET ativo = false
Sem WHERE โ†’ todas as linhas sรฃo alteradas. Sempre use WHERE.
๐Ÿšจ DELETE sem WHERE
Apaga TODOS os registros
A tabela fica vazia mas continua existindo. Use TRUNCATE para isso intencionalmente. Sempre use WHERE no DELETE.
โœ… Padrรฃo seguro
Filtre sempre pelo ID
Use WHERE id = $1 em aplicaรงรตes. Nunca confie em input direto do usuรกrio โ€” use prepared statements.
DCL + TCL โ€” Controle e Transaรงรตes
Permissรตes de acesso e operaรงรตes ACID
dcl_tcl.sql โ€” PostgreSQL

๐Ÿ” DCL โ€” Data Control Language

GRANT: concede permissรตes a um usuรกrio ou role
REVOKE: remove permissรตes
Permissรตes granulares: SELECT, INSERT, UPDATE, DELETE, ALL

๐Ÿ”„ TCL โ€” Transaction Control Language

BEGIN: inicia uma transaรงรฃo
COMMIT: confirma permanentemente todas as operaรงรตes
ROLLBACK: desfaz tudo desde o BEGIN
Garante as propriedades ACID

โšก ACID

Atomicity ยท Consistency ยท Isolation ยท Durability

๐Ÿ˜ PostgreSQL
Open-source ยท padrรฃo SQL avanรงado ยท 1996
postgres.sql โ€” PostgreSQL 16

๐Ÿ”ข Auto-increment

SERIAL cria uma sequence automรกtica. Em versรตes novas, GENERATED AS IDENTITY รฉ o padrรฃo SQL.

๐Ÿ“ฆ Tipos avanรงados

JSONB indexรกvel, ARRAY, UUID, INET, tipos geogrรกficos com PostGIS.

๐ŸŽฏ Quando usar

SaaS modernos, dados complexos, mรกxima conformidade com SQL padrรฃo.

๐Ÿฌ MySQL / MariaDB
O mais popular da web ยท LAMP, WordPress ยท 1995
mysql.sql โ€” MySQL 8

๐Ÿ”ข Auto-increment

AUTO_INCREMENT direto na coluna. Nรฃo precisa de sequence separada.

โš™๏ธ Storage Engine

ENGINE=InnoDB suporta FK e transaรงรตes. MyISAM nรฃo suporta โ€” escolha sempre InnoDB.

๐ŸŽฏ Quando usar

Web apps clรกssicos, hospedagem compartilhada, ecossistema PHP/WordPress.

๐Ÿ’พ SQLite
Embedded ยท zero-config ยท um รบnico arquivo ยท 2000
app.db โ€” SQLite 3

๐Ÿ”ข Auto-increment

INTEGER PRIMARY KEY jรก รฉ alias do rowid. AUTOINCREMENT sรณ evita reuso de IDs.

๐ŸŒ€ Tipagem dinรขmica

Apenas 5 storage classes: NULL, INTEGER, REAL, TEXT, BLOB. VARCHAR(100) รฉ ignorado.

๐ŸŽฏ Quando usar

Apps mobile, protรณtipos, testes, banco embarcado em cada instalaรงรฃo.

๐ŸŸฅ SQL Server (T-SQL)
Microsoft ยท stack .NET ยท enterprise ยท 1989
tsql.sql โ€” SQL Server 2022

๐Ÿ”ข Auto-increment

IDENTITY(seed, increment) โ€” IDENTITY(1,1) comeรงa em 1 e soma 1 a cada linha.

๐Ÿ”ค NVARCHAR vs VARCHAR

NVARCHAR guarda Unicode (acentos, emojis); VARCHAR sรณ ASCII estendido. Use NVARCHAR sempre.

๐ŸŽฏ Quando usar

Empresas Microsoft, integraรงรตes com Power BI / Azure, BI corporativo.

๐Ÿ”ด Oracle Database
Enterprise ยท grandes corporaรงรตes ยท bancos / telecom ยท 1979
oracle.sql โ€” Oracle 23ai

๐Ÿ”ข Auto-increment

GENERATED ALWAYS AS IDENTITY (12c+). Antes era SEQUENCE + TRIGGER.

๐Ÿ”ค Tipos prรณprios

VARCHAR2 em vez de VARCHAR, NUMBER(p,s) universal, nรฃo tem BOOLEAN โ€” usa NUMBER(1).

๐ŸŽฏ Quando usar

Sistemas legados, bancos, telecom, casos onde performance e suporte enterprise sรฃo crรญticos.

RM-ODP โ€” As 5 Visรตes do Sistema
ISO/IEC 10746 ยท Como diferentes stakeholders enxergam o sistema
๐Ÿข Enterprise
Propรณsito, regras de negรณcio
โ†’
๐Ÿ“‹ Information
Dados, entidades, relaรงรตes
โ†’
โš™๏ธ Computational
Componentes, interfaces
โ†’
๐Ÿ”ง Engineering
Distribuiรงรฃo, canais, nรณs
โ†’
๐Ÿ’ป Technology
Plataformas, padrรตes

Esta aula: Visรฃo Information โ€” modelamos entidades, atributos e relaรงรตes do minimundo. O banco de dados torna os dados do domรญnio persistentes e consultรกveis.

Esta Aula no RM-ODP
RF, RNF e Artefato desta aula

๐Ÿ“Œ Requisito Funcional

Mapear quais funcionalidades dependem de persistรชncia de dados โ€” definir entidades e atributos do domรญnio.

๐Ÿ“ฆ Artefato

  • ๐Ÿ—บ๏ธ Minimundo do projeto descrito em texto
  • ๐Ÿ“ ER/DER inicial com entidades e relacionamentos
  • ๐Ÿ’พ Primeiros comandos SQL (CREATE TABLE + SELECT)

โš–๏ธ RNF โ€” 8 Eixos ISO/IEC 25010

CONF Confiabilidadeโœ… PK + FK + NOT NULL
SEG Seguranรงaโœ… Acesso controlado ao DB
DES Desempenhoโ†’ รndices nas PKs
SUP Suportabilidadeโ†’ Esquema documentado
CAP Capacidadeโ†’ Volume de dados estimado
Checklist da Aula
O que aprendemos hoje
โœ…
O que รฉ um banco de dados relacional
Coleรงรฃo organizada com integridade, persistรชncia e consultas eficientes
โœ…
Como funciona um SGBD
PostgreSQL: gerencia acesso, integridade, transaรงรตes e backups
โœ…
Modelo Conceitual, Lรณgico e Fรญsico
As 3 etapas da modelagem: ER โ†’ Tabelas โ†’ SQL DDL
โœ…
Entidades, Atributos e Relacionamentos
Substantivos, caracterรญsticas e verbos do domรญnio do sistema
โœ…
CREATE TABLE e tipos de dados
SERIAL, VARCHAR, DECIMAL, BOOLEAN, TIMESTAMP, JSONB
โœ…
Constraints (PK, FK, NOT NULL, UNIQUE)
O banco rejeita dados invรกlidos automaticamente
โœ…
SELECT bรกsico
SELECT, FROM, WHERE, ORDER BY, LIMIT
โžก๏ธ
Prรณxima aula: CRUD completo
INSERT, UPDATE, DELETE e JOINs entre tabelas
๐Ÿš€ Mรฃo na Massa โ€” Crie sua Tabela no Supabase
Modele 1 tabela do problema do seu parceiro ยท ~10 min ยท pequena para caber na aula
๐Ÿ“‹ Passo a passo
  1. Acesse seu projeto em supabase.com
  2. Abra SQL Editor no menu lateral
  3. Identifique 1 entidade pequena do parceiro (ex.: cliente, agendamento, tarefa)
  4. Modele: 3โ€“5 colunas + PK + 1 constraint รบtil
  5. Escreva o CREATE TABLE em PostgreSQL
  6. Execute com Ctrl+Enter (ou botรฃo Run)
  7. Verifique em Table Editor que a tabela apareceu
๐Ÿ’ก Exemplo de referรชncia
Supabase SQL Editor โ€” PostgreSQL

โฑ๏ธ Escopo

1 tabela sรณ. 3โ€“5 colunas. Nรฃo precisa modelar o domรญnio inteiro โ€” escolha algo que caiba em 10 minutos.

๐Ÿ”— Use o que aprendemos

SERIAL PRIMARY KEY ยท VARCHAR(N) NOT NULL ยท TIMESTAMP DEFAULT NOW() ยท UNIQUE.

โœ… Critรฉrio

Tabela criada com sucesso e visรญvel no Table Editor. Bonus: insira 1 linha com INSERT INTO.

๐Ÿ—„๏ธ
Banco de Dados: o alicerce de tudo!
Com o modelo conceitual, lรณgico e o SQL DDL em mรฃos, vocรช jรก consegue estruturar qualquer sistema. Na prรณxima aula: CRUD completo e JOINs.
โœ… Banco de Dados Relacional
โœ… SGBD PostgreSQL
โœ… Modelo Conceitual
โœ… Modelo Lรณgico
โœ… Modelo Fรญsico
โœ… CREATE TABLE
โœ… Constraints
โœ… SELECT Bรกsico
Mรณdulo 2 ยท Ciclo Comum ยท Aula 2 de 11