Logo Passei Direto
Buscar
Material
páginas com resultados encontrados.
páginas com resultados encontrados.
left-side-bubbles-backgroundright-side-bubbles-background

Experimente o Premium!star struck emoji

Acesse conteúdos dessa e de diversas outras disciplinas.

Libere conteúdos
sem pagar

Ajude estudantes e ganhe conteúdos liberados!

left-side-bubbles-backgroundright-side-bubbles-background

Experimente o Premium!star struck emoji

Acesse conteúdos dessa e de diversas outras disciplinas.

Libere conteúdos
sem pagar

Ajude estudantes e ganhe conteúdos liberados!

left-side-bubbles-backgroundright-side-bubbles-background

Experimente o Premium!star struck emoji

Acesse conteúdos dessa e de diversas outras disciplinas.

Libere conteúdos
sem pagar

Ajude estudantes e ganhe conteúdos liberados!

left-side-bubbles-backgroundright-side-bubbles-background

Experimente o Premium!star struck emoji

Acesse conteúdos dessa e de diversas outras disciplinas.

Libere conteúdos
sem pagar

Ajude estudantes e ganhe conteúdos liberados!

left-side-bubbles-backgroundright-side-bubbles-background

Experimente o Premium!star struck emoji

Acesse conteúdos dessa e de diversas outras disciplinas.

Libere conteúdos
sem pagar

Ajude estudantes e ganhe conteúdos liberados!

left-side-bubbles-backgroundright-side-bubbles-background

Experimente o Premium!star struck emoji

Acesse conteúdos dessa e de diversas outras disciplinas.

Libere conteúdos
sem pagar

Ajude estudantes e ganhe conteúdos liberados!

left-side-bubbles-backgroundright-side-bubbles-background

Experimente o Premium!star struck emoji

Acesse conteúdos dessa e de diversas outras disciplinas.

Libere conteúdos
sem pagar

Ajude estudantes e ganhe conteúdos liberados!

left-side-bubbles-backgroundright-side-bubbles-background

Experimente o Premium!star struck emoji

Acesse conteúdos dessa e de diversas outras disciplinas.

Libere conteúdos
sem pagar

Ajude estudantes e ganhe conteúdos liberados!

left-side-bubbles-backgroundright-side-bubbles-background

Experimente o Premium!star struck emoji

Acesse conteúdos dessa e de diversas outras disciplinas.

Libere conteúdos
sem pagar

Ajude estudantes e ganhe conteúdos liberados!

left-side-bubbles-backgroundright-side-bubbles-background

Experimente o Premium!star struck emoji

Acesse conteúdos dessa e de diversas outras disciplinas.

Libere conteúdos
sem pagar

Ajude estudantes e ganhe conteúdos liberados!

Prévia do material em texto

M
O
D
E
L
A
G
E
M
 D
E
 B
A
N
C
O
 D
E
 D
A
D
O
S
 E
 S
Q
L
Ja
im
e
 W
o
jc
ie
c
h
o
w
s
k
i
Código Logístico
I000034
Fundação Biblioteca Nacional
ISBN 978-65-5821-037-5
9 7 8 6 5 5 8 2 1 0 3 7 5
Modelagem de banco 
de dados e SQL 
Jaime Wojciechowski
IESDE BRASIL
2021
© 2021 – IESDE BRASIL S/A. 
É proibida a reprodução, mesmo parcial, por qualquer processo, sem autorização por escrito do autor e do 
detentor dos direitos autorais.
Projeto de capa: IESDE BRASIL S/A. Imagem da capa: Alexander Supertramp/whiteMocca/Shutterstock
Todos os direitos reservados.
IESDE BRASIL S/A. 
Al. Dr. Carlos de Carvalho, 1.482. CEP: 80730-200 
Batel – Curitiba – PR 
0800 708 88 88 – www.iesde.com.br
CIP-BRASIL. CATALOGAÇÃO NA PUBLICAÇÃO 
SINDICATO NACIONAL DOS EDITORES DE LIVROS, RJ
W828m
Wojciechowski, Jaime
Modelagem de banco de dados e SQL / Jaime Wojciechowski. - 1. ed. 
- Curitiba [PR] : IESDE, 2021.
142 p. : il.
Inclui bibliografia
ISBN 978-65-5821-037-5
1. Banco de dados - Desenvolvimento. 2. Projeto de bancos de dados. 
3. Bancos de dados relacionais. 4. SQL (Linguagem de programação de 
computador). I. Título.
21-71228 CDD: 005.75
CDU: 004.65
Jaime Wojciechowski Doutor em Informática Aplicada em Engenharia Florestal 
pela Universidade Federal do Paraná (UFPR). Mestre 
em Informática Aplicada em Inteligência Artificial e 
graduado em Matemática (bacharelado e licenciatura) 
pela Pontifícia Universidade Católica do Paraná (PUCPR). 
Atua desde 1994 como docente no ensino superior, tendo 
ingressado na UFPR no ano de 2006, instituição na qual 
é professor titular das disciplinas de Análise e Projetos 
de Sistemas, do curso superior de Tecnologia em Análise 
e Desenvolvimento de Sistemas; Modelagem Ágil de 
Software, do curso de Especialização em Desenvolvimento 
Ágil de Software; Aprendizado de Máquina e Laboratório 
de Inteligência Artificial, do curso de Especialização em 
Inteligência Artificial Aplicada; e Sistemas Computacionais 
Aplicados, do curso de Especialização em Manejo 
Florestal. Também é vice-diretor do Setor de Educação 
Profissional e Tecnológica da mesma instituição. Foi 
analista de sistemas em ambiente de desenvolvimento 
de grande porte (mainframe). Trabalhou na área de 
desenvolvimento e treinamento para a formação de 
novos programadores dos bancos Estado do Paraná 
(Banestado), Itaú, Santander Banespa e HSBC Bank Brasil.
SUMÁRIO
Agora é possível acessar os vídeos do livro por 
meio de QR codes (códigos de barras) presentes 
no início de cada seção de capítulo.
Acesse os vídeos automaticamente, direcionando 
a câmera fotográ�ca de seu smartphone ou tablet 
para o QR code.
Em alguns dispositivos é necessário ter instalado 
um leitor de QR code, que pode ser adquirido 
gratuitamente em lojas de aplicativos.
Vídeos
em QR code!
SUMÁRIO
Agora é possível acessar os vídeos do livro por 
meio de QR codes (códigos de barras) presentes 
no início de cada seção de capítulo.
Acesse os vídeos automaticamente, direcionando 
a câmera fotográ�ca de seu smartphone ou tablet 
para o QR code.
Em alguns dispositivos é necessário ter instalado 
um leitor de QR code, que pode ser adquirido 
gratuitamente em lojas de aplicativos.
Vídeos
em QR code!
1 Conceitos gerais de modelagem de banco de dados 9
1.1 Introdução aos bancos de dados 9
1.2 Sistemas gerenciadores de banco de dados (SGBD) 17
1.3 Conceitos gerais de modelagem de dados 25
2 Modelo relacional 36
2.1 Modelo conceitual 36
2.2 Modelo lógico 40
2.3 Primeira forma normal (1FN) 44
2.4 Segunda forma normal (2FN) 48
2.5 Terceira forma normal (3FN) 50
2.6 Relacionamentos entre as tabelas 58
3 Linguagem SQL – DDL 64
3.1 Modelo físico 64
3.2 Criação do modelo físico usando SQL – DDL 70
3.3 Criação do modelo físico no banco de dados PostgreSql 77
4 Linguagem SQL – DML 87
4.1 Comandos SQL para atualização 87
4.2 Comandos SQL para consultas básicas 93
4.3 Comandos SQL para consultas avançadas 106
5 Conceitos avançados de banco de dados 115
5.1 Visões, gatilhos e Stored Procedures 116
5.2 Processamento de transações 124
5.3 Utilização da linguagem SQL na linguagem de 
 programação Java 129
 Resolução das atividades 140
O processo de desenvolvimento de um software abrange 
várias etapas, e cada uma delas contribui para a etapa posterior, 
até a sua finalização. Independentemente do tipo de software e da 
etapa, o desenvolvedor precisa dispor de um repositório no qual os 
dados contidos no problema serão armazenados e manipulados. 
Na indústria de software, os bancos de dados fazem essa função. 
Porém, a utilização dessas estruturas requer que os dados sejam 
organizados de modo que atendam às premissas impostas por 
eles. Para que as informações sejam armazenadas em um banco 
de dados, em primeiro lugar, devemos aplicar algumas técnicas, 
a fim de garantirmos a possibilidade de manipulação dos dados 
sem causar inconsistências, nem produzir resultados errôneos.
Neste livro apresentamos as técnicas de normalização que 
organizam e colocam os dados em uma estrutura compatível 
com os bancos de dados, assim como todos os comandos 
necessários para criarmos um banco que contemple seus diversos 
componentes. Mostramos como acessar de maneira eficiente os 
dados armazenados, atendendo às necessidades do software. 
Sobretudo, a obra expõe os aspectos do gerenciamento das 
informações no banco de dados feito pelo sistema gerenciador de 
banco de dados (SGBD), que não só controla os acessos, como 
também a concorrência das solicitações, impedindo que erros 
sejam cometidos quando há um alto tráfego de dados.
Essas teorias são imprescindíveis para o sucesso de um 
software. Considerando que este é formado por diversos 
componentes, como telas, programas, arquitetura de 
comunicação, entre outros, e pelo próprio banco de dados, a 
boa organização e estruturação dos dados garante grande parte 
do sucesso do software, pois em praticamente todas as funções 
espalhadas nas diversas telas sempre haverá uma interação com o 
banco de dados. Se mal organizado ou com carência de aplicação 
das técnicas corretas, o banco de dados causará grande impacto 
no fluxo de informações não somente em termos de lentidão 
de resposta, mas principalmente de informações erradas sendo 
apresentadas ao usuário. Esses aspectos geram um impacto 
APRESENTAÇÃOVídeo
8 Modelagem de banco de dados e SQL
extremamente negativo para o software, causando depreciação e descrédito 
nas pessoas que efetivamente o utilizarão.
Ainda trouxemos vários aspectos teóricos de embasamento dos conceitos, 
com foco na sua aplicação prática. Descrevemos os comandos que devem ser 
emitidos ao banco de dados, bem como os resultados obtidos, de modo que você 
possa compreender exatamente a forma como o banco emitiu esses resultados.
Ao final do estudo, você será capaz de construir e manusear um banco 
de dados para o software que está desenvolvendo, além de compreender 
efetivamente a interação entre o software e o banco.
Bons estudos!
Conceitos gerais de modelagem de banco de dados 9
1
Conceitos gerais de modelagem 
de banco de dados
Neste capítulo, conheceremos uma importante estrutura utili-
zada em larga escala nos dias de hoje, sem a qual não teria sen-
tido o uso de sistemas de informação. Os bancos de dados estão 
presentes em praticamente todos os sistemas que utilizamos em 
nosso cotidiano.
Abordaremos os principais conceitos necessários para a tarefa 
de modelagem dos dados, com o objetivo de utilizarmos os bancos 
de dados e os softwares conhecidos como sistemas gerenciadores 
de banco de dados (SGBD).
Conheceremos o histórico do surgimento dos bancos de da-
dos, as motivações e quais problemas ocorriam para justificar a 
sua ampla utilização e todas as vantagens para os sistemas de in-
formação. Com os conceitos iniciais a serem abordados, será pos-
sível entender as formas de armazenamento dos dados, como são 
realizados os acessosno banco de dados e quais elementos são 
necessários para que os sistemas de informações possam utilizar 
essa estrutura de modo eficiente, a fim de garantir a integridade 
dos dados e o sucesso em seus objetivos.
1.1 Introdução aos bancos de dados 
Vídeo Os bancos de dados estão incorporados em praticamente todos os 
aspectos do nosso cotidiano. Dificilmente um sistema que controla o 
negócio de uma empresa ou mesmo os sistemas que tratam de aspec-
tos da vida das pessoas não necessitam armazenar dados.
Se pensarmos nas diversas redes sociais existentes, todas as infor-
mações de seus usuários, bem como todas as atividades realizadas por 
10 Modelagem de banco de dados e SQL
eles, necessitam ficar armazenadas. Quando fazemos uma postagem 
ou um comentário, eles necessariamente devem ficar guardados e 
prontos para serem recuperados no momento que forem solicitados.
A Figura 1 mostra um exemplo de postagem em uma rede social 
na qual é possível identificarmos vários elementos que precisam ser 
armazenados.
Figura 1
Exemplo de dados de uma postagem em rede social
Autor
Legenda
Imagem
Comentário
Fonte: Facebook, 2021.
Nas interações com sistemas de informações, temos a necessidade 
de manipular dados, seja para consultas seja para efetuarmos alguma 
transação. Em todos os acessos que fazemos pela internet, por exem-
plo, as páginas que consultamos nos trazem uma imensa quantidade 
de dados. Quando realizamos uma compra, uma reserva, uma matrícu-
la ou qualquer interação com empresas, também temos a necessidade 
de fornecer ou receber dados.
De acordo com Silberschatz, Korth e Sudarshan (2020), são alguns 
tipos de sistemas e seus dados:
Conceitos gerais de modelagem de banco de dados 11
Vendas: dados de 
clientes, produtos e 
vendas.
Contabilidade: dados de 
pagamentos, recebimentos, 
saldo de contas contábeis e 
patrimônio para geração de 
balanços contábeis.
Recursos humanos: dados 
de funcionários, salários e 
benefícios, para a geração 
de contracheques.
Bancos: clientes, conta 
corrente, empréstimos, 
poupança, PIX.
Cartões de crédito: 
dados das compras e 
dos pagamentos.
Companhias aéreas: 
clientes, voos, passagens 
(as companhias aéreas 
estão entre as primeiras 
empresas a utilizarem bancos 
de dados de uma forma 
geograficamente distribuída).
Bl
an
-k
/
Sh
ut
te
rs
to
ck
da
vo
od
a/
 
Sh
ut
te
rs
to
ck
da
vo
od
a/
 
Sh
ut
te
rs
to
ck
da
vo
od
a/
 
Sh
ut
te
rs
to
ck
da
vo
od
a/
 
Sh
ut
te
rs
to
ck
da
vo
od
a/
 
Sh
ut
te
rs
to
ck
Podemos perceber que, mesmo não nos dando conta, os bancos 
de dados estão presentes e são um componente essencial da vida na 
sociedade atual (ELMASRI; NAVATHE, 2013).
Antigamente, os dados dos sistemas de informações eram arma-
zenados em arquivos organizados pelos desenvolvedores dos progra-
12 Modelagem de banco de dados e SQL
mas. Tal organização carecia de uma padronização, pois cada sistema 
estruturava seus arquivos da maneira que achava mais conveniente 
para suas necessidades. Com isso, a manipulação desses arquivos fica-
va por conta dos programas responsáveis por eles.
Esse procedimento trazia certos problemas, entre eles:
 • Manutenção dos programas: como as definições do formato 
dos dados ficavam descritas dentro dos programas, cada vez que 
esse formato era alterado, seja pela inclusão/exclusão de novos 
dados ou alteração das características de um deles, todos os pro-
gramas necessitavam de alteração.
 • Acesso aos dados: todos os procedimentos para buscar os da-
dos que o programa necessitava tinham de ser colocados nos 
programas, ou seja, além da lógica própria do programa para 
tratar o problema de negócio para o qual ele foi escrito, o progra-
ma continha inúmeras linhas com procedimentos normalmente 
complexos para se ler ou atualizar dados nos arquivos.
 • Controle de acesso: também era necessário o controle para que 
vários usuários fizessem o acesso aos dados ao mesmo tempo, 
sem o risco de se perder a integridade deles.
 • Garantia da integridade dos dados: nos casos de falhas no de-
correr dos processos de atualização de um conjunto de dados, 
o programa precisava garantir que eles ficassem íntegros e sem 
erros ao final da execução.
 • Redundância e inconsistência de dados: como os programas 
eram criados por diferentes programadores, era comum que 
muitos dados iguais ficassem redundantes e armazenados em 
locais diferentes, acarretando inconsistências.
Citamos apenas alguns problemas, mas existem outros de maior 
gravidade, como problemas de segurança, anomalia de acesso, falta 
de isolamento dos dados, entre outros. Todos esses aspectos aumen-
tavam significativamente a complexidade dos programas, fazendo com 
que a maioria de suas linhas e de sua lógica fossem construídas para os 
controles de acesso em vez de tratar do seu objetivo principal (SILBERS-
CHATZ; KORTH; SUDARSHAN, 2020).
O exemplo a seguir mostra parte de um programa antigo em uma lingua-
gem de programação (COBOL) que acessava diretamente esses arquivos.
Conceitos gerais de modelagem de banco de dados 13
DATA DIVISION.
FILE SECTION.
FD ARQUIVO001.
 RECORDING MODE IS F
 LABEL RECORD IS STANDARD
 BLOCK CONTAINS 0 RECORDS.
01 REG-CLIENTE PIC X(111).
WORKING-STORAGE SECTION.
01 REG-CLIENTE.
 05 REG-CPF PIC 9(011).
 05 REG-NOME PIC X(100).
01 REG-EOF PIC X(1).
PROCEDURE DIVISION.
 OPEN INPUT STUDENT.
 PERFORM UNTIL REG-EOF='Y'
 
 READ ARQUIVO001 INTO REG-CLIENTE
 AT END MOVE 'Y' TO REG-EOF
END-PERFORM.
CLOSE STUDENT.
Nesse exemplo, podemos verificar a descrição dos dados do ar-
quivo ARQUIVO001 por seus dados (REG-CLIENTE com REG-CPF e 
 REG-NOME), indicando que contém dados de clientes. Também consta 
no exemplo o comando de leitura desses dados (READ).
Assim, percebemos que, nesse formato antigo, o programa tinha 
a definição da estrutura dos arquivos (campos) e era encarregado de 
manipular diretamente o arquivo para leitura e/ou atualizações. Isso 
acarretava um problema, pois cada programa que manipulasse um 
determinado arquivo continha sua descrição. Quando a estrutura do 
arquivo era alterada, todos os programas necessitavam de atualização. 
Segundo Elmasri e Navathe (2013, p. 7), “a estrutura dos arquivos de 
14 Modelagem de banco de dados e SQL
dados está embutida nos programas de aplicação, de modo que quais-
quer mudanças em sua estrutura podem exigir alteração em todos os 
programas que acessam esse arquivo”.
Por conta dessas dificuldades e problemas, surgiram os bancos de 
dados.
1.1.1 Objetivos do banco de dados
Nessa estrutura, os dados são definidos e organizados independen-
tes do programa. Com isso, é possível realizar alterações nas definições 
dos dados sem gerar impacto aos programas; toda a interação do pro-
grama com os dados fica simplificada.
Podemos entender banco de dados como uma coleção de dados 
relacionados a um determinado assunto. Segundo Elmasri e Navathe 
(2013, p. 3), “um banco de dados é projetado, construído e populado 
com dados para uma finalidade específica”.
Poderíamos ter um banco de dados contendo Restaurantes, Pra-
tos, Clientes e Entregadores, por exemplo, que serviria para um 
aplicativo de pedido de comida. Em outro negócio, poderíamos ter um 
banco de dados, em uma universidade, com Alunos, Professores, 
Cursos, Disciplinas e Turmas. Poderíamos, ainda, representar os 
relacionamentos entre eles, como a matrícula do aluno de um curso 
em diversas disciplinas, os professores dessas disciplinas, as turmas 
e os locais das aulas, a emissão de um histórico escolar, entre outros, 
conforme a Figura 2.
Figura 2
Ilustração de um banco de dados de uma universidade
Matej Kastelic/Shutterstock
Sala de 
aula
Universidade
Alunos
Professores
Cursos
Disciplinas
Turmas
Fonte: Elaborada pelo autor.
https://www.shutterstock.com/pt/g/kasto80
Conceitos gerais de modelagem de banco de dados 15
Podemos dizer que um sistema de informações que utiliza um ban-
co de dados promove a independência dos dados, ou seja,eles estarão 
isolados e os programas não precisam saber a forma com que o dado é 
estruturado e armazenado (RAMAKRISHNAN; GEHRKE, 2008). Isso nos 
leva à ideia de estabilidade da estrutura e do armazenamento (DATE, 
2003), que traz o conceito de persistência, no sentido de que, uma vez 
que é armazenado no banco de dados, o dado está na sua forma defi-
nitiva, estável, não transitória; em outras palavras, dizemos que é um 
dado armazenado em um banco, ele está persistido.
Em resumo, poderíamos dizer que o uso de um banco de dados tem 
os seguintes objetivos, de acordo com Elmasri e Navathe (2013):
Organização dos dados 
Para que os dados fiquem 
armazenados no banco, eles 
precisam estar estruturados 
e organizados, fazendo com 
que o acesso e a manutenção 
sejam mais eficientes.
Acesso com linguagem 
padrão 
Com os dados em um banco 
de dados, é possível o uso 
de ferramentas próprias de 
acesso a esses dados. Em vez 
de se programar esse acesso, 
é usada uma linguagem 
específica para isso.
Restrições de 
integridade
Na maioria dos sistemas de 
informações, existem regras 
de negócio em que um 
determinado dado só pode 
receber certos valores. Esse 
controle do domínio de cada 
dado pode ser feito diretamente 
no banco de dados.
Múltiplas visões ao usuário 
É possível fornecer visões de 
parte dos dados a usuários 
específicos, para que sejam 
manipulados somente os 
dados relevantes para a 
parte do negócio que é 
responsável.
16 Modelagem de banco de dados e SQL
Com esses objetivos alcançados, podemos garantir maior estabili-
dade ao sistema, confiabilidade aos resultados que ele produz e per-
formance adequada ao usuário.
1.1.2 Histórico
A preocupação com armazenar dados eficientemente vem do início 
dos sistemas de informações, na década de 1960. Na época, Charles 
Bachman, da empresa General Electric, criou um sistema de arma-
zenamento para seus sistemas chamado Integrated Date Store (depó-
sito de dados integrado). Este foi padronizado pela Conference on 
Data Systems Languages (CODASYL) naquela época (RAMAKRISHNAN; 
GEHRKE, 2008).
No final da década 1960, grandes discos rígidos eram utilizados 
para o armazenamento de dados; foram desenvolvidos os modelos de 
dados de rede e hierárquicos que permitiram o uso de estruturas de 
dados, como listas e árvores nesses discos. Os programas tinham livre 
acesso a eles.
Nessa época, a empresa IBM desenvolveu o sistema chamado 
Information Management System (IMS), usado por anos nos sistemas de 
controle de passagens aéreas da empresa American Airlines.
Em 1970, Edgar Codd, também da IBM, propôs pela primeira vez 
uma estrutura chamada modelo de dados relacional, utilizada até hoje 
como estrutura padrão dos bancos de dados.
Em 1976, Peter Chen introduziu o conceito de modelo relacional, 
que foi a base para o armazenamento em bancos de dados até os dias 
de hoje.
Na década de 1980, os bancos de dados se solidificaram como es-
trutura padrão de armazenamento de dados, e a estrutura de arquivos 
praticamente caiu em desuso, ficando restrita somente a casos especí-
ficos. A IBM lança o DB2, um banco de dados para ambientes de grande 
porte mainframe (ELMASRI; NAVATHE, 2013).
Nessa década, então, surgiram softwares encarregados de fazer 
todo o trabalho de controle do banco de dados, chamados sistemas ge-
renciadores de banco de dados (SGBD), e a linguagem padrão de acesso 
aos dados ficou conhecida como Structured Query Language (linguagem 
estruturada de consulta – SQL). Praticamente todas as linguagens de 
Conceitos gerais de modelagem de banco de dados 17
programação criaram mecanismos para acessar quaisquer bancos de 
dados usando o SQL.
A partir dos anos de 1990, houve diversos avanços nessa área, tan-
to na parte de controle de armazenamento quanto da eficiência da 
consulta.
A partir do ano de 2000, dados semiestruturados passaram a ser 
mais utilizados, devido ao tráfego de informações pela internet. Sur-
giram padrões como eXtensible Markup Language (XML) e JavaScript 
Object Notation (JSON), específicos para essa arquitetura, e os bancos 
de dados passaram a dar suporte a esse tipo de estrutura. Nesse perío-
do surgiram, também, os bancos de dados do tipo open source (código 
aberto), em que bancos de dados, como MySql e PostgreSql, puderam 
ser utilizados gratuitamente, promovendo a autoadministração do 
banco por parte das empresas.
Os bancos de dados focaram a administração de grandes volumes 
de dados, devido à gigantesca quantidade de informações que transita 
pela internet. Conceitos como DateWarehouse e Data Mining surgiram 
não só para controlar o armazenamento, mas, principalmente, para 
produzir algoritmos de busca de informações úteis nessas grandes ba-
ses de dados.
A partir de 2010, cresce o interesse em armazenagem de dados “na 
nuvem 1 ”, em que se terceiriza a gestão dos dados em servidores ex-
ternos às empresas, com o objetivo de reduzir custos (SILBERSCHATZ; 
KORTH; SUDARSHAN, 2020).
Armazenamento em nuvem 
consiste no ato de armaze-
nar um ou mais arquivos em 
um HD fora da sua máquina, 
por meio da internet.
1
O vídeo História do SQL 
Server, publicado pelo ca-
nal Diego Nogare, conta 
a história de um famoso 
banco de dados, o SQL 
Server da Microsoft. 
Muito interessante!
Disponível em: https://www.
youtube.com/watch?v=7qK 
ToaOZBd8&feature=youtu.be. 
Acesso em: 9 mar. 2021.
Vídeo
1.2 Sistemas gerenciadores de 
banco de dados (SGBD) Vídeo
Os sistemas gerenciadores de banco de dados (SGBD) são softwares 
encarregados de administrar e controlar as operações sobre os ban-
cos de dados. Basicamente, eles permitem aos usuários as seguintes 
ações: criar o banco com as definições e a estruturação de todos os 
elementos; fazer atualizações nessa estrutura; e deixar o banco dispo-
nível para uso. São encarregados, ainda, de fazer todas as operações 
sobre os dados, como inclusão, alteração, exclusão e, principalmente, 
consultas aos dados, ponto forte dessa ferramenta.
https://www.youtube.com/watch?v=7qKToaOZBd8&feature=youtu.be.
https://www.youtube.com/watch?v=7qKToaOZBd8&feature=youtu.be.
https://www.youtube.com/watch?v=7qKToaOZBd8&feature=youtu.be.
18 Modelagem de banco de dados e SQL
1.2.1 Definição de SGBD
O SGBD é responsável por todo o acesso ao banco de dados (DATE, 
2003). A Figura 3 ilustra a interação entre os programas e os dados por 
meio de um SGBD.
Figura 3
Interação com o banco de dados
Usuários Programas SGBD
Programa 1
Programa n
Programas de 
controle e acesso
Banco de 
dados
Fonte: Elaborada pelo autor.
De acordo com Date (2003), os programas de controle e acesso ci-
tados na Figura 3 são capazes de aceitar as definições dos elementos 
dos bancos de dados com todas as suas características, a fim de criar 
o banco de dados. Os comandos responsáveis por essas definições 
são conhecidos como Date Definition Language (linguagem de defini-
ção de dados – DDL). Além disso, são capazes de realizar as consultas 
aos dados que os programas precisam realizar para disponibilizar aos 
usuários, bem como as atualizações (inclusão, alteração e exclusão). 
Os comandos responsáveis por essas operações são conhecidos como 
Date Manipulation Language (linguagem de manipulação de dados 
– DML).
1.2.2 Profissional responsável pelo SGBD
Uma variedade de pessoas está relacionada ao trabalho de criação 
e manutenção do SGBD. Não estamos falando dos programadores, que 
constroem o software SGBD, mas dos profissionais que administram 
o SGBD, deixando-o pronto para a utilização dos desenvolvedores de 
Conceitos gerais de modelagem de banco de dados 19
sistemas de informação que necessitam armazenar seus dados nessa 
estrutura.
Nessas empresas, o profissional responsável por toda a administra-
ção do banco, que serve as equipes de desenvolvimento de todos os 
sistemas de informação, é chamado Database Administrator (adminis-
trador do banco de dados – DBA).
Conforme Ramakrishnan e Gehrke (2008), as tarefas mais importan-
tes do DBA são as seguintes:
 • Projeto dosesquemas do banco de dados: o DBA deve intera-
gir com o analista de sistemas que está projetando o sistema de 
informação, a fim de compreender os dados e qual será o seu 
uso. Com isso, ele é capaz de decidir o melhor esquema físico de 
armazenamento para garantir acesso rápido e eficiente no mo-
mento de sua utilização.
 • Segurança e autodescrição: o DBA é responsável por assegurar 
que o acesso não autorizado não seja permitido. Com isso, ele 
pode criar visões de dados para cada tipo de usuário.
 • Disponibilidade e recuperação dos dados: o DBA deve tomar 
medidas para garantir que, no caso de falhas, os dados sejam 
preservados e continuem íntegros. É ele o responsável por orga-
nizar as rotinas de backup (cópias de segurança) e, em caso de 
falhas, das rotinas de restore (recuperação dos dados).
 • Sintonização do banco de dados: a performance de um sistema 
está ligada diretamente à eficiência no acesso aos dados. O DBA 
é encarregado de organizar o banco de modo a permitir o acesso 
rápido e adequado pelos usuários.
Esse profissional é de extrema importância em uma empresa, pois 
sua especialidade atenderá diversos sistemas que necessitam utilizar 
bancos de dados, evitando que essas tarefas sejam executadas des-
centralizadamente e por profissionais que atuam também em outras 
atividades.
1.2.3 Vantagens do uso de SGBD
Sem o uso de um banco de dados, os sistemas teriam que definir 
seus próprios arquivos e essas definições estariam espalhadas no cor-
po dos diversos programas. Esse modelo traz dificuldades nos mo-
20 Modelagem de banco de dados e SQL
mentos em que ocorrem alterações nos dados, já que é necessária 
a manutenção em todos os programas que contêm suas definições. 
Outro fator negativo é que todo o acesso aos dados dos arquivos fica 
também centralizado nos programas, aumentando sua complexidade.
A seguir, apresentaremos algumas vantagens do uso de um SGBD.
Administração dos dados dos sistemas
As principais vantagens em utilizarmos bancos de dados e um SGBD 
é a centralização e administração dos dados, pois os sistemas não ne-
cessitam manter arquivos próprios. Todos os dados e suas definições 
saem dos programas para ficarem centralizados no banco e todo o 
acesso é administrado pelo SGBD. O programa, então, necessita so-
mente fazer requisições dos dados, e o SGBD se encarrega de fazer a 
busca ou a atualização.
A Figura 4 ilustra a situação dos dados sendo armazenados em ar-
quivos sem SGBD, e a Figura 5, com o uso de um SGBD.
Figura 4
Interação entre programas e arquivos (sem SGBD)
Programa 1
Definição do arquivo 1
Definição do arquivo 2
Acesso ao arquivo 1
Acesso ao arquivo 2
Programa 2
Definição do arquivo 3
Acesso ao arquivo 3
Programa n
Definição do arquivo 2
Acesso ao arquivo 2
Arquivo 1
Dados do arquivo 1
Arquivo 2
Dados do arquivo 2
Arquivo 3
Dados do arquivo 3
Fonte: Elaborada pelo autor.
Nessa figura, podemos perceber que as definições e as rotinas de 
acesso se encontram nos programas do sistema.
Conceitos gerais de modelagem de banco de dados 21
Figura 5
Interação entre programas e dados (com SGBD)
Dados
SGBD
Programa 1
Acesso aos dados
.
.
.
Programa 2
Acesso aos dados
Programa n
Acesso aos dados
Fonte: Elaborada pelo autor.
Já nessa estrutura, com o SGBD, as definições dos dados não estão 
nos programas, elas fazem parte do banco de dados e todo o acesso é 
controlado por ele.
Controle de redundância
Em um sistema de arquivos tradicional, poderia acontecer que da-
dos iguais fossem armazenados em diversos arquivos, o que acarre-
taria problemas no uso desses dados. Em um banco de dados, com 
os dados armazenados em um único local, é possível ter um melhor 
controle para que não ocorra redundância de dados.
Restrição a acesso não autorizado
Em um banco de dados, é possível restringir o acesso a usuários que 
têm autorização para visualizar ou alterar determinados dados.
É comum haver diversos perfis de usuários, cada um com uma de-
terminada responsabilidade. Em uma empresa, por exemplo, um di-
retor poderia ter acesso a qualquer tipo de dado, já um funcionário 
operacional não poderia ter acesso a dados estratégicos ou sigilosos. É 
possível colocar todas essas restrições no banco de dados.
Controle de backup e restore
É comum que ocorram falhas em hardwares responsáveis pelo 
armazenamento dos dados e nos programas que os acessam. É im-
portante para um sistema que todos os seus dados estejam íntegros e 
22 Modelagem de banco de dados e SQL
sempre disponíveis. Para isso, um procedimento obrigatório é fazer có-
pias de segurança, comumente chamadas de backups. Essas cópias po-
dem ser feitas manualmente, o que não é aconselhável pelo trabalho 
dispendido e a incidência de falhas. Para isso, todos os SGBD fornecem 
o serviço, não só de backup, mas também de restore (recuperação dos 
dados). Todas as cópias de segurança (backup) e de recuperação dos 
dados (restore), em caso de problemas, são centralizadas, ficando a 
cargo de um software específico, que mantém o controle sobre o banco 
de dados.
Autodescrição
A autodescrição é um princípio importante dos bancos de dados, 
em que o banco não só guarda os dados dos sistemas, mas todas as 
informações do próprio banco, necessárias para o seu gerenciamento. 
As definições, os índices e as restrições são armazenadas em um catá-
logo no banco de dados (ELMASRI; NAVATHE, 2013), e a consulta a esse 
catálogo fornece todas as informações da estrutura do banco.
Voltando ao exemplo no início do capítulo, percebemos que as in-
formações sobre o arquivo que o programa COBOL acessaria estavam 
escritas diretamente no programa. No caso de um SGBD, essas infor-
mações e o mapa de acesso a elas ficam no catálogo do banco. Com 
isso, um SGBD pode garantir o isolamento dos dados e as definições 
dos programas que os manipulam.
Controle de concorrência
É possível, também, administrar o compartilhamento dos dados en-
tre diversos programas e até mesmo diversos sistemas de informação, 
garantindo a integridade dos dados. Esse princípio é de vital impor-
tância para garantir o acesso concorrente, principalmente nas atuali-
zações dos dados em que um determinado usuário pode estar, em um 
determinado instante, tentando atualizar o mesmo registro que outro 
programa.
O SGBD, nesse caso, encarrega-se de bloquear o registro para um 
programa até que ele termine a tarefa, fazendo com que os demais 
programas aguardem e usem o registro já com a nova atualização.
Suponhamos que o Usuário 1 deseja atualizar o endereço do 
cliente José e, no mesmo instante, o Usuário 2 deseja fazer a mesma 
atualização.
Conceitos gerais de modelagem de banco de dados 23
Vamos supor que o Usuário 1 recebeu a informação de que o 
endereço de José a ser atualizado seja Rua das Américas, n. 415, 
ap. 13, Bloco D, e o Usuário 2 está com a mesma informação, mas 
incompleta, tendo somente Rua das Américas, n. 415.
Caso não houvesse um mecanismo que garantisse a atualização 
completa de cada usuário, o Usuário 1 poderia efetivar a alteração 
para o endereço completo que digitou na tela, mas como o Usuário 
2 também digitou o endereço, mas incompleto – entretanto em um 
instante imediatamente posterior –, o endereço que estaria no banco 
de dados ficaria incompleto, e o Usuário 1 iria imaginar que estaria 
completo.
Utilização de índices
Quando um usuário necessita fazer uma consulta ao banco de da-
dos, essa requisição é analisada por um programa otimizador, que ve-
rifica na estrutura do banco qual é a forma mais eficiente de realizar a 
consulta. Essa eficiência dependerá de como os dados foram organiza-
dos na criação do banco. Se a consulta estava prevista no planejamento 
e estruturação do banco, alguns componentes foram criados na forma 
de “mapas”, para que o acesso seja mais rápido e direto. Caso essas 
definições não tenham sido feitas, o SGBD realiza o acesso, porém mais 
lentamente, já que todo o percurso dos dados será feito em tempo de 
execução da consulta.
Esse “mapa” citado é um conjuntode índices contendo os endereços 
dos dados. Quando um banco é criado prevendo a necessidade de uma 
determinada consulta, esses índices são gerados fazendo com que, no 
momento da efetiva execução da consulta dos dados, o SGBD primeiro 
percorra o índice e acesse o endereço do dado, para então efetivamen-
te recuperá-lo. Caso esse índice não exista, a busca é feita diretamente 
em todos os dados, o que causa um tempo maior de recuperação.
A Figura 6 mostra o exemplo de uma entidade chamada Aluno com 
algumas informações a seu respeito.
Na Figura 6a, teríamos os dados do aluno armazenados no banco 
de dados sem a existência de um índice de acesso. Note que, na busca 
por um determinado aluno, o banco necessita ler toda a tabela até en-
contrar o aluno desejado.
24 Modelagem de banco de dados e SQL
Figura 6a
Acesso aos dados sem a utilização de índice
CPF Nome
87644364762 Maria Cândida
93826154655 Joaquim José
37656198657 Rafaela Augusta
09864541324 Alcides Alcântara
Aluno
Encontre os dados do 
aluno com 
CPF “37656198657”
Fonte: Elaborada pelo autor
Já na Figura 6b, teríamos um índice contendo somente um dos atri-
butos do aluno, que foi escolhido por não haver repetição de valores 
e identificar de maneira única um determinado aluno. Nesse caso, o 
banco percorre primeiramente o índice e, em seguida, após descobrir 
o seu endereço na tabela, vai em busca dos demais dados.
Figura 6b
Acesso aos dados com a utilização de índice
CPF
87644364762
93826154655
37656198657
09864541324
Índice
CPF Nome
87644364762 Maria Cândida
93826154655 Joaquim José
37656198657 Rafaela Augusta
09864541324 Alcides Alcântara
Aluno
Encontre os dados do 
aluno com 
CPF “37656198657”
Fonte: Elaborada pelo autor.
Normalmente, os índices ficam armazenados em locais onde são 
acessados mais rapidamente do que os dados da tabela. Assim, apesar 
de realizar dois acessos, primeiro no índice e depois nos dados, essa 
busca tem um desempenho muito mais rápido.
Conceitos gerais de modelagem de banco de dados 25
Outras vantagens
São inúmeras as vantagens de se utilizar um SGBD. De acordo com 
Ramakrishnan e Gehrke (2008), as principais são:
Independência 
dos dados
Acesso 
eficiente Integridade
Facilidade na 
administração das 
definições
Segurança
Controle 
de acesso 
concorrente
Recuperação 
de falhas
Facilidade no 
desenvolvimento 
do sistema
Poderíamos dizer que as vantagens de utilizar SGBD são tantas a 
ponto de, atualmente, ser inviável produzir um sistema de informação 
sem o seu uso. A capacidade de gerenciamento dos dados é tão grande 
que o trabalho de se implementar as rotinas feitas por ele inviabilizaria 
os projetos de desenvolvimento de software.
O texto intitulado 10 
Interesting Facts About Da-
tabase Management Sys-
tems apresenta algumas 
curiosidades interessan-
tes sobre SGBD.
Disponível em: https://
aequortechnologies.wordpress.
com/2015/08/21/10-interesting-
facts-about-database-
management-systems/. Acesso em: 
9 mar. 2021.
Leitura
1.3 Conceitos gerais de modelagem de dados 
Vídeo Antes de iniciar o trabalho de modelagem dos dados propriamente 
dito, conheceremos os principais conceitos que envolvem o processo, 
necessários para todas as etapas, desde o levantamento desses dados 
até a implementação no banco de dados.
1.3.1 Níveis de abstração 
A tarefa de modelar o banco de dados deve ser feita considerando 
três níveis de abstração: conceitual, lógico e físico. Essa separação faci-
lita a estruturação dos dados, pois, no início da atividade, é comum não 
termos uma visão detalhada daquilo que devemos organizar, então os 
dados são levantados de um modo mais geral e, à medida que o enten-
26 Modelagem de banco de dados e SQL
dimento sobre a solução do problema vai aumentando, os elementos 
mais detalhados vão sendo inseridos em níveis mais específicos. Veja-
mos cada um deles.
1.3.1.1 Nível conceitual (externo)
O projeto do banco de dados de um sistema começa na fase de 
levantamento dos requisitos, quando é necessário entender quais 
dados serão armazenados e quais operações serão realizadas so-
bre eles, ou seja, devemos descobrir o que os usuários desejam 
com os dados. Para essa fase, a análise é informal e utiliza as téc-
nicas da etapa de levantamento dos requisitos (RAMAKRISHNAN; 
GEHRKE, 2008).
Normalmente, partimos de uma visão mais geral, procurando 
fazer uma análise sob a visão dos usuários que manipularão esses 
dados na forma de telas do sistema. No nível conceitual, os dados 
são analisados em conjunto com os usuários que irão usá-los no 
sistema a ser construído. Nesse nível, há a investigação de quais 
dados serão e qual será a sua finalidade, quais regras devem ser 
observadas e como serão organizados segundo a visão do usuário. 
Esse nível está diretamente ligado à fase de levantamento dos re-
quisitos, no ciclo de desenvolvimento do sistema.
Se estivermos desenvolvendo um sistema para uma universi-
dade, por exemplo, na fase de levantamento de requisitos, prova-
velmente teríamos as funcionalidades de cadastro de entidades, 
como Alunos, Professores, Cursos, Disciplinas, Tur-
mas, entre outros. Também teríamos de organizar telas para rea-
lizar a Matrícula dos alunos e outras funções necessárias para a 
administração da parte acadêmica da instituição. Nesse nível de 
abstração, iríamos investigar quais atributos seriam necessários 
para cada uma das entidades, quais são as relações entre eles, 
quais regras de negócio deveriam ser aplicadas e quais são os cri-
térios de aceitação de valores nesses atributos.
O Quadro 1 mostra uma lista de requisitos de uma escola de na-
tação. Esse artefato foi produzido na fase de levantamento de re-
quisitos do ciclo de desenvolvimento do sistema. Na última coluna 
do quadro, podemos perceber os dados que estarão relacionados 
Conceitos gerais de modelagem de banco de dados 27
com cada requisito. Essa abordagem já começa a dar uma ideia ao 
analista de quais dados deverão ser organizados segundo a teoria 
de modelagem de dados e que serão inseridos no banco de dados.
Quadro 1
Problema da escola de natação
Requisito Descrição Regras de negócio Atributos
R1 – Manter 
cadastro dos 
alunos
Permitir o cadastro completo 
dos alunos.
Permitir pesquisar, incluir, 
alterar e consultar.
Não permitir a exclusão de 
um aluno, somente marcar 
como inativo.
CPF, Nome, 
Endereço.
R2 – Manter 
cadastro dos 
professores
Permitir o cadastro completo 
dos professores.
Permitir pesquisar, incluir, 
alterar, excluir e consultar.
CPF, Nome, Data de 
Admissão, Modalidade 
(Natação ou Hidroginástica)
R3 – Manter 
cadastro das 
turmas
Permitir o cadastro completo 
das turmas, sua modalidade 
(natação ou hidroginástica), 
seus dias/horários e o professor 
responsável.
Não permitir o cadastro de 
duas turmas da mesma mo-
dalidade no mesmo horário.
Uma Turma deve ter um 
Nome (Turma 1, Turma 2 etc.), 
a modalidade (Natação ou 
Hidroginástica), os dias da 
semana, a Turma, o Horário, 
o Professor e o valor da 
Mensalidade.
R4 – Matricular 
alunos
Matricular os alunos nas turmas.
Pessoas com mais de 
80 anos só podem se 
matricular na modalida-
de Hidroginástica.
Número da Matrícula, 
Data, Turma e Aluno.
R5 – Registrar 
frequência
Registrar frequência no diário 
de classe de cada aula.
Aluno, Data, 
Frequência.
Fonte: Elaborado pelo autor.
É de extrema importância a abordagem conceitual no início do 
processo de desenvolvimento, pois uma lista de requisitos, como os 
elencados no Quadro 1, irá balizar a continuidade do trabalho de mo-
delagem dos dados.
1.3.1.2 Nível lógico
Nesse nível, os dados começam a ser organizados e preparados para 
serem armazenados em um banco de dados. Procura-se uma estrutura 
em que já se identificam entidades com seus atributos e, principalmen-
te, os relacionamentos entre elas. Nessa fase, já é possível listar com 
mais detalhes os dados levantados no nível anterior, porém fazemos 
uma descrição de alto nível, sem muitos detalhes, mas já registrandoas restrições que podem existir sobre os dados.
28 Modelagem de banco de dados e SQL
No exemplo da escola de natação, os dados poderiam ser escritos 
na seguinte forma:
Alunos (CPF, nome, data de nascimento, índice de 
rendimento)
Professores (CPF, nome, salário)
Turmas (nome, horário, professor)
Modalidade (nome, turmas)
Matrícula (número, aluno, turma)
No nível lógico, já é possível construir o modelo de dados, que é um 
diagrama no qual essas entidades são organizadas em retângulos, com 
ligações entre eles simbolizando o relacionamento que existe entre as 
entidades. Podemos notar na entidade Turmas que existe um atributo 
chamado Professor, que, por sua vez, trata-se de outra entidade, ou 
seja, está explícito que existe uma relação entre essas duas entidades. 
O mesmo ocorre com a entidade Matrícula, relacionada a Aluno e 
Turma.
Esse diagrama (modelo de dados) será visto em detalhes nas seções 
posteriores, por enquanto estamos somente mostrando os níveis de 
abstração para o tratamento dos dados.
1.3.1.3 Nível físico (interno)
Esse nível é o mais detalhado de todos e procura mostrar informações 
que irão balizar a criação da estrutura no banco de dados, tratando de ca-
racterísticas de entidades e atributos que determinarão o funcionamento 
do acesso aos dados. É de grande importância para a modelagem, pois 
interfere diretamente na performance do sistema e na forma com que os 
dados serão armazenados e recuperados. Especifica detalhes de armaze-
namento, e estruturas auxiliares são criadas com o objetivo de melhorar o 
desempenho do sistema e acelerar a recuperação dos dados.
Além disso, consiste em um refinamento dos esquemas gerados, 
a fim de ajustar entidades e atributos, alterar relacionamentos, criar 
entidades auxiliares, entre outros, com o foco em melhoria de perfor-
mance do sistema. Também faz uma previsão de carga do banco em re-
lação à quantidade de dados que serão inseridos, em seguida, há uma 
análise de distribuição dessa carga em diversos servidores, inclusive 
Conceitos gerais de modelagem de banco de dados 29
prevendo o caso de redundância controlada dos dados. Dizemos que 
nessa etapa é feito um processo de “sintonia”, comumente chamada de 
tuning no banco de dados.
Nesse nível, o SGBD a ser utilizado já foi definido e o esquema ge-
rado pode ser submetido a ele para ser cadastrado no seu catálogo 
(RAMAKRISHNAN; GEHRKE, 2008).
1.3.2 Modelo relacional
Existem diversas estruturas para armazenamento dos dados. Anti-
gamente, antes do surgimento dos bancos de dados, quando os dados 
ficavam em simples arquivos, técnicas que exploravam as caracterís-
ticas desses arquivos eram utilizadas. Duas delas eram chamadas de 
modelo em rede e modelo hierárquico.
Com o surgimento dos bancos de dados, a estrutura de armazena-
mento adotada foi o modelo relacional, por isso, em muitos casos, o 
banco é chamado de banco de dados relacional.
O conceito básico nesse modelo é o de relação. Por meio do nome 
da relação, é possível relacionar os registros que farão parte dela e 
cada registro descreve um elemento. Uma relação pode conter um ou 
mais campos. Como exemplo, considere a relação Alunos, a qual pode 
possuir os seguintes campos:
Alunos (CPF, Nome, Endereço, Carteira de Motorista, Estado Civil).
No Quadro 2, podemos relacionar alguns registros com informa-
ções dos alunos.
Quadro 2
Exemplo da relação Alunos
Aluno
CPF Nome Endereço Carteira de motorista Estado civil
87644364762 Maria Cândida Rua das Andorinhas, 12 6476376898 Solteira
93826154655 Joaquim José Rua dos Periquitos, 49 Casado
37656198657 Rafaela Augusta Rua das Pombas, 75 8746253655 Divorciada
09864541324 Alcides Alcântara Av. dos Pelicanos, 21 2387578288 Solteiro
Fonte: Elaborado pelo autor.
30 Modelagem de banco de dados e SQL
Cada registro da relação descreve completamente um determinado 
aluno, por meio do conteúdo dos seus campos. Dizemos que a relação 
é um modelo para descrever um aluno.
Como veremos em detalhes, existem mais informações que po-
dem ser colocadas na relação para uma descrição mais completa dos 
elementos, como os tipos de cada um dos campos, o domínio de um 
campo (conjunto de valores que ele pode assumir), as regras que po-
dem ser adotadas para eles e, principalmente, as interações entre as 
diversas relações de um sistema. Pode acontecer, também, em alguns 
casos, de alguns campos de uma relação não possuírem nenhum valor 
em um determinado momento; esse conteúdo, nesse caso, é chamado 
de valor nulo. Na relação Alunos do Quadro 2, por exemplo, o aluno 
Joaquim José não possui carteira de motorista, então o valor desse 
campo, para esse aluno, seria nulo.
1.3.3 Tabelas, linhas, atributos e domínio 
Em um banco de dados relacional, as relações recebem o nome de 
tabela, devido ao formato que são representadas, em forma de tabelas 
com linhas e colunas. Esse termo é amplamente utilizado na modela-
gem e no manuseio do banco e, com isso, o termo relação não será 
mais utilizado no texto.
Uma tabela é composta de linhas e colunas. As linhas correspon-
derão aos registros da entidade, e as colunas, aos seus atributos. Na 
nomenclatura de banco de dados, temos:
Tabela
Sinônimo de relação ou entidade, 
representa um conjunto de elementos 
do mundo real distinguíveis uns dos 
outros, cujos dados necessitam ser 
armazenados no banco de dados. 
Cada linha da tabela representa um 
determinado elemento. Por exemplo, 
em uma escola de natação, a relação 
Alunos é um exemplo de tabela.
Linha
Sinônimo de registro ou tupla, 
corresponde a todos os dados 
de um determinado elemento 
da tabela. Todas as informações 
do aluno Joaquim José (CPF, 
nome, endereço, carteira de 
motorista) são um exemplo de 
linha.
Atributo
Sinônimo de campo, 
propriedade ou 
coluna, corresponde 
a uma determinada 
característica do 
elemento da tabela. O 
nome de um aluno é um 
exemplo de atributo.
Conceitos gerais de modelagem de banco de dados 31
Domínio
Corresponde a todos os 
valores possíveis para um 
determinado atributo. Por 
exemplo, o atributo Estado 
Civil, na tabela de alunos, 
tem um conjunto limitado 
de valores que podem ser 
atribuídos a ele (solteiro, 
casado, divorciado). Dizemos 
que essa lista de valores é o 
domínio do atributo.
Chave
É um conjunto de um ou mais atributos 
escolhidos para representar os elementos da 
tabela. A chave identifica univocamente um 
elemento. Pode haver mais de um atributo 
(ou conjunto de atributos) com essa condição; 
nesse caso, teremos várias chaves, chamadas 
candidatas. Ao escolhermos uma delas, 
passamos a chamá-la de chave primária da 
tabela. No exemplo da tabela Aluno, o atributo 
CPF poderia ser a chave primária, já que não 
existe um CPF igual a outro.
Os atributos podem ser de vários tipos. Vejamos:
 • Simples ou compostos:
 • Simples: quando um atributo não pode ser dividido em 
outros. Por exemplo, o cpf do aluno.
 • Composto: quando pode ser dividido. Por exemplo, o Nome 
do aluno, que pode ser dividido em Primeiro Nome, Nome 
Intermediário e Sobrenome. Também o Endereço, que 
pode ser dividido em Rua, Número, Cidade, Estado e CEP.
 • Monovalorado ou multivalorado:
 • Monovalorado: quando um atributo só pode assumir um único 
valor. Por exemplo, o cpf, Nome e Estado Civil do aluno.
 • Multivalorado: quando um atributo pode ter vários valores. 
Por exemplo, o Número do Telefone do aluno, já que ele 
pode ter vários telefones; o atributo Endereço, já que ele 
pode ter o endereço residencial e o comercial.
 • Nulo: quando não se deseja informar nenhum valor para o atri-
buto. Por exemplo, o atributo Carteira de Motorista pode 
ficar com o valor nulo para o aluno que não possui a carteira.
 • Derivado: quando o atributo pode ser obtido por meio de outro 
atributo. Por exemplo, o atributo Idade do aluno, que pode ser 
obtido pela data de nascimento; o atributo Tempo na escola, 
que pode ser obtido pela Data da matrícula.
32 Modelagem de banco de dados e SQL
A Figura 7 ilustra os conceitos abordados.
Figura7
Exemplo da relação Alunos com os conceitos
Atributos
CPF Nome Endereço Telefone Carteira de motorista
Estado
civil
87644364762 Maria Cândida Rua das Andorinhas, 12 988746655 6476376898 Solteira
93826154655 Joaquim José Rua dos Periquitos, 49 876563544 Casado
37656198657 Rafaela Augusta Rua das Pombas, 75
788765546
876764666
8746253655 Divorciada
09864541324 Alcides Alcântara Av. dos Pelicanos, 21 2387578288 Solteiro
Aluno
Atributos com 
domínio
Tabela
Linhas
Atributo 
monovalorado
Valor nulo
Atributo 
multivalorado
 Atributo 
composto
Chave 
primária Atributo 
simples
Fonte: Elaborada pelo autor.
Tais definições serão de grande importância no processo de mode-
lagem, pois as definições subsequentes irão utilizar esses conceitos em 
suas explicações e detalhamentos.
1.3.4 Relacionamentos
Os relacionamentos têm o objetivo de fazer as ligações entre ele-
mentos das tabelas.
Vamos considerar o exemplo da escola de natação, em que, além 
dos dados dos alunos, precisamos armazenar no banco de dados as 
informações de professores, turmas, modalidades, matrícula e diário 
de classe. Elas seriam as tabelas do banco.
Podemos perceber que, para representar o negócio de uma escola 
de natação, algumas tabelas deverão, obrigatoriamente, fazer referên-
cia a outras, para que sua informação fique completa.
Os atributos de um professor, por exemplo, seriam seu cpf, Nome 
e Data de admissão. Esses são seus atributos básicos, porém preci-
Conceitos gerais de modelagem de banco de dados 33
samos saber quais modalidades (natação e/ou hidroginástica) o professor 
pode atuar. As modalidades, por sua vez, também estarão em uma ta-
bela. Então, dizemos que existe um relacionamento entre as tabelas 
Professor e Modalidade.
Se representarmos uma tabela em um retângulo, a linha que as se-
para será a representação do relacionamento entre elas.
A imagem a seguir representa o relacionamento entre as tabelas Pro-
fessor e Modalidade. Nessa representação, foi inserido apenas o nome 
da tabela, sem os seus atributos.
Professor Modalidade
Da mesma forma, se analisarmos a tabela Turmas, poderemos per-
ceber que uma Turma tem um Professor como responsável e tam-
bém tem a informação de a qual Modalidade pertence aquela turma. 
A imagem a seguir mostra esses relacionamentos.
Professor Modalidade
Turma
Os relacionamentos nos fornecem algumas respostas a questiona-
mentos que podemos fazer sobre os dados, por exemplo:
 • Em quais modalidades um professor atua?
 • Quais professores atuam na modalidade natação aqui na escola?
 • Quantas turmas de hidroginástica existem na escola?
 • Quais turmas pertencem a um determinado professor?
Alguns relacionamentos podem ser considerados tabelas. Veja o 
relacionamento que existe entre as tabelas Aluno e Turma. Um alu-
no pertence a uma determinada turma que, por sua vez, tem diversos 
alunos. Esse relacionamento poderia bem ser uma tabela de Matrí-
culas, já que uma matrícula deve, além de guardar suas informações 
próprias, como “número da matrícula” e “data da matrícula”, guardar 
também qual é o aluno matriculado e em qual turma.
34 Modelagem de banco de dados e SQL
Essa representação está no esquema a seguir.
Aluno Turma
Matrícula
Os relacionamentos e todos os seus detalhes serão vistos no mode-
lo lógico de dados.
Finalmente, o conjunto de todas as tabelas e seus relacionamentos 
é chamado de modelo de dados e pode ser feito em diversos níveis, de-
pendendo do momento do ciclo de desenvolvimento do sistema.
CONSIDERAÇÕES FINAIS 
Apresentamos, neste capítulo, todas as bases da estrutura conhecida 
como banco de dados, assim como seus principais conceitos e vantagens 
de uso. Além disso, conhecemos os sistemas gerenciadores de banco de 
dados (SGBD), um importante software utilizado em grande escala nos 
sistemas de informações. Sem ele, atualmente, seria impossível processar 
os dados dos sistemas, devido à grande quantidade de informações ma-
nipuladas pelos sistemas.
Conhecemos os conceitos iniciais necessários para a modelagem dos 
dados e a posterior utilização dos bancos de dados; vimos, também, as 
principais tarefas dos SGBD e como elas são importantes para manter a 
integridade dos dados e o sucesso dos sistemas de informações.
ATIVIDADES
1. O que são os sistemas gerenciadores de banco de dados (SGBD)? 
Comente.
2. Quais são as vantagens da utilização de um banco de dados? Cite cinco.
3. Conceitue tabela, linha e atributo.
Como curiosidade, assista 
ao vídeo O que é BANCO 
DE DADOS e porque IN-
TERESSA APRENDER isso?, 
publicado pelo canal 
DBA PRO. Ele mostra, de 
uma maneira dinâmica e 
interativa, os principais 
conceitos de bancos de 
dados. Vale conferir!
Disponível em: https://
www.youtube.com/
watch?v=XfO3TRvESBo. Acesso em: 
9 mar. 2021.
Vídeo
Vídeo
Conceitos gerais de modelagem de banco de dados 35
REFERÊNCIAS 
AMADEU, C. Banco de dados. São Paulo: Pearson Education do Brasil, 2014.
DATE, C. J. Introdução a sistemas de banco de dados. 8. ed. Rio de Janeiro: Elsevier, 2003.
ELMASRI, R.; NAVATHE, S. Sistemas de banco de dados. 6. ed. São Paulo: Pearson Education 
do Brasil, 2013.
FACEBOOK. Apaixonados por aviões!! Facebook: Lourdes Cavalcante. Disponível em: https://
www.facebook.com/groups/401297713387007. Acesso em: 9 mar. 2021.
LAUDON, K.; LAUDON, J. Sistemas de informação gerenciais. 11. ed. São Paulo: Pearson 
Education do Brasil, 2015.
MEDEIROS, L. Banco de dados: princípios e prática. Curitiba: Intersaberes, 2013.
RAMAKRISHNAN, R.; GEHRKE, J. Sistemas de gerenciamento de banco de dados. 3. ed. São 
Paulo: McGraw-Hill, 2008.
SILBERSCHATZ, A.; KORTH, H. F.; SUDARSHAN, S. Sistema de banco de dados. 7. ed. Rio de 
Janeiro: LTC, 2020.
36 Modelagem de banco de dados e SQL
2
Modelo relacional
O modelo relacional tem esse nome vindo das teorias mate-
máticas com os conceitos de relações e funções, haja vista que os 
dados serão armazenados em uma estrutura de relações. A partir 
dessa base, começaremos a construir os modelos conceitual e ló-
gico, necessários para organizar os dados que serão colocados em 
um banco de dados.
Após a tarefa de levantamento de requisitos, na qual todos 
os dados necessários para a solução do problema foram levan-
tados, partiremos para a construção do modelo conceitual de 
dados, com a finalidade de analisar os requisitos e os dados re-
lacionados a eles, bem como as regras de negócio que devem 
ser aplicadas. Assim, teremos uma primeira versão dos dados 
que devemos modelar.
Na sequência, os dados serão organizados em tabelas, para 
a aplicação de uma técnica chamada normalização, que procu-
ra organizar essas tabelas a fim de evitar anomalias na utiliza-
ção desses dados.
Por fim, após a aplicação das técnicas e a colocação dos 
relacionamentos entre as tabelas, teremos o modelo lógico de 
dados, cujo desenvolvimento é o objetivo deste capítulo.
2.1 Modelo conceitual 
Vídeo O processo de modelagem dos dados envolve diversas etapas. A 
primeira delas é a fase de levantamento dos requisitos, quando deve-
mos ter contato com o problema a ser resolvido e realizar as tarefas de 
análise do sistema. Nessa etapa, além de conhecer o problema que o 
usuário deseja que seja resolvido, tomamos conhecimento dos dados 
envolvidos, tanto no problema como na solução.
Modelo relacional 37
O modelo conceitual, então, nada mais é do que entender os 
conceitos relacionados ao problema e representar suas relações e 
características.
Para entendermos todas as etapas da modelagem, assim como o 
local em que se encontra o modelo conceitual, vejamos a Figura 1, que 
ilustra todas as etapas: desde o contato com o problema, passando 
pela fase de levantamento dos requisitos e até os diversos modelos de 
dados que serão criados.
Figura 1
Etapas da modelagem de dados
Levantamento
de requisitos
Minimundo
Modelo
conceitual
Modelo
lógico
Modelo
físico
Fonte: Elaborada pelo autor.
Na primeira etapa de levantamento de requisitos, os projetistas de 
banco de dados entrevistamos usuários, para entenderem o minimun-
do e, principalmente, os dados envolvidos (ELMASRI; NAVATHE, 2013).
O termo minimundo representa o contexto do problema a ser resolvido. 
Em quase todas as organizações, existem diversos assuntos envolvidos na 
administração do seu negócio. Por exemplo, no caso do negócio de uma 
loja que vende produtos, poderíamos ter diversos contextos, como admi-
nistração dos funcionários, contas a pagar, contas a receber, contabilidade, 
controle das vendas da loja, logística de entrega, entre outros. 
Seria possível dizer que todo o negócio seria o mundo dessa empresa. 
No momento que um desses contextos é escolhido para ser informatiza-
do, por meio da produção de um sistema de informação, podemos chamar 
esse contexto de minimundo. Esse termo é meramente conceitual e outros 
semelhantes poderiam ser usados para representar a mesma ideia. Essa 
descrição de minimundo foi sugerida por Elsmari (2013). O que realmente 
importará é a delimitação correta do contexto em que o sistema deve focar.
38 Modelagem de banco de dados e SQL
Partindo desse contexto, e com os requisitos definidos, o primeiro 
modelo a ser produzido é o modelo conceitual dos dados.
2.1.1 Transformação do minimundo em um modelo 
conceitual
Primeiramente, devemos analisar o minimundo e a lista de requisi-
tos produzida. Vários conceitos estão descritos, bem como suas regras 
de negócio, e, principalmente, os dados que devem ser organizados.
É importante não esquecer que a fase de modelagem dos dados vem 
depois de todo o trabalho de análise do sistema, ou seja, teremos à dis-
posição diversos diagramas produzidos, para analisar e retirar os dados.
Para entender melhor a confecção do modelo conceitual, vamos 
usar como exemplo uma escola de natação. Nesse negócio, existem 
diversos contextos, tais como as aulas que os alunos terão, a adminis-
tração dos professores e demais funcionários da escola, a manutenção 
das piscinas, os materiais que devem ser usados para a limpeza, o con-
trole da parte financeira, a contabilidade, entre outros. Desse modo, 
vamos supor que o dono da escola solicitou a informatização de todo 
o contexto das aulas: o cadastro dos alunos; as matrículas; e o controle 
de frequência. Nesse “minimundo”, poderíamos analisar como seria o 
modelo conceitual de dados.
A descrição do minimundo seria a seguinte:
 • Os alunos devem ser cadastrados no sistema para que possam 
se matricular.
 • O cadastro de todos os professores da escola e quais modalida-
des cada um está apto a trabalhar também deve ser feito, para 
que eles sejam devidamente alocados nas turmas segundo a 
especialidade.
 • As turmas já devem estar previamente definidas e cadastradas 
com seus dias/horários e com o professor definido.
 • Todas as opções de modalidade, turmas, dias/horários e profes-
sores disponíveis, para que o aluno tenha a possibilidade de vi-
sualização, devem constar no processo de matrícula.
 • O professor, durante as aulas, deve ter condições de controlar a 
frequência dos alunos.
O processo de levantamento dos requisitos desse problema deve 
ter produzido uma lista de requisitos, como mostra o Quadro 1.
Modelo relacional 39
Quadro 1
Lista de requisitos: escola de natação
Requisito Descrição Regras de negócio Atributos
R1 – Manter cadastro 
dos alunos
Permitir o cadastro com-
pleto dos alunos.
Permitir pesquisar, incluir, 
alterar e consultar.
Não permitir a exclusão de 
um aluno, somente marcar 
como inativo.
cpf, Nome, Telefone, 
Endereço.
R2 – Manter cadastro 
dos professores
Permitir o cadastro com-
pleto dos professores.
Permitir pesquisar, incluir, 
alterar, excluir e consultar.
cpf, Nome, Data de 
Admissão, Modalidade 
(Natação ou Hidroginástica).
R3 – Manter cadastro 
das turmas
Permitir o cadastro 
completo das turmas, 
sua modalidade (natação 
ou hidroginástica), seus 
dias/horários e qual é o 
professor responsável.
Não permitir o cadastro 
de duas turmas da mesma 
modalidade no mesmo 
horário.
Uma turma deve ter um 
Nome (Turma 1, Turma 2 etc.), 
Modalidade (Natação ou 
Hidroginástica), os dias da 
semana, a Turma, os Horários, 
o Professor e o valor da 
Mensalidade.
R4 – Matricular 
alunos
Matricular os alunos nas 
turmas.
Pessoas com mais de 
80 anos só podem se 
matricular na modalidade 
hidroginástica.
Número da Matrícula, 
Data, Turma e Aluno.
R5 – Registrar 
frequência
Registrar frequência no 
diário de classe de cada 
aula.
Aluno, Data, Frequência.
Fonte: Elaborado pelo autor.
Podemos perceber nesse quadro um maior detalhamento das fun-
ções do sistema. Em cada requisito, temos uma ideia de quais serão os 
dados envolvidos (última coluna do quadro). Devemos, agora, identifi-
car as entidades e seus atributos. Para isso, por exemplo, pegamos o 
primeiro requisito:
 • R1 – Manter cadastro dos alunos
Podemos fazer uma relação dos atributos necessários para o aluno, 
conforme consta no Quadro 1.
Aluno (cpf, nome, telefone, endereço)
 • R2 – Manter cadastro dos professores
Professor (cpf, nome, data de admissão, modalidades)
Regras de negócio:
40 Modelagem de banco de dados e SQL
 • Na escola de natação as modalidades são natação ou 
hidroginástica.
 • Um professor pode atuar nessas duas modalidades.
 • R3 – Manter cadastro das turmas
Turma (código, nome, modalidade, descrição do dia e 
horário, professor,valor da mensalidade)
Regra de negócio: o atributo descrição do dia e horário deve 
ser preenchido seguindo o padrão destes exemplos:
 • Seg/Ter/Sex, das 9h às 10h.
 • Ter/Qui, das 7h às 8h.
 • R4 – Matricular alunos
Matrícula (número, data, turma, aluno)
 • R5 – Registrar frequência
Frequência (matrícula, data, frequentou)
Assim, após essa análise, poderíamos ter a relação de entidades do 
sistema.
Aluno (cpf, nome, telefone, endereço).
Professor (cpf, nome, data de admissão, modalidade).
Turma (código, nome, modalidade, descrição do dia e 
horário, professor, valor da mensalidade).
Matrícula (número, data, turma, aluno).
Frequência (matrícula, data, frequentou).
De posse dessas entidades identificadas com seus atributos, parti-
mos para um detalhamento de seus componentes e os relacionamen-
tos entre elas, por meio do modelo lógico e físico.
2.2 Modelo lógico 
Vídeo Antes de partirmos para a transformação do modelo conceitual em 
modelo lógico, precisamos entender a estrutura de armazenamento 
que usaremos, pois os dados, após organizados, serão colocados em 
um banco de dados relacional.
O vídeo História do SQL 
Server, publicado pelo 
canal Diego Nogare, 
conta a história de 
um famoso banco de 
dados: o SQL Server da 
Microsoft.
Disponível em: https://
www.youtube.com/
watch?v=7qKToaOZBd8 
&feature=youtu.be. Acesso em: 
31 mar. 2021.
Vídeo
Modelo relacional 41
2.2.1 Banco de dados relacional
Segundo Silberschatz, Korth e Sudarshan (2020, p. 22), “um banco de 
dados relacional consiste em uma coleção de tabelas, cada qual receben-
do um nome exclusivo”. O termo relação é usado para se referir a uma 
tabela, com seus atributos e suas linhas (também chamados de colunas e 
tuplas).
O uso de banco de dados relacional é a principal forma de armaze-
namento utilizada em bancos de dados. É um modelo simples e de fácil 
entendimento pelos programadores, se comparado aos modelos em 
rede e hierárquico (mais antigos). Como exemplo, imagine uma univer-
sidade e a relação de cursos que ela oferece.
Quadro 2
Relação de cursos de uma universidade
Código Curso Coordenador
TADS Tecnologia em Análise e Desenvolvimento de Sistemas Joaquim José
BAM Bacharelado em Matemática João da Silva
DIR Bacharelado em Direito Amanda Rodrigues
Fonte: Elaborado pelo autor.
As tabelas podem estar relacionadas para que informações de uma 
tabela sejam detalhadas em outras tabelas. Nesse exemplo, imagine a 
relação de alunos da universidade com a informação de seu respectivo 
curso, constante no Quadro 3.
Quadro 3
Relação de alunos
Código Nome Código do curso
001 Flávio Gonçalves DIR
002 Maria José BAM
003 Gabriel HenriqueTADS
Fonte: Elaborado pelo autor.
Dessa forma, ao levantarmos todas as tabelas necessárias para um 
determinado sistema, com todas as relações entre elas, teremos um 
banco de dados relacional.
42 Modelagem de banco de dados e SQL
Com o modelo conceitual visto na seção anterior, temos que come-
çar a organizar as entidades em forma de tabelas, a fim de prepará-las 
para que sejam colocadas em um banco de dados relacional.
O modelo lógico de dados procura organizar as entidades em tabelas 
e seus atributos, além de aplicar técnicas de organização desses dados, 
com o intuito de evitar anomalias nos processos de inclusão, alteração e 
exclusão de dados que poderiam acarretar falta de integridade dos dados. 
Nesse nível também são identificados os atributos que irão compor a chave 
da tabela, bem como os relacionamentos que devem existir entre elas.
2.2.2 Organização em tabelas
Devemos organizar, agora, as entidades em forma de tabelas e, em 
seguida, aplicar uma técnica chamada normalização.
As tabelas serão representadas por retângulos, nos quais, no topo, co-
locamos o nome da tabela e, na sequência, a relação dos seus atributos. 
Para este nível, o nome dos atributos deve ser abreviado e não conter 
espaços ou traços entre as palavras. Por padrão da maioria dos bancos de 
dados, esses nomes de atributos devem ser escritos com letras minúscu-
las. Nesse diagrama, também, as palavras não são acentuadas, já que no 
banco de dados e nas linguagens de programação isso não é permitido.
A Figura 2 mostra as entidades do problema da escola de natação 
organizadas em forma de tabelas. Tais tabelas foram extraídas do mo-
delo conceitual.
aluno
cpf
nome
telefone
endereco
professor
cpf
nome
data_
admissao
modalidade
frequencia
matricula
data
frequentou
matricula
numero
data
turma
aluno
turma
codigo
nome
modalidade
descricao_dia_horario
professor
Figura 2
Tabelas do problema da escola de natação
Fonte: Elaborada pelo autor.
Modelo relacional 43
A seguir, a fim de continuarmos a organização das tabelas e che-
garmos ao modelo lógico, analisaremos o processo de normalização 
das tabelas. Para esse processo, elas devem ser identificadas com suas 
chaves primárias.
Como vimos, uma chave primária é composta por um ou mais atri-
butos, que identificam de modo único um determinado elemento. Por 
exemplo, na tabela aluno, podemos perceber que não existem alunos 
com o mesmo CPF, ou seja, o CPF pode ser utilizado para identificar um 
aluno, então, o atributo cpf será a chave primária dessa tabela.
Para simbolizar a chave primária, usaremos um sublinhado no 
nome do atributo, como apresentado na Figura 2.
2.2.3 Normalização
Normalização é um processo de análise das tabelas e de aplicação 
das técnicas. Seu objetivo é organizar essas tabelas antes de seu arma-
zenamento no banco de dados. O armazenamento incorreto das tabe-
las não normalizadas leva a um problema de anomalias de inserção, 
exclusão e atualização (ELMASRI; NAVATHE, 2013).
Como exemplo de anomalia, podemos analisar a tabela professor. 
Como nela existe o atributo modalidade, só é possível incluir uma 
nova modalidade quando tivermos um professor para ela. E se quiser-
mos somente cadastrar uma modalidade? Nesse modelo, isso não se-
ria possível, por isso é uma anomalia. Da mesma forma, se excluirmos 
o professor de uma determinada modalidade, perdemos a informação 
dessa modalidade. Além disso, se quisermos alterar o nome de uma 
determinada modalidade, temos de fazer essa alteração em todos os 
professores dessa modalidade.
Basicamente, o processo de normalização avalia cada tabela e apli-
ca os critérios das formas normais, decompondo em uma ou mais ta-
belas, conforme a necessidade, gerando novas tabelas que sigam os 
critérios das formas (ELMASRI; NAVATHE, 2013).
A seguir, iremos conhecer e aplicar as três formas normais que são 
aplicadas nas tabelas.
44 Modelagem de banco de dados e SQL
2.3 Primeira forma normal (1FN) 
Vídeo Com o objetivo de entender o processo de normalização, na 1FN e 
nas demais, faremos a análise e a aplicação das regras em duas etapas. 
Em primeiro lugar, apresentaremos a regra da 1FN e, em seguida, a 
forma de aplicá-la.
2.3.1 Regra da 1FN
Segundo Date (2003), uma tabela está na 1FN se, e somente se, em 
todo valor válido dessa tabela cada linha contém exatamente um valor 
para cada atributo.
Em termos práticos, uma tabela está na 1FN se:
 • contém somente atributos simples;
 • não contém atributos totalizadores (que podem ser obtidos por 
operações sobre outros atributos);
 • não contém atributos repetidos;
 • todas as linhas são diferentes em relação à chave primária.
Para exemplificar a 1FN, temos a tabela aluno e, para melhor en-
tendimento, colocamos algumas linhas na tabela.
Tabela aluno
cpf nome telefone endereco
12345678901 Joaquim José 41-987463666
Rua das Carmelitas, 2213, 
sobrado 1, Esmeraldas, 
800000, Curitiba/PR
54355656566 Maria Andrade 41-987455565
Rua XV de Novembro, 415 
ap. 10, 80000, Curitiba/PR
Ao analisar o atributo endereço nessa tabela, podemos perceber 
que se trata de um atributo composto, ou seja, pode ser subdividido 
em vários outros, pois um endereço é a composição do nome da rua, 
número, complemento, bairro, cep, cidade e estado. Então, no modelo 
lógico, devemos decompor esse atributo.
Como 1FN exige que todos os atributos sejam simples, devemos de-
compor em diversos atributos simples, e a tabela ficaria desta forma:
Modelo relacional 45
aluno
cpf
nome
telefone
rua
numero
complemento
cep
cidade
estado
O exemplo da tabela ficaria do seguinte modo:
Tabela aluno
cpf nome telefone rua numero complemento cep cidade estado
12345678901
Joaquim 
José
41-987463666
Rua das 
Carme-
litas
2213 Sobrado 1 800000 Curitiba PR
54355656566
Maria 
Andra-
de
41-987455565
Rua 
XV de 
Novem-
bro
415 Ap. 10 800000 Curitiba PR
Outro atributo que poderia ferir a 1FN seria o telefone nessa mesma 
tabela. Caso se queira armazenar mais de um telefone do aluno – o que 
pode ocorrer –, não se poderia incluir atributos como telefone1, tele-
fone 2..., telefone n. Isso iria ferir o terceiro item da 1FN: não contém 
atributos repetitivos. Nesse caso, o que poderia ser feito é colocar os atri-
butos telefone_celular, telefone_comercial etc.
Finalmente, a verificação mais importante para 1FN é a última regra: 
todas as linhas são diferentes em relação à chave primária.
Se analisarmos agora a tabela professor segundo a regra de 
negócio do sistema, que diz “um professor pode atuar em várias 
modalidades”, o atributo modalidades presente na tabela faz com que 
ocorram duas linhas iguais em relação à chave primária, caso um pro-
fessor atue em mais de uma modalidade.
Veja o exemplo de um professor com cpf 98615457689, que é profes-
sor de natação e também de hidroginástica. Para colocarmos essas duas 
informações na linha desse professor, teríamos um atributo com mais de 
46 Modelagem de banco de dados e SQL
um valor, o que não é permitido na 1FN. Seria necessário repetir a linha 
desse professor para colocarmos a segunda modalidade em que ele atua.
professor
cpf
nome
data_admissao
modalidades
Tabela professor
cpf nome data_admissao modalidade
98615457689 Augusto Araújo 19/03/2010 Natação
98615457689 Augusto Araújo 19/03/2010 Hidroginástica
Perceba que, com relação ao cpf (chave primária), temos duas li-
nhas com o mesmo número, o que não é permitido em 1FN. Isso foi ne-
cessário para incluir mais uma linha informando que o professor atua 
também na modalidade hidroginástica.
Há outro ponto causando problema: da forma que está, não existe 
possibilidade de realizar o cadastro das modalidades até que se tenha 
um professor cadastrado. Vale ressaltar que, no momento que todos os 
professores forem excluídos, todas as modalidades também serão.
2.3.2 Como aplicar a 1FN
Para eliminar o problema e deixar a tabela na 1FN, devemos retirar o 
atributo modalidade dessa tabela (já que é ele quem causa a repetição 
da chave) e criar uma tabela na qual achave será composta do cpf e de 
um novo atributo chamado código da modalidade, com sua descrição.
As tabelas, então, ficariam do seguinte modo:
professor
cpf
nome
data_admissao
modalidade_professor
professor_cpf
modalidade_codigo
descricao_modalidade
Modelo relacional 47
E os dados, desta forma:
Tabela professor
cpf nome data_admissao
98615457689 Augusto Araújo 19/03/2010
Tabela modalidade_professor
professor_cpf modalidade_codigo descricao_modalidade
98615457689 1 Natação
98615457689 2 Hidroginástica
Perceba que na nova tabela, modalidade_professor, não há re-
petição com relação à chave, já que ela é composta dos dois atributos 
(sublinhados): professor_cpf e modalidade_codigo.
Analisando as demais tabelas, não existem mais atributos ferindo a 1FN.
Figura 3
Tabelas do problema da escola de natação na 1FN
aluno
cpf
nome
telefone
rua
numero
complemento
bairro
cep
cidade
estado
professor
cpf
nome
data_admissao
matricula
numero
data
turma
aluno
modalidade_professor
professor_cpf
modalidade_codigo
descricao_modalidade
turma
codigo
nome
modalidade
descricao_dia_horario
professor
frequencia
matricula
data
frequentou
Fonte: Elaborada pelo autor.
48 Modelagem de banco de dados e SQL
Então, podemos dizer que o modelo lógico na primeira forma nor-
mal é esse. Agora, continuamos no processo de normalização aplican-
do as demais formas normais.
2.4 Segunda forma normal (2FN) 
Vídeo Primeiramente, apresentaremos a regra da 2FN e, em seguida, a 
forma de aplicá-la.
2.4.1 Regra da 2FN
Conforme Date (2003), uma tabela está na 2FN se estiver na 1FN e 
se todo atributo não chave for irredutivelmente dependente da tota-
lidade chave primária. Assim, analisamos cada um dos atributos que 
não pertencem à chave primária e verificamos se esse atributo é uma 
informação de todos os atributos da chave.
Como consequência, devemos analisar somente as tabelas com 
mais de um atributo na chave primária, já que as tabelas com somente 
um atributo na chave jamais irão ferir essa regra.
Primeiramente, verificamos no modelo que está na 1FN quais tabelas 
têm mais de um atributo na chave primária. No caso do nosso exemplo, 
somente a tabela modalidade_professor se encaixa nesse quesito.
modalidade_professor
professor_cpf
modalidade_codigo
descricao_modalidade
O único atributo que não pertence à chave primária é descricao_
modalidade. Então a dúvida é: esse atributo é uma informação de to-
dos os atributos da chave (professor_cpf e modalidade_codigo)? 
É importante ressaltar que descricao_modalidade pode conter os 
valores Natação e Hidroginástica.
Esses nomes variam de professor para professor? A resposta é não; 
a descricao_modalidade é uma informação somente da modalida-
de, e não do professor. Como a modalidade está representada pelo 
atributo modalidade_codigo, podemos deduzir que o atributo des-
Modelo relacional 49
cricao_modalidade é uma informação somente da modalidade, e 
não depende do professor. Deduzimos, então, que esse atributo não é 
a informação da totalidade da chave e está ferindo a 2FN.
2.4.2 Como aplicar a 2FN
Nesse caso, devemos criar uma tabela para acomodar este atributo 
descricao_modalidade, levando também a parte da chave que lhe 
diz respeito, no caso, modalidade_codigo, e na tabela original retirar 
esse atributo.
A tabela modalidade_professor e a nova tabela, que chamare-
mos de modalidade, ficariam desta forma:
modalidade_professor
professor_cpf
modalidade_codigo
modalidade
codigo
descricao
Note que mudamos os nomes dos atributos na nova tabela moda-
lidade para somente codigo e descrição, já que, por se tratar da 
tabela modalidade, não há mais a necessidade de colocar esse sufixo 
no nome dos atributos. Exemplificando essas duas novas tabelas com 
dados, teríamos:
Tabela modalidade_professor
professor_cpf modalidade_codigo
98615457689 1
98615457689 2
Tabela modalidade
codigo descricao
1 Natação
2 Hidroginástica
3 Recreação na piscina
Assim, como não existem mais tabelas com mais de um atributo na 
chave primária para analisarmos, o modelo na 2FN fica como mostra 
a Figura 4.
50 Modelagem de banco de dados e SQL
Figura 4
Tabelas do problema da escola de natação na 2FN
aluno
cpf
nome
telefone
rua
numero
complemento
bairro
cep
cidade
estado
professor
cpf
nome
data_admissao
matricula
numero
data
turma
aluno
modalidade_professor
professor_cpf
modalidade_codigo
turma
codigo
nome
modalidade
descricao_dia_horario
professor
frequencia
matricula
data
frequentou
modalidade
codigo
descricao
Fonte: Elaborada pelo autor.
Após aplicarmos a 2FN, resolvemos o problema que aparecia na 
1FN, em que só era possível cadastrar uma nova modalidade se tivés-
semos um professor nessa modalidade. Na 2FN, como criamos uma 
tabela de modalidades, agora é possível cadastrar novas, mesmo não 
tendo ainda um professor para elas. É o caso da terceira linha colocada 
na tabela modalidade no exemplo da Figura 4.
2.5 Terceira forma normal (3FN) 
Vídeo Finalmente, será aplicada a terceira forma normal. Como nas ante-
riores, primeiramente, apresentaremos a regra da 3FN e, em seguida, 
a forma de aplicar a regra.
Modelo relacional 51
2.5.1 Regra da 3FN
Para Date (2003), uma tabela está na 3FN se estiver na 2FN e se todo 
atributo não chave for dependente de maneira não transitiva da cha-
ve primária. Em outras palavras, um atributo não pode ser uma nova 
tabela, ele deve ser dependente somente da chave, e não de outro atri-
buto não chave.
No exemplo, as tabelas turma, matricula, aluno e frequencia 
estão ferindo a 3FN, por isso é necessário analisar cada uma delas.
Primeira tabela que fere a 3FN – turma:
turma
codigo
nome
modalidade
descricao_dia_horario
professor
Em termos de ilustração com dados, a tabela turma seria:
Tabela turma
codigo nome modalidade descricao_dia_horario professor
10 Turma 1 Natação Seg/Qua/Sex das 9h às 19h Augusto Araújo
20 Turma 2 Hidroginástica Ter/Qui das 7h às 8h Augusto Araújo
Essa tabela contém o atributo modalidade, que, por sua vez, é 
uma tabela do modelo. Desse modo, temos o caso de um atributo ser 
uma tabela, o que fere a 3FN. O mesmo ocorre com o atributo profes-
sor, já que temos uma tabela com esse nome.
2.5.2 Como aplicar a 3FN
No lugar desses atributos, incluímos a chave primária das respecti-
vas tabelas, acrescentando o nome da tabela ao nome do atributo-cha-
ve. No caso da modalidade, substituímos por modalidade_codigo; 
no caso de professor, substituímos pelo professor_cpf.
Então a tabela turma ficaria assim:
52 Modelagem de banco de dados e SQL
turma
codigo
nome
modalidade_codigo
descricao_dia_horario
professor_cpf
Em termos de ilustração com dados, colocamos as tabelas profes-
sor, modalidade e turma.
Tabela professor
cpf nome data_admissao
98615457689 Augusto Araújo 19/03/2010
Tabela modalidade
codigo descricao
1 Natação
2 Hidroginástica
3 Recreação na piscina
Tabela turma
codigo nome modalidade_codigo descricao_dia_horario professor_cpf
10 Turma 1 1 Seg/Qua/Sex das 9h às 19h 98615457689
20 Turma 2 2 Ter/Qui das 7h às 8h 98615457689
Segunda tabela que fere a 3FN – matricula:
matricula
numero
data
turma
aluno
Modelo relacional 53
Em termos de ilustração com dados, a tabela de matricula seria:
Tabela matricula
numero data turma aluno
100 25/01/2021 Turma 1 Joaquim José
200 01/02/2021 Turma 2 Maria Andrade
Essa tabela contém o atributo turma que, por sua vez, é uma tabela 
do modelo. Sendo assim, temos o caso de um atributo ser uma tabela, 
o que fere a 3FN. O mesmo ocorre com o atributo aluno, já que temos 
uma tabela com esse nome.
Substituímos a turma por turma_codigo e, no caso de aluno, 
substituímos por aluno_cpf.
Então, a tabela matricula ficaria assim:
matricula
numero
data
turma_codigo
aluno_cpf
Em termos de ilustração com dados, as tabelas turma, aluno e 
matricula ficariam:
Tabela turma
codigo nome modalidade_codigo descricao_dia_horario professor_cpf
10 Turma 1 1 Seg/Qua/Sex das 9h às 19h 98615457689
20 Turma 2 2 Ter/Qui das 7h às 8h98615457689
Tabela aluno
cpf nome telefone rua numero complemento cep cidade estado
12345678901
Joaquim 
José
41-
987463666
Rua das 
Carmelitas
2213 Sobrado 1 800000 Curitiba PR
54355656566
Maria 
Andrade
41-
987455565
Rua XV de 
Novembro
415 Ap. 10 800000 Curitiba PR
54 Modelagem de banco de dados e SQL
Tabela matricula
numero data turma_codigo aluno_cpf
100 25/01/2021 10 12345678901
200 01/02/2021 20 54355656566
Terceira tabela que fere a 3FN – aluno:
aluno
cpf
nome
telefone
rua
numero
complemento
bairro
cep
cidade
estado
Em termos de ilustração com dados, a tabela de aluno seria:
Tabela aluno
cpf nome telefone rua numero complemento cep cidade estado
12345678901
Joaquim 
José
41-
987463666
Rua das 
Carmelitas
2213 Sobrado 1 800000 Curitiba PR
54355656566
Maria 
Andra-
de
41-
987455565
Rua XV de 
Novembro
415 Ap. 10 800000 Curitiba PR
Nessa tabela, além existir um atributo que é uma tabela, haverá tam-
bém o atributo cidade, que, por sua vez, na nova tabela terá o atributo 
estado. Ambas serão novas tabelas, já que ainda não constam do modelo.
Substituímos a cidade por cidade_codigo e criamos a tabela 
cidade levando o atributo estado para ela, já que esse é um atributo 
de uma cidade.
Modelo relacional 55
Desse modo, a tabela aluno ficaria desta forma:
aluno
cpf
nome
telefone
rua
numero
complemento
bairro
cep
cidade_codigo
E uma nova tabela cidade seria criada:
cidade
codigo
nome
estado
Essa nova tabela, porém, também fere a 3FN, já que o atributo estado 
se refere a uma tabela. Assim, nessa tabela cidade substituímos o estado 
pelo atributo estado_sigla e este será a chave da nova tabela estado.
cidade
codigo
nome
estado_sigla
estado
sigla
nome
Em termos de ilustração com dados, as tabelas aluno, cidade e 
estado ficariam:
Tabela aluno
cpf nome telefone rua numero complemento cep
cidade_
codigo
12345678901
Joaquim 
José
41-
987463666
Rua das 
Carmelitas
2213 Sobrado 1 800000 1
54355656566
Maria 
Andrade
41-
987455565
Rua XV de 
Novembro
415 Ap. 10 800000 1
56 Modelagem de banco de dados e SQL
Tabela cidade
codigo nome estado_sigla
1 Curitiba PR
2 São Paulo SP
Tabela estado
sigla nome
PR Paraná
SP São Paulo
Quarta tabela que fere a 3FN – frequencia:
frequencia
matricula
data
frequentou
Em termos de ilustração com dados, a tabela frequencia seria:
Tabela frequencia
matricula data frequentou
100 15/02/2021 Sim
100 17/02/2021 Não
Essa tabela contém o atributo matricula, que, por sua vez, é uma 
tabela do modelo. Desse modo, temos o caso de um atributo ser uma 
tabela, o que fere a 3FN.
No lugar desse atributo, substituímos pela chave primária da tabela 
matricula, acrescentando o nome da tabela ao nome do atributo-cha-
ve, então o atributo matricula é substituído por matricula_numero.
Assim, a tabela frequencia ficaria da seguinte forma:
frequencia
matricula_numero
data
frequentou
Modelo relacional 57
Em termos de ilustração com dados, temos:
Tabela frequencia
matricula_numero data frequentou
100 15/02/2021 Sim
100 17/02/2021 Não
Com isso, nenhuma tabela está ferindo as três formas normais, e as 
tabelas ficam como mostra a Figura 5.
Figura 5
Tabelas do problema da escola de natação na 3FN
aluno
cpf
nome
telefone
rua
numero
complemento
bairro
cep
cidade_codigo
professor
cpf
nome
data_admissao
matricula
numero
data
turma_codigo
aluno_cpf
modalidade_professor
professor_cpf
modalidade_codigo
turma
codigo
nome
professor_cpf
modalidade_codigo
descricao_dia_horario
frequencia
matricula_numero
data
frequentou
modalidade
codigo
descricao
estado
sigla
nome
cidade
codigo
nome
estado_sigla
Fonte: Elaborada pelo autor.
Com as tabelas definidas e na 3FN, o último passo da construção do 
modelo lógico é a inserção dos relacionamentos.
58 Modelagem de banco de dados e SQL
2.6 Relacionamentos entre as tabelas 
Vídeo Para finalizar o modelo lógico, devemos verificar a maneira como as 
tabelas se relacionam e fazer uma ligação entre elas para representar 
essa forma.
De acordo com Date (2003, p. 355), um relacionamento é “uma as-
sociação entre entidades”.
Podemos perceber que muitos dos atributos fazem referência a ou-
tras tabelas, justamente para complementar os dados de uma linha e 
que, por força da aplicação das formas normais, tiveram que ser colo-
cados em outras tabelas.
Se olharmos a tabela aluno, por exemplo, e desejarmos saber o 
nome da cidade na qual ele mora, essa informação não estará explícita 
na tabela. Ali existe somente o código da cidade; com esse código é 
possível acessar a tabela cidade para buscar seu nome.
É possível perceber, então, que essas tabelas estão relacionadas. 
Nesta seção, aprenderemos os tipos de relacionamentos que podem 
existir entre tabelas e como representá-los no modelo lógico.
2.6.1 Relacionamento 1-para-muitos
Nesse tipo de relacionamento, também chamado de 1:n (lê-se “um 
para n”), uma determinada linha de uma tabela pode estar relacionada 
a nenhuma, a uma ou a mais linhas de outra tabela.
Citaremos como exemplo a tabela de cidade e a tabela de aluno. Se 
escolhermos uma determinada cidade na tabela cidade e verificarmos 
a tabela aluno, teremos que uma determinada cidade pode ter diversos 
alunos que moram nela, ou seja, uma cidade tem muitos alunos. Assim, 
acabamos de constatar um relacionamento entre essas duas tabelas.
Para efeito de visualização com dados, colocamos duas cidades na 
tabela cidade (Curitiba e São Paulo) e vários alunos na tabela aluno 
com o código de uma dessas cidades (Joaquim José e Maria Andrade, 
que moram em Curitiba). Também temos o aluno Arnaldo Antunes, 
que mora em São Paulo.
Modelo relacional 59
Tabela cidade
código nome estado_sigla
1 Curitiba PR
2 São Paulo SP
3 Joinville SC
Tabela aluno
cpf nome telefone rua numero complemento cep
cidade_ 
codigo
12345678901
Joaquim 
José
41-
987463666
Rua das 
Carmelitas
2213 Sobrado 1 800000 1
54355656566
Maria 
Andrade
41-
987455565
Rua XV de 
Novembro
415 Ap. 10 800000 1
34265536666
Arnaldo 
Antunes
11-
987656535
Rua das 
Amélias
23 110000 2
Nesse exemplo, podemos perceber que a primeira cidade, Curitiba, 
está relacionada a dois alunos (Joaquim José e Maria Andrade); a segun-
da cidade, São Paulo, está relacionada a um aluno (Arnaldo Antunes); e 
a terceira, Joinville, a nenhum aluno.
Em termos de representação no modelo lógico, quando existe um re-
lacionamento 1-para-muitos, colocamos uma linha entre as tabelas e, ao 
lado da tabela que representa o “muitos” (tabela aluno, nesse exemplo), 
acrescentamos três linhas pequenas, como mostra a Figura 6.
Figura 6
Exemplo de relacionamento 1-para-muitos
aluno
cpf
nome
telefone
rua
numero
complemento
bairro
cep
cidade_codigo
cidade
codigo
nome
estado_sigla
Fonte: Elaborada pelo autor.
60 Modelagem de banco de dados e SQL
A referida notação de relacionamento é normalmente chamada de 
notação pé de galinha, já que a extremidade colocada na tabela e que 
representa “muitos” se parece com o pé de uma galinha.
2.6.2 Relacionamento 1-para-1
Também chamado de 1:1 (lê-se “um para um”), nesse tipo de re-
lacionamento uma determinada linha de uma tabela está relacionada 
somente a uma linha de outra tabela.
No exemplo da escola de natação, não temos esse tipo de situação, en-
tão analisaremos duas tabelas: uma contendo todos os países do mundo 
e outra contendo todas as capitais dos países, por exemplo.
Nesse exemplo, um país tem somente uma capital e uma capital é 
capital de um único país, por isso temos um relacionamento 1-para-1 
entre essas duas tabelas.
Tabela pais
codigo nome capital_codigo
1 Brasil 10
2 Argentina 20
3 Chile 30
Tabela capital
codigo nome
10 Brasília
20 Buenos Aires
30 Santiago
Em termos de representação no modelo lógico, quando existe um 
relacionamento 1-para-1, colocamos somente uma linha entre as tabe-
las, como mostra a Figura 7.
Figura 7
Exemplo de relacionamento 1-para-1
pais
codigo
nome
capital_codigo
capital
codigo
nome
Fonte: Elaborada pelo autor.
Modelo relacional61
Existe também o relacionamento muitos-para-muitos, mas esse não 
é permitido para uso em bancos de dados, somente no diagrama de 
classes da UML 1 , e por isso não o estudaremos nesta seção.
2.6.3 Modelo lógico final com os relacionamentos
Agora, podemos finalizar o modelo lógico do exemplo da escola de 
natação com a inserção dos relacionamentos entre todas as tabelas, 
como é apresentado na Figura 8.
Figura 8
Modelo lógico final da escola de natação
aluno
cpf
nome
telefone
rua
numero
complemento
bairro
cep
cidade_codigo
professor
cpf
nome
data_admissao
matricula
numero
data
turma_codigo
aluno_cpf
modalidade_professor
professor_cpf
modalidade_codigo
turma
codigo
nome
descricao_dia_horario
professor_cpf
modalidade_codigo
frequencia
matricula_numero
data
frequentou
modalidade
codigo
descricao
estado
sigla
nome
cidade
codigo
nome
estado_sigla
Fonte: Elaborada pelo autor.
A leitura que podemos fazer de todos os relacionamentos apresen-
tados é a seguinte:
A UML é uma linguagem-padrão 
para a elaboração da estrutura 
de projetos de software. Ela 
poderá ser empregada para a 
visualização, a especificação, a 
construção e a documentação 
de artefatos que façam uso de 
sistemas complexos de software.
1
62 Modelagem de banco de dados e SQL
 • um estado tem muitas cidades;
 • uma cidade tem muitos alunos;
 • um aluno pode ter muitas matrículas;
 • uma matrícula tem muitos registros de frequência (um por aula);
 • uma turma pode ter muitas matrículas;
 • um professor pode atuar em muitas modalidades, e uma modali-
dade pode ter muitos professores;
 • pode haver muitas turmas de uma modalidade/ um professor.
Com isso, encerramos a importante construção de um modelo que 
servirá de base para a passagem ao modelo físico e ao banco de dados.
O artigo Normalização em bancos de dados, de Diego Machado, apresenta o 
processo de normalização, trazendo um exemplo diferente do que vimos 
neste capítulo.
Acesso em: 31 mar. 2021.
https://medium.com/@diegobmachado/normaliza%C3%A7%C3%A3o-em-banco-de-dados-5647cdf84a12 
Artigo
CONSIDERAÇÕES FINAIS
Neste capítulo, apresentamos os modelos conceitual e lógico de 
dados, passos iniciais para a construção de um modelo capaz de ser 
cadastrado em um banco de dados.
Para o banco de dados suportar as tabelas e seus relacionamentos, apli-
camos aos dados uma técnica chamada normalização, sem a qual diversos 
problemas poderiam acontecer no momento da utilização dos dados.
Por fim, produzimos o modelo lógico de dados, um importante diagra-
ma que servirá de base para o próximo passo do processo: a construção 
do modelo físico e a posterior implantação em um banco de dados.
ATIVIDADES 
1. O que é a normalização de tabelas? Comente.
2. Qual é a regra da primeira forma normal? 
3. Qual é o conceito de relacionamento entre as tabelas de um banco de 
dados? 
Vídeo
https://medium.com/@diegobmachado/normaliza%C3%A7%C3%A3o-em-banco-de-dados-5647cdf84a12
Modelo relacional 63
REFERÊNCIAS 
DATE, C. J. Introdução a sistemas de banco de dados. 8. ed. Rio de Janeiro: Elsevier, 2003.
ELMASRI, R.; NAVATHE, S. Sistemas de banco de dados. 6. ed. São Paulo: Pearson Education 
do Brasil, 2013.
SILBERSCHATZ, A; KORTH, H. F; SUDARSHAN, S. Sistema de banco de dados. 7. ed. Rio de 
Janeiro: LTC, 2020.
64 Modelagem de banco de dados e SQL
3
Linguagem SQL – DDL
Neste capítulo, detalharemos ainda mais os modelos conceitual 
e lógico de dados. Novos componentes serão inseridos no modelo 
lógico a fim de possibilitar o cadastro das tabelas em um sistema 
gerenciador de banco de dados (SGBD). Esses componentes são 
necessários para que o SGBD tenha condições de responder a to-
das as consultas, manipulação e administração dos dados.
Com o modelo lógico tendo suas tabelas organizadas, as téc-
nicas de normalização aplicadas e os relacionamentos entre as 
tabelas instituídos, torna-se possível avançar nos estudos para 
aprender a maneira de informar ao banco de dados quais os tipos 
de atributos das tabelas, quais são as chaves, quais as restrições 
que podem ser impostas aos atributos para que, por fim, as tabe-
las estejam em condições de serem cadastradas no banco.
Também apresentaremos um importante SGBD, amplamente 
utilizado no mercado, o PostgreSql. Aprenderemos a instalar o 
software, a criar um banco de dados e a criar as tabelas com todos 
os seus componentes, deixando o banco pronto para que um sis-
tema de informação possa utilizá-lo.
3.1 Modelo físico 
Vídeo Com o modelo lógico construído com as tabelas normalizadas, indica-
ção de chave primária e relacionamento entre as tabelas, devemos inserir 
novos componentes no modelo, a fim de prepará-lo para ser incluído em 
um sistema de gerenciamento de banco de dados.
Linguagem SQL – DDL 65
O modelo físico, assim chamado por tratar de questões físicas de 
armazenamento, prepara as tabelas para que sejam cadastradas no 
SGBD. Como vimos, um SGBD é um software com a capacidade de ad-
ministrar os dados dos sistemas de informação e é dotado de diversas 
funcionalidades para servir aos sistemas. Também é capaz de armaze-
nar e recuperar os dados da forma que o usuário desejar, provê uma 
linguagem de acesso (que veremos nas seções seguintes) para selecio-
nar dados com as condições que o usuário deseja, garante a integrida-
de dos dados, faz automaticamente cópias de segurança e recuperação 
e é responsável por toda a administração dos dados.
No entanto, para que o SGBD execute suas funções de modo eficien-
te, necessita de que algumas condições sejam satisfeitas. As tabelas de-
vem estar normalizadas, os tipos dos atributos devem ser informados, 
as chaves, as restrições de atributos e a integridade referencial devem 
ser indicadas no modelo.
As informações mencionadas serão abordadas nas próximas seções.
3.1.1 Tipos de dados
A primeira tarefa a se fazer para transformar o modelo lógico em 
modelo físico de dados é a indicação do tipo de dado de cada atributo. 
Isso é importante e necessário, porque o banco de dados só aceitará o 
atributo que tenha valores compatíveis com seus tipos.
Os quadros a seguir apresentam os principais tipos usados no SGBD 
PostgreSql.
Tipos para armazenamento de dados numéricos inteiros
Tipo Tamanho Faixa de valores que o tipo comporta
smallint 2 bytes –32.768 até +32767
integer 4 bytes –2.147.483.648 até +2.147.483.647 (mais usado)
bigint 8 bytes –9223372036854775808 até 9223372036854775807
Tipos para armazenamento de dados numéricos fracionários
Tipo Tamanho Faixa de valores que o tipo comporta
Decimal Variável Sem limites (mais usado)
double precision 8 bytes 15 casas decimais depois da vírgula
66 Modelagem de banco de dados e SQL
Tipos para armazenamento de qualquer caractere (letras, nú-
meros e caracteres especiais)
Tipo Descrição
caracter varying(n) comprimento variável com limite (depende do SGBD)
varchar(n) comprimento variável com limite (depende do SGBD)
character(n) comprimento fixo (depende do SGBD), completado com espaços
char(n) comprimento fixo (depende do SGBD), completado com espaços
Text comprimento variável não limitado (mais usado)
Tipos para armazenamento de data e hora
Tipo Descrição
Timestamp without Time Zone Armazena tanto data quanto hora
Timestamp with Time Zone Armazena tanto data quanto hora
Interval Intervalos de tempo
Date Armazena somente datas (mais usado)
Time without Time Zone Armazena somente a hora do dia
Time with Time Zone Armazena somente a hora do dia
Tipos para armazenamento de variável com valor verdadeiro ou falso
Tipo Descrição
boolean
‘t’, ‘true’, ‘y’, ‘yes’, ‘1’ para verdadeiro 
‘f’, ‘false’, ‘n’, ‘no’, ‘0’ para falso
A informação do tipo de dado de cada atributo será importante para 
a criação do banco de dados no SGBD, que necessitará dessa informa-
ção para todas as consistências que garantirão a integridade dos dados.
3.1.2 Chave estrangeira e integridade referencial
Após a colocação dos relacionamentos entre as tabelas no modelo 
lógico de dados, podemos perceber que todas as tabelasrelacionadas 
têm um atributo em comum, justamente para fazer a ligação entre elas.
No exemplo da escola de natação, o modelo lógico de dados é o 
mostrado na Figura 1.
Linguagem SQL – DDL 67
Figura 1
Modelo lógico final da escola de natação
aluno
cpf
nome
telefone
rua
numero
complemento
bairro
cep
cidade_codigo
professor
cpf
nome
data_admissao
matricula
numero
data
turma_codigo
aluno_cpf
modalidade_professor
professor_cpf
modalidade_codigo
turma
codigo
nome
descricao_dia_horario
professor_cpf
modalidade_codigo
frequencia
matricula_numero
data
frequentou
modalidade
codigo
descricao
estado
sigla
nome
cidade
codigo
nome
estado_sigla
Fonte: Elaborada pelo autor.
Se analisarmos o atributo cidade_codigo da tabela aluno, po-
deremos perceber que seu conteúdo será um código de cidade per-
tencente à tabela cidade. Quando desejamos saber em qual cidade 
o aluno reside, basta usarmos o atributo cidade_codigo, acessar a 
tabela cidade buscando no seu atributo codigo e ler o nome da cida-
de. Dessa forma, as duas tabelas estão relacionadas por esse atributo.
O mesmo ocorre, por exemplo, com o atributo aluno_cpf na tabe-
la matricula para obtermos os dados do aluno de determinada ma-
trícula. Usamos aluno_cpf para ler a tabela aluno com esse valor e 
buscarmos os demais dados.
68 Modelagem de banco de dados e SQL
É dessa forma que todas as informações estão interligadas em um 
banco de dados relacional.
Os atributos que fazem a ligação com a chave primária da ta-
bela são chamados de chave estrangeira; por exemplo, o atributo 
cidade_codigo da tabela aluno.
Segundo Ramakrishnan e Gehrke (2008), a chave estrangeira em 
uma tabela deve corresponder à chave primária de outra a que a ta-
bela esteja relacionada. Os atributos devem ter a mesma característica 
e conteúdo, porém podem ter nomes diferentes. A chave estrangei-
ra produz uma condição conhecida como restrição de integridade, que 
impede a entrada de informações incorretas no banco, ou seja, não é 
possível incluir um aluno com um código de cidade que não conste na 
tabela cidade. Se isso fosse possível, ao tentarmos buscar o nome da 
cidade de um aluno cujo código não estivesse na tabela cidade, essa 
informação não estaria disponível para ser apresentada, indicando, en-
tão, falta de integridade nos dados.
A notação para essa chave é a colocação do símbolo FK (abreviatura 
do inglês foreign key, que significa chave estrangeira) ao lado do nome 
do atributo.
Usando novamente o exemplo das tabelas aluno e cidade, no qual 
o atributo cidade_codigo é chave estrangeira na tabela aluno, a no-
tação para ela seria o que mostra a figura a seguir.
Figura 2
Exemplo de chave estrangeira
aluno
cpf
nome
telefone
rua
numero
complemento
bairro
cep
cidade_codigo (FK)
cidade
codigo
nome
estado_sigla
Fonte: Elaborada pelo autor.
Registrar os atributos que são chaves estrangeiras é de grande 
importância para garantir o que é chamado de integridade referencial, 
pois, por exemplo, sem esse registro não seria possível incluir um aluno 
Linguagem SQL – DDL 69
com um código de cidade que não consta na tabela de cidades. Da mes-
ma forma, não seria possível excluir uma cidade, caso tivesse um aluno 
que residisse nessa cidade. Essa integridade deve ser garantia sob risco 
de perder informações essenciais. No caso de excluir uma cidade, se 
houvesse um aluno que residisse nela, no momento da apresentação 
do endereço desse aluno, não seria possível informar o nome de sua 
cidade, o que seria um grave problema de falta de integridade.
3.1.3 Modelo físico da escola de natação: versão final
O modelo físico de dados, apresentado na Figura 3, complementa o 
modelo lógico com a colocação dos tipos dos atributos e a indicação de 
todas as chaves estrangeiras. Para a confecção do modelo físico, diver-
sas ferramentas de design podem ser utilizadas, no exemplo foi usada 
a ferramenta Vertabelo 1 .
Note que nos atributos que compõem a chave primária foi colocada 
a notação PK; e nos atributos que são chaves estrangeiras foi inserida 
a notação FK.
Figura 3
Modelo físico da escola de natação
Fonte: Elaborada pelo autor.
aluno professor
professor
frequencia
cidade
estado
modalidade
modalidade_professor
turma
cpf 
nome
telefone
rua
numero
complemento
bairro
cep
cidade_codigo
cpf
nome
data_admissao
numero
data
aluno_cpf
turma_codigo
matricula_numero
data
frequentou
codigo
nome
estado_sigla
sigla
nome
codigo
descricao
professor_cpf
modalidade_codigo
codigo
nome
descricao_dia_horario
professor_cpf
modalidade_codigo
text PK
text
text
text
text
text
text
int
int FK
text PK
text
date
int PK
date
text FK
int FK
int PK FK
date PK
boolean
int PK
text
text FK
text PK
text
int PK
text
text PK FK
int PK FK
int PK
text
text
text FK
int FK
Disponível em: https://
my.vertabelo.com/drive. 
Acesso em: 13 maio 2021.
1
https://my.vertabelo.com/drive
https://my.vertabelo.com/drive
70 Modelagem de banco de dados e SQL
Com isso, estamos prontos para incluir as tabelas com todas as suas 
informações em um SGBD.
3.2 Criação do modelo físico usando SQL – DDL 
Vídeo Antigamente, quando os dados eram armazenados em arquivos 
do próprio sistema, os comandos para manipular os dados eram 
próprios de cada linguagem de programação. Quando passaram 
a ser armazenados nos bancos de dados, mostrou-se a necessida-
de de que as linguagens ficassem independentes dos bancos de 
dados. Surgiu, então, uma linguagem cuja finalidade exclusiva era 
fazer todos os acessos aos dados, uma ponte ligando a linguagem 
de programação aos bancos de dados, essa linguagem foi chamada 
de SQL – Structured Query Language ou, em português, linguagem 
de consulta estruturada.
Desde então, SQL é a linguagem padrão de mercado para esse 
fim, praticamente todas as linguagens implementam o acesso ao 
banco pelo uso de SQL e todos os bancos aceitam serem acessados 
por ela.
O grande sucesso dos bancos de dados relacionais pode ser 
atribuído ao uso da linguagem SQL (ELMASRI; NAVATHE, 2013), vis-
to que é a linguagem mais amplamente utilizada em sistemas co-
merciais (RAMAKRISHNAN; GEHRKE, 2008).
A linguagem SQL apresenta duas partes principais: a DDL – 
Data Definition Language –, foco deste capítulo, e a DML – Data 
Manipulation Language.
A DDL objetiva fazer as definições no banco de dados; permite 
a definição de todo o modelo físico (tabelas, atributos, relaciona-
mentos, integridade referencial, entre outros) e fornece coman-
dos para criar, alterar ou excluir tabelas (SILBERSCHATZ; KORTH; 
SUDARSHAN, 2020).
Também é possível indicarmos algumas restrições para as ta-
belas. As restrições fazem com que o próprio banco de dados 
faça consistências e evite a entrada de dados inconsistentes nos 
atributos. Na linguagem DDL, essas restrições são denominadas 
constraint e são derivadas das regras no minimundo que o banco 
precisa representar (ELMASRI; NAVATHE, 2013).
Linguagem SQL – DDL 71
A seguir, vamos conhecer cinco tipos de restrições.
a. Checagem do valor do atributo – check
É possível permitir que um atributo receba somente alguns valores 
definidos. Para isso, nos comandos de criação e alteração de tabelas, 
podemos colocar uma constraint do tipo check.
Por exemplo, o atributo gênero, que só pode assumir os valores M 
e F, poderia ser assinalado da seguinte forma:
CONSTRAINT genero_chek CHECK (gênero IN (‘M’, ‘F’))
b. Checagem para que um atributo não tenha repetição de 
valor – unique
É possível indicarmos que um atributo não tenha valores repeti-
dos, ou seja, que não existam duas linhas com o mesmo conteúdo. Por 
exemplo, na tabela estado da escola de natação, caso não desejemos 
permitir que sejam incluídos dois estados com o mesmo nome, pode-
mos colocar uma constraint do tipo unique da seguinte forma:
CONSTRAINT nome_unique UNIQUE (nome)
c. Restrição de chave primária
A própria chave primária da tabela, no DDL, é indicada ao utilizar-
mos uma constraint. Por exemplo, na tabela estado da escola de nata-
ção, a chave primária seria indicadada seguinte forma:
CONSTRAINT estado_pk PRIMARY KEY (sigla)
d. Restrição de chaves estrangeiras
As chaves estrangeiras também são indicadas ao utilizarmos uma 
constraint. Por exemplo, a tabela cidade da escola de natação tem 
o atributo estado_sigla como chave estrangeira. Então, a definição 
dessa tabela teria essa chave estrangeira indicada da seguinte forma:
CONSTRAINT estado_sigla_fk FOREIGN KEY (estado_sigla) 
REFERENCES estado(sigla)
e. Nulidade nos valores dos atributos
Um conteúdo que pode ser concedido aos atributos e que aparecerá 
nos comandos DDL é o valor nulo. Este indica que o atributo pode não ter 
72 Modelagem de banco de dados e SQL
nenhum valor em algum momento (nem zero para atributos numéricos, 
nem espaços em branco para alfanuméricos). Os valores nulos são usa-
dos para representar os valores de atributos que podem ser desconheci-
dos ou não se aplicarem à determinada linha (ELMASRI; NAVATHE, 2013).
No modelo físico e nos comandos DDL, a indicação de que o atri-
buto é nulo, ou não, será pela colocação do termo NULL ou NOT NULL 
ao lado do tipo de atributo. No modelo físico do exemplo da escola de 
natação, nenhum atributo estava com essa indicação.
A seguir, veremos em detalhes todos os comandos do DDL que rea-
lizam essas funções.
3.2.1 Comando Create Table
Esse comando, como o nome já diz, é usado para se criar uma ta-
bela com todos os seus atributos (com seus tipos), indicação de chave 
primária e chaves estrangeiras.
O comando será apresentado por meio de um exemplo da tabe-
la estado do modelo físico da escola de natação, como mostrado no 
exemplo a seguir.
Exemplo 1:
Tabela estado
estado
sigla textPK 
nome text
Comando create dessa tabela:
CREATE TABLE estado (
sigla text NOT NULL,
nome text NOT NULL,
CONSTRAINT estado_pk PRIMARY KEY (sigla)
);
Detalhamento do comando
O comando inicia com o termo CREATE e, em seguida, TABLE, indi-
cando a criação de uma nova tabela.
Linguagem SQL – DDL 73
Temos a seguir o nome da tabela (estado) e a abertura de um 
parêntese. Dentro dele, temos a lista de atributos. Para cada atribu-
to, temos seu nome; em seguida, o seu tipo; e, depois, a informação 
NOT NULL (indicando que esse atributo não aceita valores nulos).
Finalmente, o termo CONSTRAINT é usado para indicar quais atribu-
tos fazem parte da chave primária. É atribuído um nome a essa chave, 
no caso, estado_pk, a indicação PRIMARY KEY (indicando que é uma 
constraint para indicação de chave primária) e, por fim, entre parênte-
ses, os atributos que compõem a chave primária, nesse caso, o atributo 
sigla.
Exemplo 2:
Tabela cidade
cidade
codigo int PK 
nome text 
estado_sigla text FK
Comando create dessa tabela:
CREATE TABLE cidade (
codigo int NOT NULL,
nome text NOT NULL,
estado_sigla text NOT NULL,
CONSTRAINT cidade_pk PRIMARY KEY (codigo),
CONSTRAINT estado_sigla_fk FOREIGN KEY (estado_sigla) 
 REFERENCES estado(sigla)
);
Detalhamento do comando
Além dos comandos explicados no primeiro exemplo, nesse apare-
ce a CONSTRAINT de indicação da chave estrangeira.
Após esse termo, aparece o nome da constraint (estado_sigla_fk); 
em seguida, o termo FOREIGN KEY, indicando tratar-se de uma constraint 
de chave estrangeira; depois, o nome do atributo da tabela cidade, 
que é a chave estrangeira propriamente dita (estado_sigla); na se-
quência, o termo REFERENCES, indicando a qual tabela se deseja fazer 
74 Modelagem de banco de dados e SQL
referência; e, por fim, o nome da tabela e do atributo-chave que será a 
ligação, nesse caso, estado(sigla).
Listamos a seguir todos os comandos de criação de todas as tabelas 
do modelo físico da escola de natação.
Tabela aluno
CREATE TABLE aluno (
cpf text NOT NULL,
nome text NOT NULL,
telefone text NOT NULL,
rua text NOT NULL,
numero text NOT NULL,
complemento text NOT NULL,
bairro text NOT NULL,
cep int NOT NULL,
cidade_codigo int NOT NULL,
CONSTRAINT aluno_pk PRIMARY KEY (cpf),
CONSTRAINT cidade_codigo_fk FOREIGN KEY (cidade_codigo) 
 REFERENCES cidade(codigo)
);
Tabela professor
CREATE TABLE professor (
cpf text NOT NULL,
nome text NOT NULL,
data_admissao date NOT NULL,
CONSTRAINT professor_pk PRIMARY KEY (cpf)
);
Linguagem SQL – DDL 75
Tabela modalidade
CREATE TABLE modalidade (
codigo int NOT NULL,
descricao text NOT NULL,
CONSTRAINT modalidade_pk PRIMARY KEY (codigo)
);
Tabela modalidade_professor
CREATE TABLE modalidade_professor (
professor_cpf text NOT NULL,
modalidade_codigo int NOT NULL,
CONSTRAINT modalidade_professor_pk PRIMARY KEY 
 (professor_cpf,modalidade_codigo),
CONSTRAINT professor_cpf_fk FOREIGN KEY (professor_cpf) 
 REFERENCES professor(cpf),
CONSTRAINT modalidade_codigo_fk FOREIGN KEY 
 (modalidade_codigo) REFERENCES 
 modalidade(codigo)
);
Tabela turma
CREATE TABLE turma (
codigo int NOT NULL,
nome text NOT NULL,
descricao_dia_horario text NOT NULL,
professor_cpf text NOT NULL,
modalidade_codigo int NOT NULL,
CONSTRAINT turma_pk PRIMARY KEY (codigo),
CONSTRAINT professor_cpf_fk FOREIGN KEY (professor_cpf) 
 REFERENCES professor(cpf),
CONSTRAINT modalidade_codigo_fk FOREIGN KEY 
 (modalidade_codigo) REFERENCES 
 modalidade(codigo)
);
76 Modelagem de banco de dados e SQL
Tabela matricula
CREATE TABLE matricula (
numero int NOT NULL,
data date NOT NULL,
aluno_cpf text NOT NULL,
turma_codigo int NOT NULL,
CONSTRAINT matricula_pk PRIMARY KEY (numero),
CONSTRAINT aluno_cpf_fk FOREIGN KEY (aluno_cpf) 
 REFERENCES aluno(cpf),
CONSTRAINT turma_codigo_fk FOREIGN KEY 
 (turma_codigo) REFERENCES 
 turma(codigo)
);
Tabela frequencia
CREATE TABLE frequencia (
matricula_numero int NOT NULL,
data date NOT NULL,
frequentou boolean NOT NULL,
CONSTRAINT frequencia_pk PRIMARY KEY 
 (matricula_numero,data),
CONSTRAINT matricula_numero_fk FOREIGN KEY 
 (matricula_numero) REFERENCES 
 matricula(numero)
);
Esses foram todos os comandos necessários para criarmos o banco 
de dados da escola de natação em um SGBD.
3.2.2 Comando Alter Table
Esse comando, como o nome já diz, faz alterações em definições de 
tabelas já criadas. A estrutura e as opções do comando são as seguintes:
Linguagem SQL – DDL 77
ALTER TABLE <nome-da-tabela>
DROP COLUMN <nome-do-atributo>
ADD <nome-do-atributo> <tipo-do-dado> [NOT NULL]
RENAME <nome-do-atributo> TO <novo-nome-do-atributo>
RENAME TO <novo-nome-tabela>
MODIFY <nome-do-atributo> <tipo-do-dado> [NULL]
ADD <constraint>
Detalhamento das opções:
 • DROP: exclui determinado atributo.
 • ADD: inclui um novo atributo ou uma constraint.
 • RENAME: altera o nome do atributo ou da tabela.
 • MODIFY: altera o tipo de dado do atributo.
O comando Alter Table deve ser usado com cuidado, pois ao excluir, 
por exemplo, determinado atributo, o conteúdo de todas as linhas 
desse atributo desaparecerá.
3.2.3 Comando Drop Table
Esse comando tem por finalidade excluir uma tabela. A estrutura do 
comando é a seguinte:
DROP TABLE <nome-da-tabela>
Ao excluirmos uma tabela, todo o seu conteúdo é perdido.
Você sabia que existem 
outras formas de ar-
mazenamento que não 
em bancos de dados 
relacionais e que não 
são acessados por SQL? 
São os bancos de dados 
NoSQL. Confira no vídeo 
NoSQL: dicionário do pro-
gramador , publicado no 
canal Código Fonte TV.
Disponível em: https://
www.youtube.com/
watch?v=1B64oqE8PLs. Acesso em: 
13 maio 2021.
Vídeo
3.3 Criação do modelo físico no 
banco de dados PostgreSql Vídeo
Um dos SGBD gratuitos e mais utilizados no mundo é o PostgreSql. 
Segundo Milani (2008, p. 25): “o PostgreSql é um Sistema Gerenciador 
de Banco de Dados (SGBD) Relacional, utilizado para armazenar infor-
mações de soluções de informática em todas as áreas de negócios exis-
tentes, bem como administrar o acesso a essas informações”.
78 Modelagem de banco de dadose SQL
De acordo com a página oficial do fabricante 2 , esse SGBD está na 
versão 13.2.
Veremos a seguir como instalar e criar um banco de dados e suas 
tabelas nesse SGBD.
3.3.1 Instalando o PostgreSql
Primeiro, devemos acessar a página do fabricante, baixar última 
versão do SGBD e instalar no computador, conforme as orientações 
padrões de instalação de qualquer software. Além do SGBD PostgreSql 
propriamente dito, a instalação fornece um software administrador 
chamado PGADMIN4, que facilita a criação e a manipulação do banco 
de dados e das tabelas, com uma tela amigável e de fácil manuseio.
Após completarmos a instalação, é preciso acessar o programa 
PGADMIN4, que foi instalado na sua máquina. A tela da Figura 4 será 
apresentada.
Figura 4
Tela inicial do PGADMIN4
Fonte: PGADMIN4, 2021.
Essa tela apresenta a versão 9.3 do PostgreSql. No momento da sua 
instalação, essa versão pode estar diferente, mas isso não inviabilizará 
as próximas instruções.
3.3.2 Criando o banco de dados da escola de natação
A primeira ação é criarmos um banco de dados. No caso do nosso 
estudo, criaremos o banco chamado EscolaNatacao. Para isso, na tela 
da Figura 4, devemos clicar com o botão direito em PostgreSQL 9.3, locali-
zado no canto superior esquerdo, e selecionar a opção Create/Database. 
Disponível em: https://
www.postgresql.org/. 
Acesso em: 13 maio 2021.
2
https://www.postgresql.org/
https://www.postgresql.org/
Linguagem SQL – DDL 79
A tela da Figura 5 será apresentada. Em seguida, precisamos inserir o 
nome do banco, conforme a figura, e clicar em Save.
Figura 5
Criação do banco de dados da escola de natação
Fonte: PGADMIN4, 2021.
Ao abrirmos a lista de Databases na coluna da esquerda, clican-
do no botão + ao lado da palavra, deverá aparecer o banco de dados 
EscolaNatacao criado.
3.3.3 Criando as tabelas do banco de 
dados da escola de natação
O próximo passo, agora, é criarmos as tabelas do banco, com base 
nas tabelas do modelo físico de dados.
A sugestão é de que se crie primeiro as tabelas que não tenham 
chaves estrangeiras.
80 Modelagem de banco de dados e SQL
Para iniciar a criação das tabelas, devemos clicar no botão +, ao lado 
do nome do banco EscolaNatacao, para expandir o menu disponível. 
A tela da Figura 6 será apresentada.
Figura 6
Expansão do menu do banco de dados da escola de natação
Fonte: PGADMIN4, 2021.
A opção indicada pela seta listará todas as tabelas criadas.
3.3.3.1 Criação da tabela estado
Para criar uma tabela, devemos clicar com o botão direito na palavra 
Tables, indicada pela seta da Figura 6. Em seguida, escolhemos a opção 
Create/Table. A tela da Figura 7 será apresentada. Devemos colocar o nome 
da tabela estado, como mostra a figura (não devemos pressionar o botão 
Save ainda).
Linguagem SQL – DDL 81
Figura 7
Tela para criação da tabela estado
Fonte: PGADMIN4, 2021.
Após digitarmos o nome da tabela, selecionamos a aba Columns, 
conforme indicação da seta (Figura 7). A tela da Figura 8 será apresen-
tada para a inclusão dos atributos da tabela.
Figura 8
Tela para criação dos atributos de uma tabela
Fonte: PGADMIN4, 2021.
Para a inclusão dos atributos, pressionamos o botão +, conforme 
indica a seta na Figura 8. A tela da Figura 9 será apresentada para a 
inclusão das informações de um novo atributo da tabela. Devemos 
preencher os campos conforme a figura. Após a informação do campo 
82 Modelagem de banco de dados e SQL
sigla, pressionamos o botão + para a inclusão do segundo campo: 
nome.
Figura 9
Tela com as informações dos atributos da tabela estado
Fonte: PGADMIN4, 2021.
Após informar os dois atributos, pressionamos o botão Save. A nova ta-
bela aparecerá na lista de tabelas do banco de dados e, ao selecionarmos 
a tabela, o seu comando DDL create será mostrado, conforme a Figura 10.
Figura 10
Tela com as informações da nova tabela estado em SQL
Fonte: PGADMIN4, 2021.
Linguagem SQL – DDL 83
Esse comando create gerado pelo PostgreSql traz alguns compo-
nentes a mais que o padrão mostrado, porém são para a sua própria 
administração no banco e não interferem no entendimento geral do 
comando.
3.3.3.2 Criação da tabela cidade
Esse exemplo difere do anterior, uma vez que aprenderemos a criar 
uma chave estrangeira no banco de dados, haja vista que essa tabela 
tem o atributo estado_sigla como chave estrangeira.
Novamente, para iniciar o processo, clicamos com o botão direito na 
palavra Tables e selecionamos Create/Table. Devemos informar o nome 
da tabela cidade, pressionar a aba Columns, informar os atributos da tabe-
la, como mostra a Figura 11 (não devemos pressionar o botão Save ainda).
Figura 11
Tela com as informações da nova tabela cidade em SQL
Fonte: PGADMIN4, 2021.
Agora, para a criação da constraint de chave estrangeira, devemos 
selecionar a aba Constraints e, em seguida, a aba Foreign Key. Na tela 
que aparecerá, pressionamos o botão + na parte superior direita e 
preenchemos o campo Name, como mostra a figura a seguir.
84 Modelagem de banco de dados e SQL
Figura 12
Tela com as informações da Foreign Key da tabela cidade
Fonte: PGADMIN4, 2021.
Agora, devemos pressionar o botão com o ícone Editar (ao lado do 
símbolo de lixeira), como mostra a seta, para colocarmos as informa-
ções da FK. Em seguida, selecionamos a aba Columns, preenchendo 
conforme a Figura 13, e pressionamos o botão + do quadro pequeno a 
seguir para incluir a FK.
Figura 13
 Tela com as informações da Foreign Key da tabela cidade
Fonte: PGADMIN4, 2021.
Linguagem SQL – DDL 85
Finalmente, ao pressionarmos o botão Save, a nova tabela estará na 
lista de Tables. Clicando sobre o nome da tabela, aparecerá o código 
SQL Create da tabela, como mostra a Figura 14.
Figura 14
Comando Create da tabela cidade
Fonte: PGADMIN4, 2021.
Com esses dois exemplos, é possível fazermos a criação das demais 
tabelas do banco de dados da escola de natação, já que elas se asseme-
lham aos exemplos e nenhuma outra tabela tem algum componente 
diferente dessas duas.
Assim, conhecemos um SGBD bastante utilizado no mercado e fina-
lizamos o cadastro das tabelas, deixando o banco pronto para ser utili-
zado diretamente no banco ou por alguma linguagem de programação 
em um sistema de informação.
O artigo intitulado Comparativo de desempenho entre bancos de dados de código 
aberto, de autoria de Ana Carolina Salgado, Carlos Eduardo Santos Pires e 
Rilson Oscar do Nascimento, mostra algumas comparações entre PostgreSql 
e outros bancos.
Acesso em: 26 abr. 2021.
https://www.researchgate.net/profile/Ana-Carolina-Salgado/publication/242213657_Comparativo_
de_Desempenho_entre_Bancos_de_Dados_de_Codigo_Aberto/links/004635296426ba710e000000/
Comparativo-de-Desempenho-entre-Bancos-de-Dados-de-Codigo-Aberto.pdf
Artigo
86 Modelagem de banco de dados e SQL
CONSIDERAÇÕES FINAIS
Apresentamos a transformação do modelo lógico em modelo físico de 
dados, com a introdução de diversos componentes nas tabelas, necessá-
rios para o seu cadastramento em SGBD.
Conhecemos também o SGBD PostgreSql, um importante software 
amplamente utilizado pelo mercado de trabalho. Além disso, indicamos 
como colocar todas as tabelas do exemplo da escola de natação no ban-
co, com todos os seus atributos e componentes, para que esteja em con-
dições de ser utilizado pelos sistemas de informação.
ATIVIDADES
1. Qual é a finalidade de se criar um modelo físico de dados? Comente.
2. O que são chaves estrangeiras? Explique.
3. O que é a linguagem SQL? Comente.
REFERÊNCIAS
DATE, C. J. Introdução a sistemas de banco de dados. 8 ed. Rio de Janeiro: Elsevier, 2003.
ELMASRI, R.; NAVATHE, S. Sistemas de banco de dados. 6. ed. São Paulo: Pearson Education 
do Brasil, 2013.
MILANI, A. PosgreSQL: guia do programador. São Paulo: Novatec, 2008.
PGADMIN4. Software. Disponível em: http://127. 0.0.1:55457/browser/. Acesso em: 29 abr. 2021.
RAMAKRISHNAN, R.; GEHRKE, J. Sistemas de gerenciamento de banco de dados. 3 ed. São 
Paulo: McGraw-Hill, 2008.
SILBERSCHATZ, A.; KORTH, H.F; SUDARSHAN, S. Sistema de banco de dados. 7. ed. Rio de 
Janeiro: LTC, 2020.
Vídeo
Linguagem SQL – DML 87
4
Linguagem SQL – DML
Este capítulo traz um aspecto extremamente prático da ma-
nipulação dos dados em um banco de dados. Com as tabelas 
organizadas, estruturadas segundo as regras de normalização e 
cadastradas no SGBD com o uso de comandos SQL/DDL, é possí-
vel disponibilizá-las para a inclusão e manipulação de dados.
Serão abordados os comandos para inclusão de linhas nas ta-
belas e alteração e exclusão por meio de comandos SQL/DML que 
serão vistos no decorrer do capítulo.
Também serão conhecidos os principais comandos para busca 
dos dados cadastrados na tabela, por meio do comando SELECT, 
um comando extremamente simples, amplo, versátil e capaz de 
buscar dados segundo diversas condições, atendendo, na sua 
maioria, as necessidades dos sistemas de informação.
4.1 Comandos SQL para atualização 
Vídeo O Data Manipulation Language (DML) é uma parte da linguagem 
SQL encarregada de manipular os dados, seja para consultar, para in-
cluir, alterar ou excluir dados no banco de dados. Segundo Date (2003, 
p. 71), “a SQL inclui operações de definição de dados e operações de 
manipulação de dados”, referindo-se ao DML.
A linguagem SQL não é uma mera linguagem de consulta a um ban-
co de dados, ela pode fazer muito mais do que isso. Segundo Silbers-
chatz, Korth e Sudarshan (2020, p. 37): “ela pode definir a estrutura dos 
dados, modificar dados no banco de dados e especificar restrições de 
segurança”.
Para o aprendizado de todos os comandos DML, utilizaremos o es-
tudo de caso da escola de natação. A figura a seguir mostra o modelo 
físico de dados com as tabelas e os relacionamentos desse problema.
88 Modelagem de banco de dados e SQL
Figura 1
Modelo físico de dados da escola de natação
Fonte: Elaborada pelo autor.
aluno professor
professor
frequencia
cidade
estado
modalidade
modalidade_professor
turma
cpf 
nome
telefone
rua
numero
complemento
bairro
cep
cidade_codigo
cpf
nome
data_admissao
numero
data
aluno_cpf
turma_codigo
matricula_numero
data
frequentou
codigo
nome
estado_sigla
sigla
nome
codigo
descricao
professor_cpf
modalidade_codigo
codigo
nome
descricao_dia_horario
professor_cpf
modalidade_codigo
text PK
text
text
text
text
text
text
int
int FK
text PK
text
date
int PK
date
text FK
int FK
int PK FK
date PK
boolean
int PK
text
text FK
text PK
text
int PK
text
text PK FK
int PK FK
int PK
text
text
text FK
int FK
A seguir serão mostrados os comandos DML responsáveis pelas 
atualizações nas tabelas.
4.1.1 Comando INSERT
Como o nome já indica, o comando INSERT é utilizado para incluir 
dados nas tabelas.
Observe a estrutura do comando a seguir.
INSERT INTO tabela (atributo1, atributo1,..., atributoN) 
 VALUES (valor1, valor2,..., valorN)
Em que: atributo1, atributo2, ..., atributoN são os no-
mes dos atributos da tabela e valor1, valor2, ..., valorN são 
valores correspondentes a cada um deles.
Linguagem SQL – DML 89
Exemplo 1: Considere a Tabela estado
sigla nome
PR Paraná
SC Santa Catarina
SP São Paulo
RS Rio Grande do Sul
O comando para incluir a primeira linha seria:
INSERT INTO estado (sigla,nome) 
 VALUES (‘PR’, ‘Paraná’)
Para as demais linhas, teríamos:
INSERT INTO estado (sigla,nome) 
 VALUES (‘SC’, ‘Santa Catarina’)
INSERT INTO estado (sigla,nome) 
 VALUES (‘SP’, ‘São Paulo’)
INSERT INTO estado (sigla,nome) 
 VALUES (‘RS’, ‘Rio Grande do Sul’)
Exemplo 2: Considere a Tabela aluno
cpf nome telefone rua numero complemento bairro cep cidade_codigo
12345678901
Joaquim 
José
41-87654568 Rua A 123 Guabirotuba 80000 1
87654567365
Maria 
Cândida
41-87476567 Rua B 456 Batel 80000 1
98756514522
Ronaldo 
Antunes
41-98765367 Rua C 123 Xaxim 80000 1
98576524546
Gabriel 
Henrique
41-91245678 Rua D 456
Jardim das 
Américas
80000 1
64514343456
Gustavo 
Lacerda
41-98754612 Rua E 123 Itaipu 83000 2
98576543656
Tiago 
Alcântara
11-76542314 Rua F 456 Itaquera 11000 3
95876756512
Célia 
Justina
55-98751234 Rua G 123 Beira Rio 55000 4
90 Modelagem de banco de dados e SQL
O comando para incluir a primeira linha seria:
INSERT INTO
aluno(cpf,nome,telefone,rua,numero,complemento,
 bairro,cep,cidade_codigo) 
 VALUES (‘12345678901’,’Joaquim José’, 
 ‘41-87654568’,’Rua A’,’123’,’’,
 ‘Batel’,80000,1)
Para as demais linhas, basta substituir os valores no comando 
apresentado.
4.1.2 Comando UPDATE
Como o nome já indica, o comando UPDATE atualiza os dados de 
uma tabela.
Estrutura do comando:
UPDATE tabela SET atributo1 = valor1,
 atributo2 = valor2,
 atributoN = valorN
 WHERE condições
Em que: campo1, campo2, ..., campoN são os nomes dos atri-
butos da tabela e valor1, valor2, ..., valorN são valores cor-
respondentes a cada um deles.
As condições serão verificadas e a atualização ocorrerá somente 
nas linhas que forem verdadeiras.
Exemplo 1: Alterar o nome do aluno Gabriel Henrique para Ga-
briel Henrique Cardoso.
Tabela aluno
cpf nome telefone rua numero complemento bairro cep cidade_codigo
12345678901
Joaquim 
José
41-87654568 Rua A 123 Guabirotuba 80000 1
87654567365
Maria 
Cândida
41-87476567 Rua B 456 Batel 80000 1
(Continua)
Linguagem SQL – DML 91
cpf nome telefone rua numero complemento bairro cep cidade_codigo
98756514522
Ronaldo 
Antunes
41-98765367 Rua C 123 Xaxim 80000 1
98576524546
Gabriel 
Henrique
41-91245678 Rua D 456
Jardim das 
Américas
80000 1
64514343456
Gustavo 
Lacerda
41-98754612 Rua E 123 Itaipu 83000 2
98576543656
Tiago 
Alcântara
11-76542314 Rua F 456 Itaquera 11000 3
95876756512
Célia 
Justina
55-98751234 Rua G 123 Beira Rio 55000 4
Comando:
UPDATE aluno SET nome = ’Gabriel Henrique Cardoso’
 WHERE cpf = ‘98576524546’
Exemplo 2: Alterar o código de todos os alunos da cidade = 1 para 
cidade = 2.
Comando:
UPDATE aluno SET código_cidade = 2
 WHERE código_cidade = 1
Esse comando atualizará o código da cidade para 2 das 4 primeiras 
linhas.
Exemplo 3: Alterar o nome da rua de todos os alunos para Rua A.
Comando:
UPDATE aluno SET rua = ‘Rua A’
Observações:
Cuidado: quando não colocamos a cláusula WHERE, o comando 
atualiza todas as linhas da tabela.
Não é permitida a alteração do valor dos atributos que compõem a 
chave primária. Quando for necessário, deve-se excluir a linha e incluir 
novamente com a chave correta.
92 Modelagem de banco de dados e SQL
4.1.3 Comando DELETE
Como o nome já indica, o comando DELETE exclui linhas de uma 
tabela.
Estrutura do comando:
DELETE FROM tabela
 WHERE condições
As condições serão verificadas e a exclusão ocorrerá somente nas 
linhas que forem verdadeiras.
Exemplo 1: Excluir o estado do Rio Grande do Sul.
Tabela estado
sigla nome
PR Paraná
SC Santa Catarina
SP São Paulo
RS Rio Grande do Sul
Comando:
DELETE FROM estado
 WHERE sigla = ‘RS’
Observações:
Cuidado: quando não colocamos a cláusula WHERE, o comando ex-
cluirá todas as linhas da tabela, ou seja, a tabela ficará vazia.
Nesse exemplo, como a tabela estado está relacionada à tabela 
cidade, caso exista alguma cidade cadastrada com a sigla do estado 
RS que está se tentando excluir, o comando retorna um erro e não 
permite a exclusão justamente para garantir a integridade referencial 
entre as tabelas.
Linguagem SQL – DML 93
4.2 Comandos SQL para consultas básicas 
Vídeo Primeiramente, conheceremos a forma de se realizar consultas bá-
sicas no banco de dados a fim de se familiarizar com o comando que 
faz todas as consultas, o comando SELECT.
4.2.1 Comando SELECT
O comando SELECT tem por objetivo recuperar linhas das tabelas 
do banco de dados. É um comando extremamente simples e, ao mes-
mo tempo, muito versátil. É capaz de trazer os dados da maneira que 
o usuário precisa. Além disso, oferece diversas opções para busca dos 
dados, atendendo quaseque na totalidade as necessidades dos siste-
mas de informação.
É capaz de selecionar somente algumas linhas, segundo diversos 
critérios com a colocação de condições sobre as linhas que se deseja 
buscar, e de ordenar o resultado da forma que se desejar, também 
pode filtrar e fazer operações sobre colunas, agrupar e totalizar valores 
delas e juntar estas de diversas tabelas.
O comando consegue produzir automaticamente resultados que 
seriam de grande complexidade para serem programados em uma lin-
guagem de programação. Além disso, a velocidade de recuperação dos 
dados é extremamente satisfatória, dada a complexidade de algumas 
consultas.
Todas essas variações do comando serão vistas em detalhes nas 
subseções seguintes com a explicação do comando, os dados da(s) ta-
bela(s) e o resultado do comando.
Na sequência, conheceremos a estrutura básica do comando 
SELECT e, em seguida, diversos exemplos de sua utilização.
O comando será emitido no SGBD PostgreSql e o resultado forneci-
do por ele será colocado na sequência do comando.
4.2.1.1 Estrutura básica do comando SELECT
De acordo com Elmasri e Navathe (2013), a estrutura básica do co-
mando SELECT é a seguinte:
94 Modelagem de banco de dados e SQL
SELECT atributos 
FROM tabela
Os atributos desejados da tabela indicados na cláusula FROM de-
vem ser separados por vírgulas.
Exemplo 1: Dada a tabela aluno, listar o CPF e o nome de todos os 
alunos.
Tabela aluno
cpf nome telefone rua numero complemento bairro cep cidade_codigo
12345678901
Joaquim 
José
41-87654568 Rua A 123 Guabirotuba 80000 1
87654567365
Maria 
Cândida
41-87476567 Rua B 456 Batel 80000 1
98756514522
Ronaldo 
Antunes
41-98765367 Rua C 123 Xaxim 80000 1
98576524546
Gabriel 
Henrique
41-91245678 Rua D 456
Jardim das 
Américas
80000 1
64514343456
Gustavo 
Lacerda
41-98754612 Rua E 123 Itaipu 83000 2
98576543656
Tiago 
Alcântara
11-76542314 Rua F 456 Itaquera 11000 3
95876756512
Célia 
Justina
55-98751234 Rua G 123 Beira Rio 55000 4
Comando:
SELECT cpf,nome 
FROM aluno
Observe o resultado a seguir.
cpf nome
12345678901 Joaquim José
87654567365 Maria Cândida
98756514522 Ronaldo Antunes
98576524546 Gabriel Henrique
64514343456 Gustavo Lacerda
98576543656 Tiago Alcântara
95876756512 Célia Justina
Linguagem SQL – DML 95
Essa estrutura básica, apesar de simples, fornece uma visão rápida 
de todas as linhas das tabelas. A seguir, serão incorporadas novas cláu-
sulas ao comando para refinar as buscas.
4.2.1.2 Condições sobre as linhas e ordenação
Para filtrar linhas que satisfaçam determinadas condições e trazer 
o resultado conforme uma ordenação, é possível colocar as cláusulas 
WHERE e ORDER BY.
SELECT atributos 
FROM tabela
WHERE condição
ORDER BY atributos <DESC>
Exemplo 1: Dada a tabela aluno, listar o CPF e o nome de todos, 
cujo código da cidade seja igual a 1 e listar em ordem alfabética.
Comando:
SELECT cpf,nome 
FROM aluno
WHERE cidade_codigo = 1
ORDER BY nome
Observe o resultado a seguir.
cpf nome
98576524546 Gabriel Henrique
12345678901 Joaquim José
87654567365 Maria Cândida
98756514522 Ronaldo Antunes
Observações:
Para selecionar todos os atributos da tabela, basta utilizar SELECT *.
Exemplo 2: Dada a tabela aluno, listar todos os atributos do aluno 
Gustavo Lacerda.
Comando:
SELECT *
FROM aluno
WHERE nome = ‘Gustavo Lacerda’
96 Modelagem de banco de dados e SQL
Resultado:
cpf nome telefone rua numero complemento bairro cep cidade_codigo
64514343456
Gustavo 
Lacerda
41-98754612 Rua E 123 Itaipu 83000 2
Podemos perceber, nesse resultado, que a busca retornou o nome 
exatamente como foi solicitado na cláusula WHERE.
4.2.1.3 Operadores da cláusula WHERE 
A cláusula WHERE admite outros operadores e não somente o de 
igualdade.
Operadores matemáticos
A cláusula WHERE aceita os seguintes operadores matemáticos:
= Igual
<> Diferente
> Maior
>= Maior ou Igual
< Menor
<= Menor ou Igual
Exemplo 1: Dada a tabela turma, listar as turmas com valor de men-
salidade maior que R$ 200,00.
Tabela turma
codigo nome descricao_dia_horario professor_cpf modalidade_codigo valor_mensalidade valor_desconto
10 Turma 1 de Natação
Seg/Qua/Sex das 
7h às 8h
72345678901 1 210 10
20 Turma 2 de Natação
Ter/Qui das 8h às 
9h
56254566711 1 200 10
30
Turma 1 de Hidrogi-
nástica
Seg/Qua/Sex das 
10h às 11h
56254566711 2 330 20
40 Turma 3 de Natação
Seg/Qua/Sex das 
8h às 9h
72345678901 1 200 10
50 Turma 4 de Natação
Ter/Qui das 10h às 
11h
56254566711 1 190 10
60
Turma 2 de Hidrogi-
nástica
Ter/Qui das 7h às 
8h
56254566711 2 350 30
Linguagem SQL – DML 97
Comando:
SELECT *
FROM turma
WHERE valor_mensalidade > 200
Resultado:
codigo nome descricao_dia_horario professor_cpf modalidade_codigo valor_mensalidade valor_desconto
10
Turma 1 de 
Natação
Seg/Qua/Sex das 
7h às 8h
72345678901 1 210 10
30
Turma 1 de 
Hidroginástica
Seg/Qua/Sex das 
10h às 11h
56254566711 2 330 20
60
Turma 2 de 
Hidroginástica
Ter/Qui das 7h 
às 8h
56254566711 2 350 30
Exemplo 2: Dada a tabela turma, listar as turmas que não sejam do 
professor com CPF 72345678901.
Comando:
SELECT *
FROM turma
WHERE professor_cpf <> ‘72345678901’
Resultado:
codigo nome descricao_dia_horario professor_cpf modalidade_codigo valor_mensalidade valor_desconto
20
Turma 2 de 
Natação
Ter/Qui das 8h 
às 9h
56254566711 1 200 10
30
Turma 1 de 
Hidroginástica
Seg/Qua/Sex das 
10h às 11h
56254566711 2 330 20
50
Turma 4 de 
Natação
Ter/Qui das 10h 
às 11h
56254566711 1 190 10
60
Turma 2 de 
Hidroginástica
Ter/Qui das 7h 
às 8h
56254566711 2 350 30
Operadores AND e OR
A cláusula WHERE também aceita várias condições, para isso, po-
dem ser usados os operadores booleanos AND E OR.
98 Modelagem de banco de dados e SQL
Exemplo 1: Dada a tabela turma, listar as turmas com código de mo-
dalidade igual a 1 e valor de mensalidade menor ou igual a R$ 200,00.
Tabela turma
codigo nome descricao_dia_horario professor_cpf modalidade_codigo valor_mensalidade valor_desconto
10
Turma 1 de 
Natação
Seg/Qua/Sex das 
7h às 8h
72345678901 1 210 10
20
Turma 2 de 
Natação
Ter/Qui das 8h 
às 9h
56254566711 1 200 10
30
Turma 1 de 
Hidroginástica
Seg/Qua/Sex das 
10h às 11h
56254566711 2 330 20
40
Turma 3 de 
Natação
Seg/Qua/Sex das 
8h às 9h
72345678901 1 200 10
50
Turma 4 de 
Natação
Ter/Qui das 10h 
às 11h
56254566711 1 190 10
60
Turma 2 de 
Hidroginástica
Ter/Qui das 7h 
às 8h
56254566711 2 350 30
Comando:
SELECT *
FROM turma
WHERE modalidade_codigo = 1
AND valor_mensalidade <= 200
Observe o resultado a seguir.
codigo nome descricao_dia_horario professor_cpf modalidade_codigo valor_mensalidade valor_desconto
20
Turma 2 de 
Natação
Ter/Qui das 8h 
às 9h
56254566711 1 200 10
40
Turma 3 de 
Natação
Seg/Qua/Sex das 
8h às 9h
72345678901 1 200 10
50
Turma 4 de 
Natação
Ter/Qui das 10h 
às 11h
56254566711 1 190 10
Operador IN
É possível substituir diversos operadores OR pelo operador IN. 
Quando se deseja avaliar se determinado valor pertence a uma lista de 
valores, pode-se usar o operador IN.
Linguagem SQL – DML 99
Exemplo 1: Dada a tabela aluno, todos os atributos dos alunos que 
moram na cidade 1 ou 2.
Tabela aluno
cpf nome telefone rua numero complemento bairro cep cidade_codigo
12345678901
Joaquim 
José
41-87654568 Rua A 123 Guabirotuba 80000 1
87654567365
Maria 
Cândida
41-87476567 Rua B 456 Batel 80000 1
98756514522
Ronaldo 
Antunes
41-98765367 Rua C 123 Xaxim 80000 1
98576524546
Gabriel 
Henrique
41-91245678 Rua D 456
Jardim das 
Américas
80000 1
64514343456
Gustavo 
Lacerda
41-98754612 Rua E 123 Itaipu 83000 2
98576543656
Tiago 
Alcântara
11-76542314 Rua F 456 Itaquera 11000 3
95876756512
Célia 
Justina
55-98751234 Rua G 123 Beira Rio 55000 4
Comando:
SELECT * 
FROM aluno
WHERE cidade_codigo IN (1,2)
Observe o resultado a seguir.
cpf nome telefone rua numero complemento bairro cep cidade_codigo
12345678901
Joaquim 
José
41-87654568 Rua A 123 Guabirotuba 80000 1
87654567365Maria 
Cândida
41-87476567 Rua B 456 Batel 80000 1
98756514522
Ronaldo 
Antunes
41-98765367 Rua C 123 Xaxim 80000 1
98576524546
Gabriel 
Henrique
41-91245678 Rua D 456
Jardim das 
Américas
80000 1
64514343456
Gustavo 
Lacerda
41-98754612 Rua E 123 Itaipu 83000 2
100 Modelagem de banco de dados e SQL
Operadores IS NULL e IS NOT NULL
Usados quando se deseja listar atributos cujos conteúdos sejam nu-
los ou não.
Exemplo 1: Dada a tabela aluno, listar todos os atributos dos alu-
nos cujo complemento esteja com o valor NULO.
Tabela aluno
cpf nome telefone rua numero complemento bairro cep cidade_codigo
12345678901
Joaquim 
José
41-87654568 Rua A 123 Guabirotuba 80000 1
87654567365
Maria 
Cândida
41-87476567 Rua B 456 Batel 80000 1
98756514522
Ronaldo 
Antunes
41-98765367 Rua C 123 Xaxim 80000 1
98576524546
Gabriel 
Henrique
41-91245678 Rua D 456
Jardim das 
Américas
80000 1
64514343456
Gustavo 
Lacerda
41-98754612 Rua E 123 Itaipu 83000 2
98576543656
Tiago 
Alcântara
11-76542314 Rua F 456 Itaquera 11000 3
95876756512
Célia 
Justina
55-98751234 Rua G 123 Beira Rio 55000 4
Observe o comando a seguir.
SELECT * 
FROM aluno
WHERE complemento IS NULL
Resultado:
cpf nome telefone rua numero complemento bairro cep cidade_codigo
Observações:
Nesse caso, o comando não retornou nenhuma linha, indicando 
que nenhum valor do atributo complemento é nulo.
Operador LIKE
Esse operador atua sobre atributos do tipo texto e tem por finalida-
de filtrar partes de um texto.
Usa-se o símbolo “%” para substituir um conjunto de caracteres e “_”, 
um carácter específico.
Linguagem SQL – DML 101
Exemplos:
 • Selecionar todos os alunos cujos nomes iniciam com a letra G, 
usar:
WHERE nome LIKE ‘G% ‘
Retorna: Gabriel Henrique e Gustavo Lacerda
 • Selecionar todos os nomes que terminam com unes, usar:
WHERE nome LIKE ‘%unes ‘
Retorna: Ronaldo Antunes
 • Selecionar todos os nomes que começam com determinada letra 
e depois a letra a, usar:
WHERE nome LIKE ‘_a% ‘
Retorna: Maria Cândida e Gabriel Henrique
Exemplo 1: Para este último exemplo, teríamos:
Tabela aluno
cpf nome telefone rua numero complemento bairro cep cidade_codigo
12345678901
Joaquim 
José
41-87654568 Rua A 123 Guabirotuba 80000 1
87654567365
Maria 
Cândida
41-87476567 Rua B 456 Batel 80000 1
98756514522
Ronaldo 
Antunes
41-98765367 Rua C 123 Xaxim 80000 1
98576524546
Gabriel 
Henrique
41-91245678 Rua D 456
Jardim das 
Américas
80000 1
64514343456
Gustavo 
Lacerda
41-98754612 Rua E 123 Itaipu 83000 2
98576543656
Tiago 
Alcântara
11-76542314 Rua F 456 Itaquera 11000 3
95876756512
Célia 
Justina
55-98751234 Rua G 123 Beira Rio 55000 4
Comando:
SELECT * 
FROM aluno
WHERE nome LIKE ‘_a%’
102 Modelagem de banco de dados e SQL
Resultado:
cpf nome telefone rua numero complemento bairro cep cidade_codigo
87654567365
Maria 
Cândida
41-87476567 Rua B 456 Batel 80000 1
98576524546
Gabriel 
Henrique
41-91245678 Rua D 456
Jardim das 
Américas
80000 1
Valores calculados
É possível selecionar valores calculados tanto no atributo como na 
cláusula WHERE. Para isso, basta colocar a expressão matemática dese-
jada. Para se dar um nome ao atributo com o resultado da expressão, 
pode-se usar o que é chamado de álias, colocando a cláusula AS antes 
dele.
Exemplo 1: Dada a tabela turma, listar o nome da turma e o valor 
da mensalidade menos o valor do desconto, mas somente se esse valor 
for menor que R$ 200,00.
Tabela turma
codigo nome descricao_dia_horario professor_cpf modalidade_codigo valor_mensalidade valor_desconto
10
Turma 1 de 
Natação
Seg/Qua/Sex das 
7h às 8h
72345678901 1 210 10
20
Turma 2 de 
Natação
Ter/Qui das 8h 
às 9h
56254566711 1 200 10
30
Turma 1 de 
Hidroginástica
Seg/Qua/Sex das 
10h às 11h
56254566711 2 330 20
40
Turma 3 de 
Natação
Seg/Qua/Sex das 
8h às 9h
72345678901 1 200 10
50
Turma 4 de 
Natação
Ter/Qui das 10h 
às 11h
56254566711 1 190 10
60
Turma 2 de 
Hidroginástica
Ter/Qui das 7h 
às 8h
56254566711 2 350 30
Comando:
SELECT nome, valor_mensalidade - valor_desconto 
AS valor_liquido
FROM turma
WHERE valor_mensalidade - valor_desconto < 200
Linguagem SQL – DML 103
Resultado:
nome valor_liquido
Turma 2 de Natação 190
Turma 3 de Natação 190
Turma 4 de Natação 180
Estes foram importantes operadores usados na cláusula WHERE, 
amplamente utilizados nas consultas.
4.2.2 Funções agregadas e agrupamento
As funções agregadas transformam os dados de todas as linhas de 
determinado atributo em um único valor, aplicando uma das funções 
matemáticas a seguir:
SUM Soma dos valores de todas as linhas do atributo
AVG Média dos valores de todas as linhas do atributo
MIN Menor valor de todas as linhas do atributo
MAX Maior valor de todas as linhas do atributo
COUNT Número de linhas do atributo
Exemplo 1: Dada a tabela turma, mostrar a soma dos valores das 
mensalidades das turmas cuja modalidade_codigo seja igual a 1.
Tabela turma
codigo nome descricao_dia_horario professor_cpf modalidade_codigo valor_mensalidade valor_desconto
10
Turma 1 de 
Natação
Seg/Qua/Sex das 
7h às 8h
72345678901 1 210 10
20
Turma 2 de 
Natação
Ter/Qui das 8h 
às 9h
56254566711 1 200 10
30
Turma 1 de 
Hidroginástica
Seg/Qua/Sex das 
10h às 11h
56254566711 2 330 20
40
Turma 3 de 
Natação
Seg/Qua/Sex das 
8h às 9h
72345678901 1 200 10
50
Turma 4 de 
Natação
Ter/Qui das 10h 
às 11h
56254566711 1 190 10
60
Turma 2 de 
Hidroginástica
Ter/Qui das 7h 
às 8h
56254566711 2 350 30
104 Modelagem de banco de dados e SQL
Comando:
SELECT SUM(valor_mensalidade) as total_mensalidade
FROM turma
WHERE modalidade_codigo = 1
Observe o resultado a seguir.
total_mensalidade
800
Exemplo 2: Saber quantas matrículas há atualmente na escola.
Tabela matricula
numero data aluno_cpf turma_codigo
100 12/05/2020 12345678901 10
101 01/12/2021 87654567365 10
102 05/01/2021 98756514522 10
103 31/01/2021 98576524546 20
104 02/11/2020 64514343456 20
105 10/01/2021 98576543656 30
106 20/12/2020 95876756512 30
Comando:
SELECT COUNT(*) AS total_de_matriculas
FROM matricula
Resultado:
total_de_matriculas
7
Agrupamento – GROUP BY
É possível combinar as funções agregadas para fazer agrupamento 
de valores. Para isso, pode-se usar a cláusula GROUP BY para indicar 
por qual atributo deseja-se agrupar.
Linguagem SQL – DML 105
Exemplo: Dada a tabela turma, mostrar a soma dos valores das 
mensalidades para cada modalidade_codigo.
Tabela turma
codigo nome descricao_dia_horario professor_cpf modalidade_codigo valor_mensalidade valor_desconto
10
Turma 1 de 
Natação
Seg/Qua/Sex das 
7h às 8h
72345678901 1 210 10
20
Turma 2 de 
Natação
Ter/Qui das 8h 
às 9h
56254566711 1 200 10
30
Turma 1 de 
Hidroginástica
Seg/Qua/Sex das 
10h às 11h
56254566711 2 330 20
40
Turma 3 de 
Natação
Seg/Qua/Sex das 
8h às 9h
72345678901 1 200 10
50
Turma 4 de 
Natação
Ter/Qui das 10h 
às 11h
56254566711 1 190 10
60
Turma 2 de 
Hidroginástica
Ter/Qui das 7h 
às 8h
56254566711 2 350 30
Comando:
SELECT modalidade_codigo, SUM(valor_mensalidade) 
AS total_mensalidade
FROM turma
GROUP BY modalidade_codigo
Resultado:
modalidade_codigo total_mensalidade
1 800
2 680
Observações:
Nesse resultado, a soma dos valores da mensalidade do código 1 foi 
de R$ 800,00 e do código 2 foi de R$ 680,00.
Cláusula HAVING
A cláusula HAVING funciona como a cláusula WHERE, com a diferen-
ça de que aplica a condição sobre os grupos.
Suponha que no exemplo anterior seja preciso mostrar o total por 
código (grupo), mas somente se esse total for maior do que R$ 700,00, 
por exemplo. Nesse caso, não teria sentido usar a cláusula WHERE, pois 
ela atua sobre as linhas. Para que essa condição seja aplicada sobre os 
grupos, devemos usar a cláusula HAVING.
106 Modelagem de banco de dados e SQL
Exemplo 1: Dada a tabela turma, mostrar a soma dos valores das 
mensalidades para cada modalidade_codigo, mas somente se essa 
soma for maior que R$ 700,00.
Comando:
SELECT modalidade_codigo,SUM(valor_mensalidade) 
AS total_mensalidade
FROM turma
GROUP BY modalidade_codigo
HAVING SUM(valor_mensalidade) > 700
Resultado:
modalidade_codigo total_mensalidade
1 800
Observações:
Nesse resultado, somente foi apresentado o total do código 1, por 
ser maior que R$ 700,00.
4.3 Comandos SQL para consultas avançadas 
Vídeo Até o momento, trabalhamos com a seleção atuando somente so-
bre uma tabela. Porém é comum termos consultas com informações 
de várias tabelas. Nesta seção conheceremos funções mais elabora-
das do comando SQL, que permitem a seleção de atributos de duas 
O vídeo 10 comandos 
essenciais em SQL para 
estudantes, publica-
do pelo canal Bóson 
Treinamentos, apre-
senta uma aula com a 
explicação de diversos 
comandos SQL que com-
plementam os exemplos 
mencionados neste 
capítulo. Vale assistir!
Disponível em: https://
www.youtube.com/
watch?v=64kPRsD22w4. Acesso 
em: 25 maio 2021.
Vídeo
Tabela turma
codigo nome descricao_dia_horario professor_cpf modalidade_codigo valor_mensalidade valor_desconto
10
Turma 1 de 
Natação
Seg/Qua/Sex das 
7h às 8h
72345678901 1 210 10
20
Turma 2 de 
Natação
Ter/Qui das 8h 
às 9h
56254566711 1 200 10
30
Turma 1 de 
Hidroginástica
Seg/Qua/Sex das 
10h às 11h
56254566711 2 330 20
40
Turma 3 de 
Natação
Seg/Qua/Sex das 
8h às 9h
72345678901 1 200 10
50
Turma 4 de 
Natação
Ter/Qui das 10h 
às 11h
56254566711 1 190 10
60
Turma 2 de 
Hidroginástica
Ter/Qui das 7h 
às 8h
56254566711 2 350 30
Linguagem SQL – DML 107
ou mais tabelas. Para isso, verificaremos os relacionamentos entre as 
tabelas e as suas chaves estrangeiras.
4.3.1 Junções
O comando SQL que permite a seleção em duas ou mais tabelas é o 
comando JOIN. Com ele, além de consultarmos atributos de várias ta-
belas, também é possível fazer as ligações entre elas por meio de suas 
chaves primárias e estrangeiras.
A estrutura do comando JOIN é a seguinte:
SELECT tabela_a.atributos, tabela_b.atributos
FROM tabela_a
INNER JOIN tabela_b
ON tabela_a.Key = tabela_b.ForeignKey
Na cláusula SELECT, devem ser colocados os atributos que se de-
seja. Como envolve a consulta a várias tabelas, é necessário qualificar 
o atributo colocando como prefixo o nome da tabela (ou um apelido) 
seguido de um ponto e depois o nome do atributo.
Na cláusula FROM, deve ser colocada a primeira tabela e, na cláusu-
la INNER JOIN, a segunda.
Para se fazer a ligação das duas tabelas (que devem estar relaciona-
das por meio da CONSTRAINT FOREIGN KEY), na cláusula ON, deve-se 
colocar a chave primária da primeira tabela igualada à sua respectiva 
chave estrangeira na segunda tabela.
Exemplo 1: Dadas as tabelas cidade e estado, listar no nome da 
cidade, a sigla e o nome do seu estado.
Tabela cidade
codigo nome estado_sigla
1 Curitiba PR
2 Foz do Iguaçu PR
3 São Paulo SP
4 Porto Alegre RS
108 Modelagem de banco de dados e SQL
Tabela estado
sigla nome
PR Paraná
SC Santa Catarina
SP São Paulo
RS Rio Grande do Sul
Comando:
SELECT cidade.nome as nome_cidade, estado.sigla as 
sigla_estado, estado.nome as nome_estado 
FROM estado
INNER JOIN cidade 
ON estado.sigla=cidade.estado_sigla
Resultado:
nome_cidade sigla_estado nome_estado
Curitiba PR Paraná
Foz do Iguaçu PR Paraná
São Paulo SP São Paulo
Porto Alegre RS Rio Grande do Sul
Exemplo 2: Dadas as tabelas matricula e aluno, listar todas as 
matrículas com os nomes dos alunos matriculados.
cpf nome telefone rua numero complemento bairro cep cidade_codigo
12345678901
Joaquim 
José
41-87654568 Rua A 123 Guabirotuba 80000 1
87654567365
Maria 
Cândida
41-87476567 Rua B 456 Batel 80000 1
98756514522
Ronaldo 
Antunes
41-98765367 Rua C 123 Xaxim 80000 1
98576524546
Gabriel 
Henrique
41-91245678 Rua D 456
Jardim das 
Américas
80000 1
64514343456
Gustavo 
Lacerda
41-98754612 Rua E 123 Itaipu 83000 2
98576543656
Tiago 
Alcântara
11-76542314 Rua F 456 Itaquera 11000 3
95876756512
Célia 
Justina
55-98751234 Rua G 123 Beira Rio 55000 4
Linguagem SQL – DML 109
Tabela matricula
numero data aluno_cpf turma_codigo
100 12/05/2020 12345678901 10
101 01/12/2021 87654567365 10
102 05/01/2021 98756514522 10
103 31/01/2021 98576524546 20
104 02/11/2020 64514343456 20
105 10/01/2021 98576543656 30
106 20/12/2020 95876756512 30
Comando:
select matricula.numero as numero_matricula, 
matricula.data as data_matricula, 
aluno.nome as nome_aluno
FROM aluno
INNER JOIN matricula
ON aluno.cpf = matricula.aluno_cpf
Resultado:
numero_matricula data_matricula nome_aluno
100 12/05/2020 Joaquim José
101 01/12/2021 Maria Cândida
102 05/01/2021 Ronaldo Antunes
103 31/01/2021 Gabriel Henrique
104 02/11/2020 Gustavo Lacerda
105 10/01/2021 Tiago Alcântara
106 20/12/2020 Célia Justina
Cláusula JOIN com mais de duas tabelas
A cláusula JOIN pode atuar sobre mais de duas tabelas. Nesse caso, 
basta colocarmos a indicação de um INNER JOIN para cada nova tabela, 
como mostra o exemplo a seguir.
Exemplo 1: Dadas as tabelas aluno, matricula e turma, listar 
todas as matrículas com os nomes dos alunos matriculados, suas res-
pectivas turmas com descrição dos dias e horários, bem como o valor 
da mensalidade. Listar somente as matrículas da modalidade Natação.
110 Modelagem de banco de dados e SQL
cpf nome telefone rua numero complemento bairro cep cidade_codigo
12345678901
Joaquim 
José
41-87654568 Rua A 123 Guabirotuba 80000 1
87654567365
Maria 
Cândida
41-87476567 Rua B 456 Batel 80000 1
98756514522
Ronaldo 
Antunes
41-98765367 Rua C 123 Xaxim 80000 1
98576524546
Gabriel 
Henrique
41-91245678 Rua D 456
Jardim das 
Américas
80000 1
64514343456
Gustavo 
Lacerda
41-98754612 Rua E 123 Itaipu 83000 2
98576543656
Tiago 
Alcântara
11-76542314 Rua F 456 Itaquera 11000 3
95876756512
Célia 
Justina
55-98751234 Rua G 123 Beira Rio 55000 4
Tabela matricula
numero data aluno_cpf turma_codigo
100 12/05/2020 12345678901 10
101 01/12/2021 87654567365 10
102 05/01/2021 98756514522 10
103 31/01/2021 98576524546 20
104 02/11/2020 64514343456 20
105 10/01/2021 98576543656 30
106 20/12/2020 95876756512 30
Tabela turma
codigo nome descricao_dia_horario professor_cpf modalidade_codigo valor_mensalidade valor_desconto
10
Turma 1 de 
Natação
Seg/Qua/Sex das 
7h às 8h
72345678901 1 210 10
20
Turma 2 de 
Natação
Ter/Qui das 8h 
às 9h
56254566711 1 200 10
30
Turma 1 de 
Hidroginástica
Seg/Qua/Sex das 
10h às 11h
56254566711 2 330 20
40
Turma 3 de 
Natação
Seg/Qua/Sex das 
8h às 9h
72345678901 1 200 10
50
Turma 4 de 
Natação
Ter/Qui das 10h 
às 11h
56254566711 1 190 10
60
Turma 2 de 
Hidroginástica
Ter/Qui das 7h 
às 8h
56254566711 2 350 30
Linguagem SQL – DML 111
Comando:
SELECT matricula.numero as numero_matricula, 
matricula.data as data_matricula, 
aluno.nome as nome_aluno,
turma.nome as nome_turma,
turma.descricao_dia_horario as dia_horario,
turma.valor_mensalidade as mensalidade
FROM aluno
INNER JOIN matricula ON aluno.cpf = matricula.aluno_cpf
INNER JOIN turma ON turma.codigo = matricula.turma_codigo
WHERE turma.modalidade_codigo = 1
Resultado:
numero_matricula data_matricula
nome_alu-
no
nome_turma dia_horario mensalidade
100 12/05/2020
Joaquim 
José
Turma 1 de Natação
Seg/Qua/Sex 
das 7h às 8h
210
101 01/12/2021
Maria 
Cândida
Turma 1 de Natação
Seg/Qua/Sex 
das 7h às 8h
210
102 05/01/2021
Ronaldo 
Antunes
Turma 1 de Natação
Seg/Qua/Sex 
das 7h às 8h
210
103 31/01/2021
Gabriel 
Henrique
Turma 2 de Natação
Ter/Qui das 8h 
às 9h
200
104 02/11/2020
Gustavo 
Lacerda
Turma 2 de Natação
Ter/Qui das 8h 
às 9h
200
As junções, por meio do comando JOIN, são extremamente úteis e 
amplamente utilizadas nos acessos às tabelas. Na maioria dos acessos, 
existe a necessidade de buscar dados de duas ou mais tabelas.
4.3.2 Subconsultas
As subconsultas permitem que sejam colocados comandos SELECT 
como condições da cláusula WHERE.
112 Modelagem de banco de dados e SQL
Esse comando atua em conjunto com o operador IN da cláusula 
WHERE, indicando que a condição seráatendida se estiver na lista de 
resultado do comando SELECT utilizado.
Como exemplo, imagine um comando para selecionar o CPF dos 
professores. O comando SELECT seria:
SELECT cpf FROM professor
Esse comando teria como resultado uma lista de CPFs de todos os 
professores da tabela.
Então, caso desejemos listar as turmas cujos CPFs dos professores 
estejam nessa lista, usaremos a estrutura do comando para subconsul-
ta. Observe ela a seguir.
SELECT tabela_a.atributos
FROM tabela_a
WHERE tabela_a.atributo 
IN (SELECT tabela_b.atributo FROM tabela_b)
Exemplo 1: Dadas as tabelas turma e professor, listar todas as 
turmas, mas somente dos professores que estão na tabela professor.
codigo nome descricao_dia_horario professor_cpf modalidade_codigo valor_mensalidade valor_desconto
10
Turma 1 de 
Natação
Seg/Qua/Sex das 
7h às 8h
72345678901 1 210 10
20
Turma 2 de 
Natação
Ter/Qui das 8h 
às 9h
56254566711 1 200 10
30
Turma 1 de 
Hidroginástica
Seg/Qua/Sex das 
10h às 11h
56254566711 2 330 20
40
Turma 3 de 
Natação
Seg/Qua/Sex das 
8h às 9h
72345678901 1 200 10
50
Turma 4 de 
Natação
Ter/Qui das 10h 
às 11h
56254566711 1 190 10
60
Turma 2 de 
Hidroginástica
Ter/Qui das 7h 
às 8h
56254566711 2 350 30
Linguagem SQL – DML 113
Turma professor
cpf nome data_admissao
72345678901 Cleber Custódio 09/12/2005
56254566711 Suzana Azevedo 03/01/2007
Comando:
SELECT *
FROM turma
WHERE professor_cpf IN (SELECT cpf FROM professor)
Resultado:
codigo nome descricao_dia_horario professor_cpf modalidade_codigo valor_mensalidade valor_desconto
10
Turma 1 de 
Natação
Seg/Qua/Sex das 
7h às 8h
72345678901 1 210 10
20
Turma 2 de 
Natação
Ter/Qui das 8h 
às 9h
56254566711 1 200 10
30
Turma 1 de 
Hidroginástica
Seg/Qua/Sex das 
10h às 11h
56254566711 2 330 20
40
Turma 3 de 
Natação
Seg/Qua/Sex das 
8h às 9h
72345678901 1 200 10
50
Turma 4 de 
Natação
Ter/Qui das 10h 
às 11h
56254566711 1 190 10
60
Turma 2 de 
Hidroginástica
Ter/Qui das 7h 
às 8h
56254566711 2 350 30
Com isso, encerramos as principais variações do comando SE-
LECT capazes de produzir a maioria das consultas que os sistemas 
necessitam.
O vídeo SQL // Dicionário 
do Programador, publi-
cado pelo canal Código 
Fonte TV, apresenta um 
panorama geral sobre a 
linguagem SQL de uma 
forma didática e ilustrati-
va. Não deixe de conferir 
no link a seguir.
Disponível em: https://
www.youtube.com/
watch?v=kMznyI7r2Tc&t=32s. 
Acesso em: 25 maio 2021.
Vídeo
CONSIDERAÇÕES FINAIS
Este capítulo apresentou em detalhes e de maneira bastante prática 
os principais comandos DML e suas variações com o objetivo de manipu-
lar os dados das tabelas do banco de dados.
Por meio dos comandos SQL/DML, foi possível administrar os dados 
com a possibilidade de inclusão de linhas, alteração e exclusão.
Também vimos um dos comandos mais importantes do SQL, o co-
mando SELECT, o qual é extremamente versátil e oferece múltiplas pos-
sibilidades de busca aos dados. Vimos desde a busca básica de dados 
114 Modelagem de banco de dados e SQL
de uma tabela, filtrando linhas com operadores relacionais, matemáticos, 
booleanos, até a opção de agrupamento de atributos, junção de tabelas 
e subconsultas.
Com isso, uma importante abordagem de banco de dados foi cumpri-
da neste capítulo, já que a maioria dos sistemas se utiliza da linguagem 
SQL para acesso aos dados.
ATIVIDADES
1. O que é Data Manipulation Language (DML)?
2. Qual é a estrutura básica do comando SELECT?
3. Quais são os comandos SQL para incluir, alterar e excluir linhas em 
tabelas?
REFERÊNCIAS
DATE, C. J. Introdução a sistemas de banco de dados. 8. ed. Rio de Janeiro: Elsevier, 2003.
ELMASRI, R; NAVATHE, S. Sistemas de banco de dados. 6. ed. São Paulo: Pearson Education 
do Brasil, 2013.
SILBERSCHATZ, A.; KORTH, H. F.; SUDARSHAN, S. Sistema de banco de dados. 7. ed. Rio de 
Janeiro: LTC, 2020.
Vídeo
Conceitos avançados de banco de dados 115
5
Conceitos avançados 
de banco de dados
Neste capítulo traremos, em primeiro lugar, os conceitos e 
as estruturas avançadas que podem ser utilizados nos bancos 
de dados. Em seguida, trataremos do funcionamento interno 
que possibilita o controle das transações solicitadas pelos sis-
temas de informações para que elas sejam executadas. Por fim, 
veremos a forma como as linguagens de programação acessam 
o banco.
As estruturas avançadas são as visões, os gatilhos e as 
Stored Procedures, os quais possibilitam a colocação de de-
terminadas rotinas no banco que, originalmente, teriam que 
ser programadas na linguagem de programação com a qual o 
sistema foi implementado. Por isso, muitas dessas rotinas de 
acesso e administração dos dados podem ficar centralizadas 
no próprio banco de dados, possibilitando melhor controle e 
administração dos seus códigos-fontes.
Também conheceremos os mecanismos que o SGBD utili-
za para o controle de execução das transações. Mostraremos 
todos os desafios de se executar centenas e até milhares de 
transações, muitas delas de maneira concorrente e simultânea. 
Esses mecanismos devem ser capazes de fornecer uma execu-
ção segura, correta e que mantenha a integridade dos dados 
sem cometer falhas.
Finalmente, aprenderemos como acessar o banco de dados 
PostgreSql da linguagem de programação Java. Com isso, será 
possível conhecermos o modelo utilizado por muitas empresas 
para se ter um sistema de informação que emprega um banco 
de dados.
116 Modelagem de banco de dados e SQL
5.1 Visões, gatilhos e Stored Procedures 
Vídeo Nesta seção conheceremos algumas estruturas avançadas que 
podem ser utilizadas nos bancos de dados. Elas serão programadas 
internamente no banco de dados, fazendo com que os programado-
res não necessitem escrever essas rotinas nos programas do siste-
ma de informação.
Apresentaremos três estruturas: as visões (views), os gatilhos 
(triggers) e as Stored Procedures (funções ou procedimentos).
5.1.1 Visões (views)
Podemos entender como visão (view) uma nova tabela que não 
existe fisicamente. As visões são criadas com base nas tabelas do 
banco de dados com o objetivo de visualizar um subconjunto de 
seus atributos e suas linhas.
Também chamadas de tabelas derivadas, já que são criadas com 
base em uma tabela original, elas não são novas tabelas, mas sim uma 
maneira de enxergar parte da tabela original. As visões ainda podem 
ser consideradas tabelas virtuais (ELMASRI; NAVATHE, 2013).
A estrutura de criação de uma visão é a seguinte:
CREATE VIEW <nome-da-visao> AS
 --Comando SELECT que se deseja para a visão
Como exemplo, podemos utilizar a tabela aluno do problema da 
escola de natação:
aluno
cpf text PK
nome text
telefone text
rua text
numero text
complemento text
bairro text
cep int
cidade_codigo int FK
Conceitos avançados de banco de dados 117
Digamos que, em determinado momento, as linhas dessa tabela se-
jam as seguintes:
cpf
text
nome
text
telefone
text
rua
text
numero
text
complemento
text
bairro
text
cep
integer
cidade_
codigo
integer
12345678901
Joaquim 
José
41-
87654568
Rua A 123 Guabirotuba 80000 1
87654567365
Maria 
Cândida
41-
87476567
Rua B 456 Batel 80000 1
98756514522
Ronaldo 
Antunes
41-
98765367
Rua C 123 Xaxim 80000 1
98576524546
Gabriel 
Henrique
41-
91245678
Rua D 456
Jardim das 
Américas
80000 1
64514343456
Gustavo 
Lacerda
41-
98754612
Rua E 123 Itaipu 83000 2
98576543656
Tiago 
Alcantara
11-
76542314
Rua F 456 Itaquera 11000 3
95876756512
Célia 
Justina
55-
98751234
Rua G 123 Beira Rio 55000 4
Suponhamos que desejamos ter uma visão somente dos atributos 
cpf e nome e só dos alunos que moram na cidade cujo cidade_codigo 
seja igual a 1.
Poderíamos criar, então, uma visão chamada alunoscuritiba. O 
comando para essa criação seria:
CREATE VIEW alunoscuritiba AS 
SELECT cpf,nome FROM aluno WHERE cidade_codigo = 1 
Desse ponto em diante, podemos considerar que existe uma ta-
bela chamada alunoscuritiba e que é possível emitir qualquer 
comando SQL dela.
Por exemplo,se executarmos o seguinte comando:
SELECT * FROM alunoscuritiba
Teremos como resultado:
118 Modelagem de banco de dados e SQL
cpf
text
nome 
text
12345678901 Joaquim José
87654567365 Maria Cândida
98756514522 Ronaldo Antunes
98576524546 Gabriel Henrique
Nesse resultado foram selecionados somente os atributos cpf e 
nome dos alunos cujo atributo cidade_codigo é igual a 1.
Um detalhe importante sobre as visões é que, como não é criada 
uma tabela, somente temos uma visão diferente (um subconjunto) da 
tabela original e qualquer operação de inclusão, alteração ou exclusão 
de linhas sobre a visão afeta essa tabela, não somente a visão.
5.1.2 Gatilhos (triggers)
Os gatilhos (triggers) são mecanismos utilizados para que, sempre 
que certos eventos ocorrerem e certas condições forem satisfeitas, um 
tipo de ação possa ser tomado (ELMASRI; NAVATHE, 2013). Esses even-
tos e condições referem-se a comandos SQL para a inclusão, alteração 
e exclusão de linhas em tabelas.
Pode ser útil especificarmos uma condição que, se violada, faça com 
que um usuário específico seja notificado. Também é possível que, quan-
do uma condição seja satisfeita, uma ou mais tabelas sejam atualizadas.
Segundo Silberschatz, Korth e Sudarshan (2020, p. 113), um gatilho 
(trigger) “é um comando que o sistema executa automaticamente como 
um efeito colateral de uma modificação no Banco de Dados”.
A criação de um gatilho deve obedecer a dois requisitos, que são:
 • determinar o momento em que ele deve ser executado;
 • determinar as ações que devem ser executadas nele.
A estrutura de criação de gatilhos é a seguinte:
CREATE TRIGGER <nome-do-gatilho>
ON <nome-da-tabela>
[FOR/AFTER/INSTEAD OF] [INSERT/UPDATE/DELETE]
AS
 --Corpo do gatilho
Conceitos avançados de banco de dados 119
Exemplo:
No problema da escola de natação, sempre que um aluno for cadas-
trado, será criada automaticamente uma matrícula para ele na moda-
lidade natação.
Para esse fim, em primeiro lugar, definimos o gatilho no qual, sem-
pre que ocorrer uma inclusão na tabela aluno, uma inclusão também 
será feita na tabela matricula.
Tabela aluno:
cpf
text
nome
text
telefone
text
rua
text
numero
text
complemento
text
bairro
text
cep
integer
cidade_
codigo
integer
12345678901
Joaquim 
José
41-
87654568
Rua A 123 Guabirotuba 80000 1
87654567365
Maria 
Cândida
41-
87476567
Rua B 456 Batel 80000 1
98756514522
Ronaldo 
Antunes
41-
98765367
Rua C 123 Xaxim 80000 1
98576524546
Gabriel 
Henrique
41-
91245678
Rua D 456
Jardim das 
Américas
80000 1
64514343456
Gustavo 
Lacerda
41-
98754612
Rua E 123 Itaipu 83000 2
98576543656
Tiago 
Alcantara
11-
76542314
Rua F 456 Itaquera 11000 3
95876756512
Célia 
Justina
55-
98751234
Rua G 123 Beira Rio 55000 4
Tabela matricula:
numero
integer
data
date
aluno_cpf
text
turma_codigo
integer
100 2020-05-12 12345678901 10
101 2021-12-01 87654567365 10
102 2021-01-05 98756514522 10
103 2021-01-31 98576524546 20
104 2020-11-02 64514343456 20
105 2021-01-10 98576543656 30
106 2020-12-20 95876756512 30
120 Modelagem de banco de dados e SQL
O gatilho terá a seguinte especificação:
CREATE TRIGGER incluiMatricula
ON aluno
FOR INSERT
AS
BEGIN
 DECLARE
 @numero_matricula INTEGER
 @aluno_cpf TEXT
 SELECT MAX(@numero_matricula = numero) 
 FROM matricula
 SELECT @aluno_cpf = aluno_cpf, FROM INSERTED
 INSERT INTO matricula (numero, data, aluno_cpf, 
 turma_codigo)
 VALUES ( @numeromatricula+1,
 GETDATE(),
 @aluno_cpf,
 1)
END
Explicação dos comandos:
Foi criado um gatilho chamado incluiMatricula, o qual, a cada 
comando INSERT na tabela aluno, faz os procedimentos que estão 
abaixo da cláusula BEGIN.
Primeiro, são declaradas duas variáveis que serão utilizadas no cor-
po do gatilho: @numero_matricula e @aluno_cpf. Em seguida, são 
colocados dois comandos SELECT.
No primeiro, é feita uma busca do último número de matrícula ca-
dastrado na tabela matricula e seu conteúdo fica armazenado na va-
riável @numero_matricula. No segundo, é feita a leitura do atributo 
@aluno_cpf do aluno que acabou de ser inserido na tabela aluno.
Conceitos avançados de banco de dados 121
Essas duas variáveis serão necessárias para a inclusão da linha na 
tabela matricula.
Finalmente, o comando INSERT incluirá efetivamente a linha na ta-
bela matricula, somando uma unidade ao número de matrícula lido, 
a data do dia, o CPF do aluno inserido e a turma número 1.
Existem outras maneiras de utilizarmos gatilhos, mas basicamen-
te esse exemplo mostra como um evento em uma tabela (nesse caso, 
uma inclusão na tabela aluno) pode disparar outros eventos em ou-
tras tabelas (nesse caso, uma inclusão na tabela matricula).
É importante ressaltarmos que podem existir diferenças de sintaxes 
dos comandos em cada SGBD. Aconselhamos verificar no manual do 
SGBD com o qual estiver trabalhando qual é a sintaxe correta.
5.1.3 Stored Procedures
As Stored Procedures são funções criadas no próprio banco de da-
dos, as quais podem ser chamadas por meio do comando SELECT.
Segundo Silberschatz, Korth e Sudarshan (2020, p. 108), as Stored 
Procedures “permitem que a lógica do negócio fique armazenada no 
Banco de Dados e seja executada a partir de comandos SQL”.
Primeiro, é necessário construir a Stored Procedure atribuindo um 
nome e armazenando-a no banco de dados. O comando SELECT se re-
ferirá a esse nome no momento da chamada.
A estrutura de criação da Stored Procedure é a seguinte:
CREATE FUNCTION <nome-da-stored-procedure> (parâmetros)
RETURNS <tipo-de-dado>
BEGIN
 DECLARE <variável>
 <comando-select>
 RETURN <variável>
END 
122 Modelagem de banco de dados e SQL
Como exemplo, vamos criar uma Stored Procedure usando a tabela aluno do problema da 
escola de natação:
cpf
text
nome
text
telefone
text
rua
text
numero
text
complemento
text
bairro
text
cep
integer
cidade_
codigo
integer
12345678901
Joaquim 
José
41-
87654568
Rua A 123 Guabirotuba 80000 1
87654567365
Maria 
Cândida
41-
87476567
Rua B 456 Batel 80000 1
98756514522
Ronaldo 
Antunes
41-
98765367
Rua C 123 Xaxim 80000 1
98576524546
Gabriel 
Henrique
41-
91245678
Rua D 456
Jardim das 
Américas
80000 1
64514343456
Gustavo 
Lacerda
41-
98754612
Rua E 123 Itaipu 83000 2
98576543656
Tiago 
Alcantara
11-
76542314
Rua F 456 Itaquera 11000 3
95876756512
Célia 
Justina
55-
98751234
Rua G 123 Beira Rio 55000 4
Exemplo:
Vamos supor que desejamos listar a quantidade de alunos de 
determinada cidade. A Stored Procedure que criaremos receberá como 
parâmetro um código de cidade e devolverá a quantidade de alunos que 
tem esse valor no atributo cidade_codigo.
CREATE FUNCTION 
buscaQtdeAlunosPorCidade(par_cidade_codigo integer)
RETURNS integer
BEGIN
 DECLARE qtde_alunos integer
 SELECT COUNT(*) INTO qtde_alunos
 FROM aluno
 WHERE cidade_codigo = par_cidade_codigo
 RETURN qtde_alunos
END 
Explicação dos comandos:
Foi criada a Stored Procedure buscaQtdeAlunosPorCidade, 
que recebe como parâmetro determinado código de cidade na va-
Conceitos avançados de banco de dados 123
riável par_cidade_codigo, cujo tipo de dado é um integer (valor 
numérico inteiro).
A cláusula RETURNS indica que será devolvido um valor do tipo 
integer para quem chamar a Stored Procedure; a cláusula BEGIN 
indica o início dos comandos; e a cláusula DECLARE cria a variável 
qtde_alunos do tipo integer, que será usada para armazenar a 
quantidade lida.
Em seguida, é colocado o comando SELECT, responsável por buscar 
a quantidade de alunos que atende à condição de que o código da sua 
cidade é igual ao valor recebido como parâmetro. Essa quantidade é 
colocada na variável qtde_alunos.
Finalmente, a cláusula RETURN encerra a Stored Procedure, devol-
vendo essa quantidade de alunos para quem a chamou.
Com a Stored Procedure criada no banco de dados, já podemos 
usar o comando SELECT para chamá-la.
Oseguinte exemplo chama a Stored Procedure buscaQtdeAlu-
nosPorCidade, transmitindo o código de cidade igual a 1:
SELECT cpf, nome FROM aluno
WHERE buscaQtdeAlunosPorCidade(1) > 3 
Teremos como resultado:
cpf
text
nome 
text
12345678901 Joaquim José
87654567365 Maria Cândida
98756514522 Ronaldo Antunes
98576524546 Gabriel Henrique
Nesse resultado, como a cidade com código igual a 1 tem mais de 
três alunos, eles retornaram na seleção.
Esse foi um exemplo de uma Stored Procedure que, embora simples, 
demonstra o potencial desse tipo de estrutura, em que funções neces-
sárias a um sistema de informações podem ser construídas e armazena-
das no banco de dados, a fim de centralizá-las em um local apropriado, 
retirando todos esses procedimentos dos programas da linguagem.
124 Modelagem de banco de dados e SQL
5.2 Processamento de transações 
Vídeo Os bancos de dados precisam ter extremo controle das requisições 
que chegam para serem executadas, sejam elas as solicitações de consul-
ta às tabelas por meio do comando SELECT, sejam elas, principalmente, as 
atualizações por meio dos comandos INSERT, UPDATE e DELETE.
Segundo Elmasri e Navathe (2013, p. 14), “uma transação é uma 
execução qualquer de um programa de usuário em um SGBD”. Enten-
demos como execução qualquer comando advindo de uma linguagem 
de programação com o objetivo de selecionar ou manipular dados do 
banco para servirem a um sistema de informação.
Em um sistema executado na web ou em um aplicativo para dispo-
sitivos móveis é comum ocorrerem acessos simultâneos aos mesmos 
recursos (tabelas, índices, entre outros).
O banco de dados sempre deve permanecer íntegro, ou seja, não 
é aceitável que após as atualizações em tabelas ocorram erros por 
falta de informação, os quais não garantem a integridade referencial. 
Também durante a execução das atualizações não deve haver conflitos 
entre as solicitações, fazendo com que uma delas impeça a execução 
de outra. Para isso, os bancos são dotados de importantes rotinas de 
controle de processamento das transações.
Podemos mencionar como exemplo uma empresa aérea que vende 
passagens por diversos meios on-line. Consideremos que um cliente 
encontre certo voo para a compra de uma passagem e esteja no mo-
mento de escolher um assento. Não é possível permitir que outro clien-
te, no mesmo instante, visualize esse assento como disponível, sob o 
risco de dois clientes escolherem o mesmo assento na mesma fração 
de segundo. Esse seria um problema de falta de integridade nas tabe-
las (ELMASRI; NAVATHE, 2013).
Da mesma forma, o SGBD deve proteger os usuários dos efeitos de 
falhas do sistema, garantindo que todos os dados estejam restaurados 
à situação original, anterior à falha. Suponhamos, nesse caso, que deter-
minado cliente informe os dados de pagamento de uma passagem aé-
rea (número do cartão de crédito) e que a comunicação com a operadora 
de cartão falhe. O SGBD deve garantir que todas as informações relativas 
a essa venda sejam desfeitas, sob o risco de se ter uma passagem indica-
da no sistema como vendida, porém sem o devido pagamento.
Conceitos avançados de banco de dados 125
5.2.1 Propriedades ACID
Um SGBD deve garantir quatro propriedades toda vez que execu-
tar transações, tanto para o acesso concorrente quanto para evitar 
falhas. Essas propriedades são chamadas ACID, uma sigla para repre-
sentar os termos: atômica, consistente, isolada e durável (ELMASRI, 
NAVATHE, 2013). Observemos cada um dos elementos:
A
Na execução de uma transação, devemos garantir 
que todas as ações sejam executadas ou nenhuma 
delas. Os usuários não podem ser penalizados por 
transações incompletas, isto é, não devemos colocar 
nos programas rotinas que tratam da situação de 
uma transação não completar todas as suas ações.
C
Cada transação executada de modo independente 
deve preservar a consistência dos dados, ou seja, não 
podemos permitir que dados inconsistentes sejam 
imputados nas tabelas do banco.
I
D
Uma transação deve ser vista pelo usuário sem con-
siderar o efeito de outra, uma vez que ele não tem 
controle das transações que podem ser executadas 
ao mesmo tempo que a sua. As transações devem 
ser isoladas (ou protegidas) do efeito do plano de 
execução de outras transações.
Muitas vezes o banco de dados, por questão de 
desempenho, divide os passos de uma transação 
para ser executado em vários momentos. Assim, 
o SGBD deve garantir que, uma vez informada ao 
usuário a conclusão da transação, seus efeitos se-
jam persistidos, isto é, mesmo que o sistema falhe 
após essa comunicação, todas as ações devem ser 
refletidas no banco pelo SGBD.
Ok
si
Ok
si
/S
hu
tte
rs
to
ck
Essas propriedades são básicas em todos os SGBDs e não se admite 
que ocorram falhas que possam as ferir.
126 Modelagem de banco de dados e SQL
5.2.2 Controle de concorrência de transações
Uma transação é executada em uma única unidade lógica de 
processamento no banco de dados, e isso inclui operações de sele-
ção, inclusão, alteração ou exclusão de linhas em tabelas (ELMASRI; 
NAVATHE, 2013).
Também é comum que existam acessos concorrentes ao mes-
mo recurso em determinado instante, pois os bancos de dados são 
multiusuários, ou seja, atendem a transações de várias pessoas 
simultaneamente. Para isso, o SGBD deve promover o devido en-
fileiramento das ações, a fim de garantir a integridade dos dados 
e a execução correta da transação, sem prejuízo aos dados e ao 
desempenho da execução.
As transações executadas simultaneamente utilizam duas es-
tratégias, dependendo da arquitetura da máquina na qual o SGBD 
está instalado.
Na primeira estratégia, em um único processador, há uma si-
mulação de execução simultânea (Figura 1), já que as execuções 
das transações são intercaladas. Digamos que no momento (m1) 
iniciem duas transações A e B. A transação A é iniciada e executa 
uma parte de suas operações. No momento em que ela necessita 
aguardar algum recurso (que deve ser lido em um hardware de dis-
co, por exemplo), é suspensa e a transação B iniciada. Da mesma 
forma, esta executa uma parte e é suspensa. A transação A retorna 
até que, em determinado momento (m2), ambas encerram.
Figura 1
Exemplo de transações simultâneas em um único processador
A A
B B
m2m1
Fonte: Elaborada pelo autor com base em Elmasri; Navathe, 2013.
Conceitos avançados de banco de dados 127
Na segunda estratégia, com vários processadores, cada um assume 
uma transação e elas são efetivamente executadas de maneira simul-
tânea (Figura 2).
Figura 2
Exemplo de transações simultâneas com vários processadores
A
Processador 2
Processador 1
B
m2m1
Fonte: Elaborada pelo autor com base em Elmasri; Navathe, 2013.
Nas duas abordagens as transações são executadas, logo, devemos 
adotar a estratégia mais apropriada para os casos específicos.
5.2.3 Problemas no controle de concorrência
Vários problemas podem ocorrer durante a execução simultânea 
de transações, e o controle de concorrência do SGBD deve ser eficaz. 
De acordo com Elmasri e Navathe (2013), os problemas principais são:
Atualização perdida 
 Ocorre quando duas transações tentam acessar o mesmo recurso do banco 
de dados (determinada tabela, por exemplo), de modo que o acesso a certa 
linha da tabela por uma das transações torna o dado incorreto para a se-
gunda. Como exemplo, digamos que a transação A acesse o valor 80 de um 
atributo de determinada linha. No mesmo instante, a transação B faz uma 
atualização desse atributo, alterando o valor para 70. Quando a transação A 
volta a executar e utiliza o valor 80, esse dado já está desatualizado e pode 
causar erros no sistema que a executou.
Atualização temporária (ou leitura suja)
Ocorre quando uma transação atualiza determinado atributo e depois falha. 
Antes do tempo de desfazer essa atualização para o valor original, anterior à 
falha, outra transação utiliza-se do valor que, em última análise, está incorreto 
e será desfeito.
(Continua)
128 Modelagem de banco de dados e SQL
Resumoincorreto
Ocorre quando uma transação está calculando certa função que utiliza uma 
série de itens de diversas tabelas enquanto outras transações estão atuali-
zando esses itens. Ao final da transação, seu resumo estará incorreto.
Leitura não repetitiva
Ocorre quando uma transação faz a leitura de uma linha duas vezes e, no 
intervalo entre as duas leituras, outra transação altera a linha. A transação 
tem dois valores para a mesma linha.
Esses e outros problemas são conhecidos e evitados por meca-
nismos colocados no SGBD. O principal deles é o conceito de pren-
der um recurso (lock) toda vez que for utilizado, para evitar que 
durante a execução da transação outra solicite o mesmo recurso. 
Com isso, a maioria das falhas descritas é evitada.
Os recursos podem ser as tabelas ou as linhas. Assim, quando 
determinada linha é solicitada por uma transação que irá atualizar 
seu valor, essa linha fica bloqueada para que nenhuma outra faça a 
leitura. Ao final de uma transação bem-sucedida, a linha é liberada. 
Nesse espaço de tempo, todas as demais transações que necessi-
tam do mesmo recurso ficam aguardando a finalização.
Certas verificações devem ser feitas diretamente pelos sistemas 
de informação, pois algumas vezes o SGBD não tem o conhecimen-
to de que o recurso deve ou não ser bloqueado. Assim, quando 
uma transação faz uma simples leitura de uma linha da tabela, essa 
linha não é bloqueada. Caso a mesma aplicação, em um momen-
to posterior, decida utilizar esse valor para uma atualização, por 
exemplo, deve verificar se o dado continua com o valor lido e, em 
caso contrário, informar ao usuário que o dado foi atualizado e 
assumiu outro valor nesse intervalo de tempo.
Um problema grave a que os SGBDs têm especial atenção e im-
plementam mecanismos sofisticados de prevenção são os chama-
dos impasses (deadlock). Eles ocorrem quando uma transação T1 
estabelece um bloqueio sobre o recurso A, e a transação T2 sobre o 
recurso B. Agora T1 solicita um bloqueio sobre B, que está bloquea-
Conceitos avançados de banco de dados 129
do, e é enfileirada (fica aguardando). Nesse momento, T2 solicita 
um bloqueio sobre o recurso A, sendo também enfileirada, já que 
ele está bloqueado pela T1. Ou seja, uma transação fica esperando 
a liberação de outra indefinidamente e nunca elas serão liberadas. 
Os SGBDs evitam essa situação, impondo um tempo limite de blo-
queio, e cancelam transações com essas características.
O processamento das transações em um SGBD é a sua principal 
tarefa. O software é considerado robusto se produz poucas falhas, 
que são evitadas com inúmeros algoritmos e estratégias capazes 
de oferecer ao usuário final os resultados desejados em um tempo 
aceitável e sem a incidência de falhas.
O vídeo O que é deadlock 
e como monitorar no SQL 
Server, publicado pelo 
canal DBA PRO, ilustra de 
maneira interessante o 
problema do impasse e 
ensina como evitá-lo.
Disponível em: https://
www.youtube.com/
watch?v=wg7FV61LVGo. Acesso 
em: 28 maio 2021.
Vídeo
5.3 Utilização da linguagem SQL na 
linguagem de programação Java Vídeo
A linguagem SQL tornou-se o padrão de mercado para acesso 
aos bancos de dados. Praticamente todas as linguagens de progra-
mação acessam os bancos usando essa linguagem por meio de um 
conjunto de comandos que possibilita o acesso.
Segundo Ramakrishnan e Gehrke (2008, p. 155), “os aplicativos 
que se baseiam em SGBD para gerenciar dados são executados 
como processos separados que se conectam ao SGBD para intera-
gir com ele”. Com essa conexão estabelecida, é possível solicitar ao 
SGBD a execução de comandos SQL, como SELECT, INSERT, UPDA-
TE e DELETE.
Assim, se por um lado todos os comandos DML (Data 
Manipulation Language) usados para administrar os dados das ta-
belas cadastradas no SGBD podem ser emitidos diretamente no 
console de comandos do banco, os mesmos comandos também 
podem ser colocados nas estruturas de comandos das linguagens 
de programação, de modo que esses dados possam ser manipula-
dos e apresentados por elas nos sistemas de informação.
A Figura 3 mostra um esquema de como os dados transitam 
desde o SGBD até um sistema de informação.
130 Modelagem de banco de dados e SQL
Figura 3
Interação entre o sistema de informação e o banco de dados por meio da linguagem SQL
Tela web ou 
mobile
Recebe os dados 
do banco
Alunos
João
Maria
Carlos
Select * from 
aluno
Tela do sistema
1
4 3
2
Listar alunos
Programa Banco de dados
Linguagem de programação SGBD
Fonte: Elaborada pelo autor.
A seguir, conheceremos a interação entre a linguagem de pro-
gramação Java e o banco de dados PostgreSql. Essa linguagem 
é uma das mais utilizadas no mundo, tanto em aplicações para 
desktop quanto em aplicações na web e em dispositivos móveis. 
Ela dispõe de todos os comandos necessários para os acessos aos 
dados, como a seleção de atributos em tabelas e a manutenção das 
linhas.
5.3.1 Conexão com o banco de 
dados PostgreSql
A linguagem Java dispõe de uma Application Program 
Interface (API) capaz de se conectar e se comunicar com o banco 
de dados PostgreSql. Para isso, o driver do banco de dados deve 
estar instalado no projeto da aplicação, de maneira que os coman-
dos de acesso ao banco possam ser utilizados nos programas. Nor-
malmente isso é feito no ambiente de desenvolvimento integrado 
(Integrated Development Environment – IDE) de programação 
em Java por meio da instalação de uma biblioteca com os drivers 
necessários.
Com o driver instalado, no momento de acessar o banco de da-
dos, é necessário fazer a conexão informando o nome do banco e a 
senha de acesso.
Conceitos avançados de banco de dados 131
O comando para realizar essa conexão é o seguinte:
1. protected Connection con = null;
2.
3. Class.forName(“org.postgresql.Driver”);
4.
5. this.con = DriverManager.getConnection(
“jdbc:postgresql://localhost:5432/EscolaNatacao”,
“postgres”, “root”); 
Explicação dos comandos:
 • Linha 1: definição da variável con que irá receber o objeto da 
conexão.
 • Linha 3: assinalamento de que se trata do banco de dados 
postgresql.
 • Linha 5: comando que faz a conexão com o banco 
EscolaNatacao indicado, passando como parâmetro o usuá-
rio postgres e a senha root.
Dessa forma, o banco estará disponível para a aplicação de qual-
quer comando SQL/DML para a manipulação dos dados de suas tabe-
las. Com a conexão aberta, é possível executar os comandos SELECT, 
INSERT, UPDATE e DELETE.
5.3.2 Comando para seleção em tabelas (SELECT)
O comando SELECT faz a leitura de dados em tabelas do banco. 
No exemplo a seguir, leremos os dados da tabela aluno do banco 
EscolaNatacao, a qual, como vimos no modelo físico de dados, possui 
os seguintes atributos:
aluno
cpf text PK
nome text
telefone text
rua text
numero text
complemento text
bairro text
cep int
cidade_codigo int FK
132 Modelagem de banco de dados e SQL
Vamos supor que desejemos ler todos os alunos que moram na ci-
dade cujo código seja igual a 1.
O comando SELECT para essa leitura seria:
SELECT * FROM aluno WHERE codigo_cidade = 1
Os comandos para fazermos a leitura dos dados dessa tabela na 
linguagem Java seriam os seguintes:
1. import java.sql.Connection;
2. import java.sql.DriverManager;
3. import java.sql.PreparedStatement;
4. import java.sql.ResultSet;
5. import java.sql.SQLException;
6. 
7. int codigoCidade = 1;
8.
9. PreparedStatement p = 
 this.con.prepareStatement(“SELECT * FROM aluno 
 WHERE codigo_cidade = ?”);
10. 
11. p.setInt(1, codigoCidade);
12.
13.ResultSet rs = p.executeQuery();
14.
15.while(rs.next()){
16. String cpf = rs.getString(“cpf”));
17. String nome = rs.getString(“nome”));
18. String telefone = rs.getString(“telefone”));
19. String rua = rs.getString(“rua”));
20. String numero = rs.getString(“numero”));
21. String complemento = rs.getString(“complemento”));
22. String bairro = rs.getString(“bairro “));
23. int cep = rs.getInt(“cep”));
24. int codigo_cidade = rs.getInt(“codigo_cidade”));
25.}
26.rs.close();27.p.close();
28.con.close(); 
Conceitos avançados de banco de dados 133
Explicação dos comandos:
 • Linhas 1 a 5: importações dos pacotes necessários para a execu-
ção dos comandos que serão utilizados.
 • Linha 7: criação da variável Java com o nome codigoCidade, ini-
ciada com o valor 1, que será usada como critério de leitura no 
comando SELECT;
 • Linha 9: principal comando da estrutura, a variável PreparedS-
tatement p receberá o comando SQL propriamente dito, que 
será submetido ao banco para ser executado, nesse caso, o co-
mando SELECT * FROM aluno WHERE codigo_cidade = ?.
 • Linha 11: no comando SELECT foi colocada uma interrogação 
ao final, a qual indica um parâmetro que deve ser preenchido 
com o valor da condição WHERE. Nesse caso, a condição é que o 
codigo_cidade seja igual a um valor determinado. Esse valor é 
o conteúdo da variável Java criada na linha 7, cujo conteúdo foi 
colocado como igual a 1, ou seja, o comando SELECT deseja que 
sejam lidos todos os alunos com o código 1 da cidade.
 • Linha 13: execução efetiva do comando SELECT por meio do co-
mando p.executeQuery(). A lista de alunos selecionados será 
colocada na variável ResultSet rs.
 • Linha 15: comando Java que implementa uma repetição que irá 
percorrer a lista de alunos contida na variável rs.
 • Linhas 16 a 24: para cada linha contendo um aluno, os valores de 
seus atributos serão armazenados em variáveis Java. Foi criada 
uma variável para cada atributo da tabela.
 • Linhas 26 a 28: comandos para fechar as conexões com o banco.
Com isso, podemos usar essas variáveis para o propósito do progra-
ma, seja para apresentá-las em uma tela ou para fazer qualquer tipo de 
operação com seus valores.
5.3.3 Inclusão de linhas em tabelas (INSERT)
O comando INSERT, como vimos, é o SQL responsável pela inclusão 
de linhas em tabelas. Vamos usar o mesmo exemplo da tabela aluno 
do banco EscolaNatacao e inserir um novo aluno na tabela.
O comando INSERT para essa inclusão será:
134 Modelagem de banco de dados e SQL
INSERT INTO 
aluno(cpf,nome,telefone,rua,numero,complemento,
 bairro,cep,cidade_codigo) 
 VALUES (‘12345678901’,’Joaquim José’, 
 ‘41-87654568’,’Rua A’,’123’,’’,
 ‘Batel’,80000,1)
Os comandos na linguagem Java para fazermos essa inclusão são:
1. import java.sql.Connection;
2. import java.sql.DriverManager;
3. import java.sql.PreparedStatement;
4. import java.sql.ResultSet;
5. import java.sql.SQLException;
6. 
7. String cpf = “12345678901”;
8. String nome = “Joaquim José”;
9. String telefone = “41-987654568”;
10. String rua = “Rua A”;
11. String numero = “123”;
12. String complemento = “”;
13. String bairro = “Batel”;
14. int cep = 80000;
15. int codigo_cidade = 1;
16.
17. PreparedStatement p = 
 this.con.prepareStatement(“INSERT INTO 
 aluno(cpf,nome,telefone,rua,numero,complemento,
 bairro,cep,código_cidade)
 VALUES(?,?,?,?,?,?,?,?,?)”);
18.
19. p.setString(1, cpf);
20. p.setString(2, nome);
21. p.setString(3, telefone);
22. p.setString(4, rua);
23. p.setString(5, numero);
24. p.setString(6, complemento);
25. p.setString(7, bairro);
26. p.setInt(8, cep);
27. p.setInt(9, código_cidade);
28.
29. ResultSet rs = p.executeQuery();
30.
31. p.close(); 
32. con.close(); 
Conceitos avançados de banco de dados 135
Explicação dos comandos:
 • Linhas 1 a 5: importações dos pacotes necessários para a execu-
ção dos comandos.
 • Linhas 7 a 15: declarações de variáveis Java com os valores dos 
atributos que desejamos incluir na tabela. Nesse exemplo, os va-
lores estão fixos nas variáveis, porém, na prática, são digitados na 
tela do sistema responsável pela inclusão de um aluno.
 • Linha 17: principal comando da estrutura, a variável Prepa-
redStatement p receberá o comando SQL propriamente dito, 
que será submetido ao banco para ser executado, nesse caso, o 
comando INSERT INTO aluno(cpf, nome, telefone, rua, 
numero, complemento, bairro, cep, código_cidade)
VALUES(?,?,?,?,?,?,?,?,?).
 • Linhas 19 a 27: no comando INSERT foram colocadas interroga-
ções no lugar dos conteúdos dos atributos, as quais indicam um 
parâmetro que deve ser preenchido com os valores de cada atri-
buto no comando. Nesse caso, nessas linhas são colocadas, em 
cada um dos atributos, as variáveis que receberam esses valores.
 • Linha 29: execução do comando INSERT por meio do comando 
p.executeQuery(). Esse é o momento que a linha é efetiva-
mente incluída na tabela.
 • Linhas 31 e 32: comandos para fechar as conexões com o banco.
Vimos em detalhes os comandos na linguagem Java para se fazer a 
inclusão de linhas em uma tabela.
5.3.4 Alteração de linhas em tabelas (UPDATE)
O comando UPDATE, como vimos, é o SQL responsável pela alte-
ração de linhas em tabelas. Vamos usar o mesmo exemplo da tabela 
aluno do banco EscolaNatacao e alterar os atributos de um aluno 
na tabela.
Digamos que desejemos alterar o nome do aluno cujo CPF é 
98576524546’ para Gabriel Henrique Cardoso.
O comando UPDATE para essa alteração seria:
UPDATE aluno SET nome = ’Gabriel Henrique Cardoso’
 WHERE cpf = ‘98576524546’
136 Modelagem de banco de dados e SQL
Os comandos na linguagem Java para fazermos essa alteração 
seriam:
1. import java.sql.Connection;
2. import java.sql.DriverManager;
3. import java.sql.PreparedStatement;
4. import java.sql.ResultSet;
5. import java.sql.SQLException;
6. 
7. String cpf = “98576524546’”;
8. String nome = “ Gabriel Henrique Cardoso “;
9.
10. PreparedStatement p = 
 this.con.prepareStatement(“UPDATE aluno SET nome = ?
 WHERE cpf = ?”);
11.
12. p.setString(1, nome);
13. p.setString(2, cpf);
14.
15. p.executeUpdate();
16.
17. p.close(); 
18. con.close(); 
Explicação dos comandos:
 • Linhas 1 a 5: importações dos pacotes necessários para a execu-
ção dos comandos.
 • Linhas 7 e 8: declarações de variáveis Java com os valores dos atri-
butos que desejamos buscar e alterar na tabela. Nesse exemplo, 
os valores estão fixos nas variáveis, porém, na prática, são digita-
dos na tela do sistema responsável pela alteração de um aluno.
 • Linha 10: principal comando da estrutura, a variável Prepa-
redStatement p receberá o comando SQL propriamente dito, 
que será submetido ao banco para ser executado, nesse caso, o 
comando UPDATE aluno SET nome = ? WHERE cpf = ?.
 • Linha 12: no comando UPDATE foi colocada uma interrogação 
no lugar do conteúdo do atributo nome, a qual indica um parâ-
metro que deve ser preenchido com o valor do atributo colo-
cado na linha 8.
 • Linha 13: o mesmo ocorre com a condição WHERE, em que foi co-
locada uma interrogação no lugar do conteúdo do atributo cpf. 
Conceitos avançados de banco de dados 137
Essa notação é um parâmetro que deve ser preenchido com o 
valor do atributo colocado na linha 7.
 • Linha 15: execução do comando UPDATE por meio do comando 
p.executeUpdate(). Esse é o momento que a linha é efetiva-
mente alterada na tabela.
 • Linhas 17 e 18: comandos para fechar as conexões com o banco.
Vimos em detalhes os comandos na linguagem Java para se fazer a 
alteração de linhas em uma tabela.
5.3.5 Exclusão de linhas em tabelas (DELETE)
O comando DELETE, como vimos, é o SQL responsável pela exclusão 
de linhas em tabelas. Vamos usar o mesmo exemplo da tabela aluno 
do banco EscolaNatacao e excluir uma linha da tabela.
Digamos que desejemos excluir o aluno cujo CPF é 98576524546’.
O comando DELETE para essa exclusão seria:
DELETE FROM aluno
 WHERE cpf = ‘98576524546’’
Os comandos na linguagem Java para fazermos essa exclusão 
seriam:
1. import java.sql.Connection;
2. import java.sql.DriverManager;
3. import java.sql.PreparedStatement;
4. import java.sql.ResultSet;
5. import java.sql.SQLException;
6. 
7. String cpf = “98576524546’”;
8.
9. PreparedStatement p = 
 this.con.prepareStatement(“DELETE FROM aluno 
 WHERE cpf = ?”);
10.
11. p.setString(1, cpf);
12.13. p.executeUpdate();
14.
15. p.close(); 
16. con.close(); 
138 Modelagem de banco de dados e SQL
Explicação dos comandos:
 • Linhas 1 a 5: importação dos pacotes necessários para a execu-
ção dos comandos.
 • Linha 7: declaração de variável Java com o valor do atributo que 
desejamos buscar para excluir na tabela. Nesse exemplo, o valor 
está fixo nas variáveis, porém, na prática, é digitado na tela do 
sistema responsável pela exclusão de um aluno.
 • Linha 9: principal comando da estrutura, a variável PreparedS-
tatement p receberá o comando SQL propriamente dito, que 
será submetido ao banco para ser executado, nesse caso, o co-
mando DELETE FROM aluno WHERE cpf = ?.
 • Linha 11: no comando DELETE foi colocada uma interrogação no 
lugar do conteúdo do atributo cpf, a qual indica um parâmetro que 
deve ser preenchido com o valor do atributo inserido na linha 7.
 • Linha 13: execução do comando UPDATE por meio do comando 
p.executeUpdate(). Esse é o momento que a linha é efetiva-
mente excluída da tabela.
 • Linhas 15 e 16: comandos para fechar as conexões com o banco.
Com isso, conhecemos a maneira de se utilizar comandos SQL/
DML dentro da linguagem de programação Java. Essas estruturas são 
amplamente utilizadas em sistemas de informação programados com 
essa linguagem. Embora existam diversas estruturas com o mesmo 
fim e muitas linguagens, a estrutura vista em Java é uma das mais 
empregadas no mercado.
CONSIDERAÇÕES FINAIS
Neste capítulo detalhamos conceitos avançados utilizados nos ban-
cos de dados, bem como acerca das ferramentas disponíveis ao usuário, 
possibilitando que muitas rotinas de manipulação de dados sejam feitas 
no próprio banco, em vez de serem colocadas nos programas do sistema.
Também mostramos o conceito e o funcionamento de transações que 
chegam ao banco para serem executadas e o controle que devemos ter 
para garantir uma execução segura e sem falhas, principalmente pela falta 
de integridade dos dados.
Por fim, conhecemos uma estrutura modelo para acesso ao banco de 
dados PostgreSql com a linguagem de programação Java, modelo ampla-
mente utilizado pelo mercado nos sistemas de informação.
A obra PostgreSQL: guia 
do programador apre-
senta diversos exemplos 
de acesso ao banco de 
dados PostgreSql não 
somente com a lingua-
gem Java, mas também 
com outras linguagens 
de programação. 
Ainda mostra diversos 
exemplos de criação de 
visões, gatilhos e Stored 
Procedures nesse SGBD.
MILANI, A. São Paulo: Novatec, 2008.
Livro
Conceitos avançados de banco de dados 139
ATIVIDADES
1. O que são Stored Procedures e qual é sua função?
2. Cite quatro problemas no controle de concorrência de transações e 
explique-os.
3. Quais são as quatro propriedades ACID de uma transação? Comente 
cada uma delas.
REFERÊNCIAS
ELMASRI, R.; NAVATHE, S. B. Sistemas de banco de dados. 6. ed. São Paulo: Pearson 
Education do Brasil, 2013.
RAMAKRISHNAN, R.; GEHRKE, J. Sistemas de gerenciamento de banco de dados. 3. ed. São 
Paulo: McGraw-Hill, 2008.
SILBERSCHATZ, A.; KORTH, H. F.; SUDARSHAN, S. Sistema de banco de dados. 7. ed. Rio de 
Janeiro: LTC, 2020.
Vídeo
140 Modelagem de banco de dados e SQL
Resolução das atividades 
1 Conceitos gerais de modelagem de banco
1. O que são os sistemas gerenciadores de banco de dados (SGBD)? 
Comente.
SGBD são softwares encarregados de administrar e controlar as 
operações sobre os bancos de dados. 
2. Quais são as vantagens da utilização de um banco de dados? 
Cite cinco.
Controle de redundância, restrição a acesso não autorizado, acesso 
eficiente, controle de backup e recuperação, múltiplas visões ao 
usuário, restrições de integridade.
3. Conceitue tabela, linha e atributo.
Tabela: sinônimo de relação ou entidade, representa um conjunto de 
elementos do mundo real, distinguíveis uns dos outros, cujos dados 
necessitam ser armazenados no banco de dados. Cada linha da tabela 
representa um determinado elemento. Em uma escola de natação, a 
relação Alunos é um exemplo de tabela.
Linha: sinônimo de registro ou tupla, corresponde a todos os dados 
de um determinado elemento da tabela. As informações do aluno 
Joaquim José (CPF, nome, endereço, carteira de motorista) são um 
exemplo de linha.
Atributo: sinônimo de campo, propriedade ou coluna, corresponde a 
um determinado valor de todas as linhas da tabela. O nome de um 
aluno é um exemplo de atributo.
2 Modelo relacional
1. O que é a normalização de tabelas?
Normalização é um processo de análise das tabelas e da aplicação 
de técnicas com o objetivo de organizar as tabelas antes de seu 
armazenamento no banco de dados, a fim de evitar anomalias de 
inserção, exclusão e atualização.
2. Qual é a regra da primeira forma normal?
Uma tabela está na 1FN se, e somente se, em todo valor válido dessa 
tabela, cada linha contém exatamente um valor para cada atributo.
3. Qual é o conceito de relacionamento entre as tabelas de um 
banco de dados?
Relacionamento é uma associação entre entidades.
Resolução das atividades 141
3 Linguagem SQL - DDL
1. Qual é a finalidade de se criar um modelo físico de dados? 
Comente.
O modelo físico trata de questões físicas de armazenamento, 
preparando as tabelas para que sejam cadastradas no SGBD.
2. O que são chaves estrangeiras? Explique.
A chave estrangeira em uma tabela deve corresponder à chave primária 
de outra a que a tabela esteja relacionada. Os atributos devem ter a 
mesma característica e conteúdo, porém podem ter nomes diferentes. 
A chave estrangeira produz uma condição conhecida como restrição 
de integridade, que impede a entrada de informações incorretas no 
banco.
3. O que é a linguagem SQL? Comente.
Structured Query Language (SQL), ou linguagem de consulta 
estruturada, tem finalidade exclusiva de fazer todos os acessos aos 
dados, como uma ponte ligando a linguagem de programação aos 
bancos de dados.
4 Linguagem SQL – DML
1. O que é Data Manipulation Language (DML)? Comente.
Data Manipulation Language (DML) é uma parte da linguagem SQL 
encarregada de manipular os dados, seja para consultar, seja para 
incluir, alterar ou excluir dados no banco de dados.
2. Qual é a estrutura básica do comando SELECT? 
A estrutura básica do comando SELECT é:
SELECT atributos
FROM tabela
3. Quais são os comandos SQL para incluir, alterar e excluir linhas 
em tabelas?
Os comandos SQL são: INSERT (incluir), UPDATE (alterar) e DELETE 
(excluir).
5 Conceitos avançados de banco de dados
1. O que são Stored Procedures e qual é sua função?
Stored Procedures são funções que podem ser criadas no próprio 
banco de dados com o intuito de permitir que a lógica do negócio 
fique armazenada no banco de dados e seja executada por meio de 
comandos SQL.
142 Modelagem de banco de dados e SQL
2. Cite quatro problemas no controle de concorrência de 
transações e explique-os.
O problema da atualização perdida ocorre quando duas transações 
tentam acessar o mesmo recurso do banco de dados (determinada 
tabela, por exemplo), de modo que o acesso a certa linha da tabela por 
uma das transações torna o dado incorreto para a segunda.
O problema da atualização temporária (ou leitura suja) ocorre quando 
uma transação atualiza determinado atributo e depois falha. Antes do 
tempo de desfazer essa atualização para o valor original, anterior à 
falha, outra transação utiliza-se do valor que, em última análise, está 
incorreto e será desfeito.
O problema do resumo incorreto ocorre quando uma transação está 
calculando certa função que utiliza uma série de itens de diversas 
tabelas enquanto outras transações estão atualizando esses itens. Ao 
final da transação, seu resumo estará incorreto.
O problema da leitura não repetitiva ocorre quando uma transação faz 
a leitura de uma linha duas vezes e, no intervalo entre as duas leituras, 
outra altera a linha. A transação tem dois valores para a mesma linha.
3. Quais são as quatro propriedades ACID de uma transação? 
Comente cada uma delas.
 • Atômica: na execução de uma transação, devemosgarantir que 
todas as ações sejam executadas ou nenhuma delas. Os usuários 
não podem ser penalizados por transações incompletas, ou seja, 
não devemos colocar em seus programas rotinas que tratam da 
situação de uma transação não completar todas as suas ações.
 • Consistente: cada transação executada de modo independente 
deve preservar a consistência dos dados, ou seja, não é possível 
permitir que dados inconsistentes sejam imputados nas tabelas 
do banco.
 • Isolada: uma transação deve ser vista pelo usuário sem consi-
derar o efeito de outra, uma vez que ele não tem controle das 
transações que podem ser executadas ao mesmo tempo que a 
sua. As transações devem ser isoladas (ou protegidas) do efeito 
do plano de execução de outras transações.
 • Durável: muitas vezes o banco de dados, por questão de desem-
penho, divide os passos de uma transação para ser executado 
em vários momentos. Assim, o SGBD deve garantir que, uma vez 
informado ao usuário que a transação foi concluída, seus efeitos 
persistam, isto é, mesmo que o sistema falhe após essa comuni-
cação, o SGBD deve garantir que todas as ações sejam refletidas 
no banco.
M
O
D
E
L
A
G
E
M
 D
E
 B
A
N
C
O
 D
E
 D
A
D
O
S
 E
 S
Q
L
Ja
im
e
 W
o
jc
ie
c
h
o
w
s
k
i
Código Logístico
I000034
Fundação Biblioteca Nacional
ISBN 978-65-5821-037-5
9 7 8 6 5 5 8 2 1 0 3 7 5
	Página em branco
	Página em branco

Mais conteúdos dessa disciplina