Buscar

CODIFICAÇÃO DO PROJETO

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 3, do total de 64 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 6, do total de 64 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes
Você viu 9, do total de 64 páginas

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

CODIFICAÇÃO DO PROJETO: 
PADRÕES DE PROGRAMAÇÃO E 
PROJETO DO BANCO DE DADOS
W
B
A
04
49
_v
1.
0
2
Thiago Salhab Alves
Londrina 
Editora e Distribuidora Educacional S.A. 
2020
CODIFICAÇÃO DO PROJETO: 
PADRÕES DE PROGRAMAÇÃO E PROJETO DO 
BANCO DE DADOS
1ª edição
3
2020
Editora e Distribuidora Educacional S.A.
Avenida Paris, 675 – Parque Residencial João Piza
CEP: 86041-100 — Londrina — PR
e-mail: editora.educacional@kroton.com.br
Homepage: http://www.kroton.com.br/
Presidente
Rodrigo Galindo
Vice-Presidente de Pós-Graduação e Educação Continuada
Paulo de Tarso Pires de Moraes
Conselho Acadêmico
Carlos Roberto Pagani Junior
Camila Braga de Oliveira Higa
Carolina Yaly
Giani Vendramel de Oliveira
Henrique Salustiano Silva
Juliana Caramigo Gennarini
Mariana Gerardi Mello
Nirse Ruscheinsky Breternitz
Priscila Pereira Silva
Tayra Carolina Nascimento Aleixo
Coordenador
Henrique Salustiano Silva
Revisor
Anderson Paulo Avila Santos
Editorial
Alessandra Cristina Fahl
Beatriz Meloni Montefusco
Gilvânia Honório dos Santos
Mariana de Campos Barroso
Paola Andressa Machado Leal
Dados Internacionais de Catalogação na Publicação (CIP)_______________________________________________________________________________________
Alves, Thiago Salhab
A474a Codificação do projeto: padrões de programação e projeto 
 do banco de dados/ Thiago Salhab Alves, – Londrina: 
 Editora e Distribuidora Educacional S.A. 2020.
 44 p.
 ISBN 978-65-87806-76-1
1. Codificação 2. Projetos 3. Padrões I. Título.
 
CDD 003 
____________________________________________________________________________________________
Raquel Torres – CRB 6/278
© 2020 por Editora e Distribuidora Educacional S.A.
Todos os direitos reservados. Nenhuma parte desta publicação poderá ser 
reproduzida ou transmitida de qualquer modo ou por qualquer outro meio, 
eletrônico ou mecânico, incluindo fotocópia, gravação ou qualquer outro tipo de 
sistema de armazenamento e transmissão de informação, sem prévia autorização, 
por escrito, da Editora e Distribuidora Educacional S.A.
4
SUMÁRIO
Procedimento de programação orientada a objeto: Java e C# _______ 05
Procedimento de programação orientada a objeto: Python e Ruby _ 20
Modelagem de banco de dados e o projeto do fluxo de dados _____ 35
Procedimentos de programação em banco de dados utilizando a 
linguagem SQL _____________________________________________________ 50
CODIFICAÇÃO DO PROJETO: PADRÕES DE PROGRAMAÇÃO 
E PROJETO DO BANCO DE DADOS
5
Procedimento de programação 
orientada a objeto: Java e C#
Autoria: Thiago Salhab Alves
Leitura crítica: Anderson Paulo Avila Santos
Objetivos
• Aprender sobre paradigma de programação 
Orientada a Objetos.
• Aprender a utilizar a linguagem de programação 
orientada a objetos Java.
• Aprender a utilizar a linguagem de programação 
orientada a objetos C#.
6
1. Programação Orientada a Objetos
É interessante parar para pensar na possibilidade de aproximar a 
programação de computadores dos aspectos presentes no mundo real. 
A programação de computadores permite a criação de algoritmos, que 
são sequências de código, para a resolução de determinados problemas. 
O paradigma de programação orientado a objetos proporcionou 
diminuir o gap semântico, que é a distância que existe entre o problema 
do mundo real e o modelo abstrato construído.
Neste tema, veremos o paradigma de programação orientado a objetos 
por meio dos conceitos de Classes e Objetos. Além disso, aprenderemos 
a programar sob o conceito de orientação a objetos, utilizando a 
linguagem Java e C#.
No início dos anos 1950, já apareciam trabalhos utilizando o termo 
“objeto” e “atributos de objetos”. Em 1966, Kristen Nygaard e Ole-Johan 
Dahl lançaram uma linguagem de programação chamada Simula, sendo, 
para muitos, considerada como a primeira linguagem Orientada a 
Objetos. Ainda nos aos 1960, Alan Kay, inspirado pelas ideias embutidas 
na Simula, desenvolveu o projeto Flex (DEITEL; DEITEL, 2017).
No início dos anos 1970, a Xerox Palo alto Research Center desenvolveu 
um sistema de computador denominado Dynabook, cujo software 
recebeu o nome de Smalltalk, a linguagem de programação que ajudou 
a difundir o termo “orientação a objetos”. Sua primeira versão foi 
lançada em 1972, e já nos anos 1980 proliferaram várias linguagens 
de programação Orientada a Objetos (OO). Entre elas podemos citar 
(DEITEL; DEITEL, 2017):
• Objective-C (Cox, 1986).
• C++ (Stroustrup, 1986).
7
• Flavors (Moon, 1986).
• Eiffel (Meyer, 1987).
No início dos anos 1990, começaram a ser difundidas as metodologias 
de desenvolvimento de sistemas orientadas a objetos, como Object-
Oriented Analysis and Design (OOAD), Object Modeling Technique (OMT), 
Objectory etc. Em meados da mesma década, surgiu a linguagem de 
programação Java. O projeto originário da linguagem foi desenvolvido 
na SUN Microsystem, empresa fabricante de computadores e 
semicondutores localizada no Vale do Silício, Califórnia, adquirida em 
2009 pela Oracle Corporation.
Dentro dos conceitos da programação Orientada a Objetos, dois 
conceitos se destacam: Objetos e Classes.
1. Objeto: qualquer “coisa” do mundo real. Uma entidade física ou 
abstrata que faça sentido em um contexto analisado, sendo uma 
instância de uma classe e se caracterizando pelos atributos que 
possui e pelas operações que pode realizar. Exemplos:
• Um aluno (“João da Silva”).
• Um automóvel (“Civic EXL 2020”).
• Um cliente (“Thiago Salhab Alves”).
• Um fornecedor (“Honda”).
2. Classe: denominação para um conjunto de objetos, sendo onde 
os objetos se “enquadram”. Uma unidade de organização para 
sistemas de software abrange atributos e operações. Programas 
orientados a objetos são organizados por meio de classes (de 
objetos). Exemplos:
8
• Aluno.
• Automóvel.
• Cliente.
• Fornecedor.
1.1 Java
A história do Java começa em 1991, com James Gosling, Patrick 
Naughton e Mike Sheridan e dois fundadores da Sun, Andy Bechtolsheim 
e Bill Joy, pensando na nova onda do mundo digital. Eles viram a 
possibilidade de aplicar a tecnologia a dispositivos e eletrodomésticos 
usados na vida diária, conectados e controlados remotamente. Por isso, 
eles lançaram um projeto chamado “Green”, cujo objetivo é desenvolver 
um sistema que lhes permita estabelecer uma rede distribuída de 
dispositivos eletrônicos heterogêneos para o consumidor final e se 
comunicar entre si (DEITEL; DEITEL, 2017).
Para usá-lo em um sistema embarcado de recursos limitados, Gosling 
iniciou mudanças na linguagem C/C++, mas optou por criar linguagem 
nova com algumas características (DEITEL; DEITEL, 2017):
• Sintaxe similar C/C++: o Java é similar às linguagens C e C++, 
facilitando seu aprendizado.
• Segura: o Java não usa ponteiros e apresenta proteção contra 
programas mal-intencionados que necessitam acessar endereços 
de memória.
• Multiplataforma: o Java pode ser utilizado em vários dispositivos, 
independente da Unidade Central de Processamento.
9
• Interpretada: o Java é interpretado e convertido para um formato 
intermediário (os bytecodes), que seria enviado pela rede para ser 
executado dinamicamente no dispositivo real.
A nova linguagem foi chamada inicialmente de Greentalk (as extensões 
dos arquivos fonte eram .gt), mas depois recebeu o nome Oak, inspirado 
por um carvalho que existia na frente do escritório de quem a criou. No 
entanto, próximo do lançamento, por conta de uma outra linguagem 
homônima, o time teve que escolher outro nome, e o nome escolhido foi 
Java (apelido para café) (DEITEL; DEITEL, 2017).
A Máquina Virtual Java (do inglês Java Virtual Machine – JVM) é um 
programa que carrega e executa os aplicativos Java, convertendo os 
bytecodes em código executável de máquina. O que é implementado em 
Java gera os bytecodes, que são interpretados pela JVM. Dessa forma, 
qualquer sistema operacional que possua a JVM do Java pode executar 
seu código. A JVM é responsável pelogerenciamento dos aplicativos à 
medida que são executados. Já o Java Development Kit Software (JDK), 
Desenvolvido pela Sun Microsystens, implementa o conjunto básico 
de ferramentas necessárias para escrever, testar e depurar aplicações 
Java e Applets (pequena aplicação executada em uma janela de uma 
aplicação (navegador). Diferenças das Versões:
• Java SE: o Java Standard Edition é utilizado em desktops e 
servidores para executar aplicações Java ou desenvolver essas 
aplicações.
• Java EE: o Java Enterprise Edition é voltado a ambientes 
corporativos de rede, como servidores web e clusters.
• Java ME: o Java Micro Edition é voltado para dispositivos com pouca 
memória e poder de processamento reduzido (Personal Digital 
Assistant – PDAs , celulares, hardwares embarcados etc.).
10
Uma classe basicamente possui dois grupos de elementos: a declaração 
de seus atributos e a implementação de seus métodos. Um atributo 
(atribute) de uma classe é uma variável pertencente a essa classe, que 
é destinada a armazenar alguma informação que está intrinsecamente 
associada à classe. Vamos considerar a classe cliente: o cliente possui 
como atributos nome e idade, sendo nome do tipo texto (String) e idade 
do tipo número (int). (DEITEL; DEITEL, 2017).
Enquanto os atributos permitem armazenar dados associados aos 
objetos, ou seja, valores que descrevem a aparência ou o estado 
de um certo objeto, os métodos (methods) são capazes de realizar 
operações sobre os atributos de uma classe ou de especificar ações ou 
transformações possíveis para um objeto. Isso significa que os métodos 
conferem um caráter dinâmico aos objetos, pois permitem que exibam 
um comportamento que, em muitos casos, pode mimetizar (imitar) o 
comportamento de um objeto real.
A acessibilidade de uma classe, método ou atributo é a forma com que 
tal elemento pode ser visto e utilizado por outras classes. Esse conceito 
é também conhecido como data biding (ocultamento de dados), sendo 
muito importante dentro da orientação a objetos. A determinação 
da acessibilidade de uma classe ou membro de classe é feita pelos 
qualificadores de acesso (access qualifiers), ou seja, por palavras 
reservadas da linguagem que definem o grau de encapsulamento 
exigido por uma classe ou seus elementos, isto é, são especificações 
para restringir o acesso às declarações pertencentes a uma classe ou à 
própria classe como um todo. O encapsulamento oculta a visibilidade de 
métodos e atributos de objetos externos. (DEITEL; DEITEL, 2017). Sobre 
Modificadores de Acesso, podemos citar:
• Public: a palavra reservada public torna o método ou a 
propriedade disponível para qualquer classe no sistema.
11
• Private: a palavra reservada private é o contrário do modificador 
public, e, se um método ou variável for private, só poderá ser 
acessado pela classe que o contém, nenhuma classe externa 
pode acessá-lo. Os métodos privados implementam um conceito 
importantíssimo no Java, chamado encapsulamento.
• Protected: a palavra reservada protected permite menos acesso do 
que o público, mas é mais acessível do que o private. Quando um 
método ou variável é protected, o acesso é permitido pelas classes 
do mesmo package (pacote).
• Abstract: é um método cuja implementação está definida em 
subclasses.
A Figura 1 ilustra a codificação Java, criando uma classe pessoa com os 
atributos privados nome e idade. A classe possui métodos construtores 
(public Pessoa() e public Pessoa(String vNome, int vIdade)), que são 
aqueles que levam o mesmo nome da classe e são executados quando 
um objeto é instanciado. Um construtor é um método que possui 
o mesmo nome da classe e é chamado quando se cria um objeto 
da classe. A classe Pessoa possui também os métodos getNome() e 
getIdade(), que retornam o nome e a idade cadastrados, e os métodos 
void setNome(String value) e setIdade(int value), que atribuem valores às 
variáveis nome e idade, respectivamente.
A função principal main() é a responsável por declarar e instanciar 
(alocar memória) para dois objetos, que são Pessoa p1 e p2. O programa 
inicia pela função main(), que é a função principal. Após a instanciação, 
cada objeto chama os métodos setters e getters para a atribuição e a 
obtenção dos dados cadastrados.
12
Figura 1 – Exemplo de Codificação Java
Fonte: elaborada pelo autor.
13
No mundo da Programação Orientada a Objetos, o termo herança é 
associado a uma das formas de reutilização de software. Por meio dela, 
novas classes podem ser derivadas das classes existentes. A nova classe 
herda propriedades e métodos da classe base, além de poder adicionar 
suas próprias propriedades e métodos. A herança é o compartilhamento 
de atributos e operações entre classes baseado em um relacionamento 
hierárquico do tipo pai e filho, ou seja, a classe pai contém definições 
que podem ser utilizadas nas classes definidas como filho. A linguagem 
Java não possibilita a herança múltipla, isto é, uma classe herdar o 
comportamento de mais de uma classe (DEITEL; DEITEL, 2017).
Figura 2 – Implementação de Herança em Java
Fonte: elaborada pelo autor.
A Figura 2 ilustra o exemplo de codificação da herança entre classes. 
A classe Pessoa (classe pai) possui o atributo privado nome, o método 
construtor Pessoa(), os métodos setNome(), getNome() e mostra(). A 
14
classe Estudante é filha de Pessoa por meio de extends. Dessa forma, 
todos os métodos públicos de Pessoa são herdados por Estudante, 
que possui o método construtor Estudante(), os métodos setCurso() 
e mostra(). A classe PessoaApp possui a função principal, main(), que 
instancia o objeto e1 da classe Estudante. Esse objeto, chama método 
setNome() da classe Pessoa e setCurso() de Estudante, demostrando o 
uso da herança.
1.2 C#
A linguagem de programação C# foi criada pela Microsoft com influência 
das linguagens C++, Pascal e Java, no final de 1999. Os desenvolvedores 
responsáveis foram Anders Hejlsberg, que foi funcionário da empresa 
Borland, no desenvolvimento do Turbo Pascal e Delphi, e o engenheiro 
Scott Wiltamuth (MANZANO, 2014).
Uma classe é um tipo de dado que se relaciona com a memória por 
referência. Quando um objeto é criado a partir de uma class, a variável 
ao objeto associado possui apenas uma referência aos atributos da 
class. Quando a class é atribuída a uma nova variável, o conteúdo da 
estrutura usado pela nova variável é o mesmo referenciado para a 
variável anterior. Assim, se definirmos dez variáveis com base na mesma 
class, teremos dez variáveis referenciadas a partir do mesmo local de 
memória. As alterações feitas nos dados de uma das variáveis refletirão 
automaticamente nas demais variáveis, porque todas as variáveis usam 
uma área comum de memória estabelecida pela class (DEITEL; DEITEL, 
2003).
Dentro da unidade lógica class, são definidos os atributos que serão 
manipulados no programa, os quais são representados basicamente 
por campos (posições que representam o conteúdo a ser armazenado 
na unidade lógica, ou seja, as características definidas na classe ou 
estrutura) e métodos (as sub-rotinas de procedimentos ou funções 
15
usadas para validar e operacionalizar o conteúdo da unidade lógica, ou 
seja, as operações associadas à classe ou à estrutura).
A Figura 3 ilustra a construção de uma classe chamada Aluno, contendo 
os campos nome, nota e média. No início do código, são utilizadas 
as diretivas using, que servem para listar os namespaces que o 
aplicativo usará com frequência e evitar que o programador tenha que 
especificar um nome totalmente qualificado sempre que um método 
contido é usado. Um namespace serve para organizar um conjunto de 
classes, controlando a visibilidade de nomes dentro de um programa 
e agrupando classes e tipos. Assim como no Java, são utilizados os 
mesmos modificadores de acesso (public, private e protected), e os 
campos, nesse exemplo, são public (público). O método CalcMedia foi 
definido contendo as variáveis locais Soma e Média, do tipo float.
Figura 3 – Implementaçãode classe em C#
Fonte: adaptada de Manzano (2014, p. 125).
16
Para utilizar os atributos e os métodos de uma classe, conforme a Figura 
4, é necessário que se instancie um objeto da classe, especificando os 
acessos às suas propriedades. Isso é realizado pela classe Program, na 
função principal main(), na linha Aluno a = new Aluno(). Uma vez que 
o objeto a é instanciado, é possível o acesso aos atributos da classe 
Aluno por meio do uso do ponto (.), como a.nome, para acessar o nome, 
e a.nota, para acessar a nota. Console.Write() é uma função de saída 
utilizada para solicitar e exibir dados ao usuário do sistema.
Figura 4 – Instanciação de objetos em C#
Fonte: adaptada de Manzano (2014, p. 125).
17
O conceito de herança está relacionado ao fato de uma classe herdar 
de outra classe suas características. Assim, uma classe-filho (subclasse) 
herda da classe-pai (superclasse) todos os campos e métodos que 
sejam públicos a ele. Se os componentes de uma classe-pai forem 
privados, não ocorrerá a definição de herança, mas, se os componentes 
forem protegidos, estes serão herdados, mas necessitarão de métodos 
específicos para fazer o acesso de escrita e leitura nos campos 
associados. Esse modo de visibilidade pública, privada ou protegida é 
chamado de encapsulamento (MANZANO, 2014).
A Figura 5 ilustra a criação de duas classes em C#: a classe SalaAula (pai) 
e a classe Aluno (filha). Para que se determine que uma classe é filha e, 
consequentemente, herde seus comportamentos, são utilizados os dois-
pontos (:). Assim, ao escrever Aluno : SalaAula, especifica-se que Aluno é 
filho de SalaAula. Dessa forma, os atributos e os métodos públicos são 
herdados e podem ser instanciados.
18
Figura 5 – Herança em C#
Fonte: adaptada de Manzano (2014, p. 127).
Neste tema, aprendemos sobre o paradigma de programação orientado 
a objetos e como utilizar as linguagens de programação orientada a 
objetos Java e C#.
Referências Bibliográficas
DEITEL, P.; DEITEL, H. Java Como Programar. 10. ed. São Paulo: Pearson Education 
do Brasil, 2017.
19
DEITEL, P.; DEITEL, H. C# Como Programar. São Paulo: Pearson Universidades, 
2003.
MANZANO, J. A. N. G. Programação de Computadores com C#. São Paulo: Érica, 
2014.
20
Procedimento de programação 
orientada a objeto: Python e Ruby
Autoria: Thiago Salhab Alves
Leitura crítica: Anderson Paulo Avila Santos
Objetivos
• Aprender sobre o histórico de Python e Ruby.
• Aprender a utilizar a linguagem de programação 
orientada a objetos Python.
• Aprender a utilizar a linguagem de programação 
orientada a objetos Ruby.
21
1. Programação Orientada a Objetos com 
Python e Ruby
É interessante pensar na possibilidade de aproximar a programação 
de computadores dos aspectos presentes no mundo real. O paradigma 
de programação orientado a objetos proporcionou diminuir o gap 
semântico, que é a distância que existe entre o problema do mundo 
real e o modelo abstrato construído. Neste tema, veremos a linguagem 
Python e Ruby, aprendendo os conceitos de programação orientada a 
objetos nas respectivas linguagens.
A linguagem Python foi criada no final de 1989, por Guido van Rossum, 
com a colaboração de muitos desenvolvedores ao redor do mundo 
(BANIN, 2018). Python é uma linguagem de uso geral, projetada 
especificamente para tornar os programas legíveis, possuindo uma 
rica biblioteca e permitindo a criação de aplicações sofisticadas usando 
código simples (PERKOVIC, 2016).
A Python apresenta as seguintes características (BANIN, 2018):
• Portabilidade: o código-fonte da linguagem foi escrito em 
linguagem ANSI C, e o interpretador Python, assim como as 
bibliotecas-padrão, está disponível para uma grande quantidade 
de plataformas, tais como Linux, Windows, MacOS, BeOS, 
entre outras, podendo ser executado em qualquer uma dessas 
plataformas.
• Código livre (opensource): a Python pode ser utilizada e 
distribuída livremente, e o código-fonte pode ser alterado sem 
restrições.
• Simplicidade com robustez: a Python é uma linguagem simples, 
mas possui recursos para desenvolver projetos sofisticados, tais 
como as linguagens, como C, C++ e Java, podendo acessar bancos 
22
de dados, usar redes, trabalhar com recursos multimídia, entre 
outros.
• Fácil de aprender: a Python é fácil de aprender, pois apresenta 
uma sintaxe clara e direta e que não depende do entendimento 
de outras linguagens, sendo indicada para iniciar estudos em 
programação.
• Grande aplicabilidade: a Python pode ser utilizada para o 
desenvolvimento de ferramentas para a administração e a 
interface com sistemas operacionais; aplicações que trabalhem 
com grandes volumes de dados armazenados em sistemas 
gerenciadores de bancos de dados, como Oracle, SQL Server, 
MySQL e outros; aplicações gráficas e multimídia; desenvolvimento 
de jogos digitais; programação para internet; desenvolvimento de 
software para engenharia; e aplicações científicas.
Assim como a linguagem Python, outra linguagem que se destaca é a 
linguagem Ruby, que foi criada por Yukihiro Matsumoto, em 1995, no 
Japão, e apresenta as seguintes características (MCGAVREN, 2015):
• Fácil de aprender e usar.
• Flexível o bastante para qualquer tarefa de programação.
• Mantem o programador concentrado no problema que está 
tentando resolver.
• É orientada a objetos.
Desde que a linguagem Ruby foi lançada, a comunidade Ruby 
desenvolveu coisas surpreendentes (MCGAVREN, 2015):
• Construiu uma vasta coleção de bibliotecas Ruby que podem 
ajudar a fazer qualquer coisa, desde ler arquivos Comma Separed 
Values (CSV) até controlar objetos na rede.
23
• Escreveu interpretadores alternativos que podem rodar o código 
Ruby mais rápido ou integrá-los com outras linguagens;
• Criou o Ruby on Rails, um framework muito popular para aplicações 
web.
1.1 Python
A instalação da Python, segundo Banin (2018), é um procedimento 
rápido, simples e seguro. A comunidade Python é muito dinâmica e 
engajada e, com isso, há muito material de apoio sendo produzido. A 
documentação básica é o Python Docs, sendo a fonte de referência 
primária para os programadores que trabalham ou querem aprender a 
usar a linguagem.
A linguagem Python permite que os desenvolvedores definam classes, 
as quais são projetadas para uma determinada tarefa, tornando o 
programa de aplicação mais intuitivo e com maior facilidade para ler 
e manter. Uma classe oferece métodos que podem ser aplicados aos 
objetos da classe e encapsula como os dados contidos nos objetos 
são armazenados e como os métodos das classes são implementados 
(PERKOVIC, 2016).
A Python é uma linguagem interpretada, e, diferentemente das 
linguagens C e Java, que usam chaves para a marcação de blocos de 
código, nela a indentação é utilizada para determinar os blocos. A 
Python também possui tipagem dinâmica e fortemente tipada dos 
dados.
Uma variável em Python não pode ser utilizada sem ter sido inicializada, 
pois não existe criação automática de variáveis. As variáveis podem ser 
iniciadas da seguinte forma:
24
• a, b = 10, 20 – A variável a recebe o valor 10 e a variável b recebe o 
valor 20.
• O valor nulo (null) em Python pode ser usado como None, que é 
equivalente ao null. Pode-se utilizar da seguinte forma: valor = 
None. A variável valor é iniciada com valor nulo (None).
As saídas na linguagem Python são realizadas por meio do comando 
print e a entrada por meio do comando input, conforme o exemplo a 
seguir:
nome = input(“Qual o seu nome?”) 
pergunta = input(“Qual a sua pergunta?”) 
print(“Seu nome é %s e sua pergunta é %s.” %(nome, pergunta))
As variáveis nome e pergunta recebem as entradas por meio da função 
input(), sendo o nome e a pergunta, respectivamente. A função print() 
imprime o conteúdo das variáveis nome e pergunta.
A linguagem Python também utiliza endentação como delimitação de 
bloco; portanto, o código deve estar endentado corretamente. A seguir 
temos um código endentado de forma incorreta:
def mensagem(): 
valor = 10 
return valor
print(mensagem())O código endentado correto deve ser feito da seguinte forma:
def mensagem():
valor = 10
return valor
25
print(mensagem())
Com a endentação correta, o código está delimitado corretamente e é 
utilizado para a delimitação de bloco.
Os tipos básicos de Python são:
• Números: int, ling, float.
• Strings: str e unicode.
• Listas e tuplas: list, tuple.
• Arquivos: file.
• Booleanos: bool (True, False).
• Conjuntos: set.
A Python utiliza o controle de fluxo (condicionais) da seguinte forma:
if expressão == True:
print(“true)
else:
print(“false)
Se a expressão apresenta um resultado verdadeiro, o bloco verdadeiro 
é ativo, imprimindo o valor true; se apresenta um falso, imprime o valor 
falso. O if pode apresentar mais opções condicionais, sendo utilizado o 
comando if elif da seguinte forma:
if resposta < 5:
return 1
26
elif resposta < 5:
return -1
else:
return 0
No código anterior, se a resposta for maior que 5, então o retorno é 1; se 
(elif) a resposta for menor que 5, então o retorno é -1. No último caso, se 
a resposta não for maior que 5 nem menor que 5, o retorno é 0.
A programação Orientada a Objetos é um paradigma que permite a 
portabilidade e modularidade do código, realizando a organização dos 
programas de aplicação em componentes conhecidos por classes e 
objetos.
Um namespace é associado a cada classe Python e seu nome é o nome 
da classe. Além disso, ele armazena os nomes dos atributos de classe.
Consideremos como exemplo a definição de uma classe Pessoa 
conforme a Figura 1. Para que se defina uma classe, utiliza-se a palavra 
reservada class seguida do nome da classe e de dois-pontos. Para criar 
um método, é utilizada a palavra reservada def e entre parênteses estão 
os parâmetros, incluindo o parâmetro obrigatório self, que deve estar 
presente em todos os métodos. O construtor é um método reservado 
chamado _init, e o parâmetro self é obrigatório. A palavra reservada self 
serve para referenciar o próprio objeto(instância) tanto ao se fazer uso 
de métodos quanto ao utilizar atributos pertencentes a esse objeto. O 
corpo do método deve sempre estar indentado, como é determinado 
pela sintaxe da linguagem. Foram criados os métodos e o get de todos 
os atributos da classe Pessoa, que são responsáveis por modificar ou 
retornar os atributos dessa classe.
27
Figura 1 – Definição e uso de Classe em Python
Fonte: elaborada pelo autor.
Em Python, também pode ser implementado o conceito de Herança, que 
ocorre quando uma classe filha herda características e métodos de uma 
classe pai sem impedir que a classe filha possua seus próprios métodos 
e atributos. Consideremos como exemplo a herança entre as classes 
PessoaFisica e PessoaJuridica que herdam Pessoa.
A Figura 2 ilustra o exemplo de herança em Python entre a classe Pessoa 
(pai) e PessoaFisica (filha). Primeiro é necessário importar a classe pai 
(from pessoa import Pessoa), em que Pessoa é o nome do arquivo em 
que a classe pai (Pessoa) foi criada. Em seguida, define-se a classe filha 
herdando a classe pai (class PessoaFisica(Pessoa)), em que PessoaFisica 
é o nome da classe filha e Pessoa é a classe pai. Um novo construtor é 
28
criado (def __init__(self, cpf, nome, rg,idade) e invoca-se o construtor da 
classe pai em super().__init__(nome, rg, idade). A classe filha possui seus 
próprios atributos self.cpf = cpf e seus próprios métodos setters e getters 
em def setCpf(self, cpf): self.cpf = cpf e def getCpf(self): return self.cpf.
Figura 2 – Herança em Python por meio da classe PessoaFisica
Fonte: elaborada pelo autor.
A Figura 3 ilustra o exemplo de herança em Python entre a classe 
Pessoa (pai) e PessoaJuridica (filha). Primeiro é necessário importar a 
classe pai (from pessoa import Pessoa), em que Pessoa é o nome do 
arquivo em que a classe pai (Pessoa) foi criada. Em seguida, define-se 
a classe filha herdando a classe pai (class PessoaJuridica(Pessoa)), em 
que PessoaJuridica é o nome da classe filha e Pessoa é a classe pai. Um 
novo construtor é criado (def __init__(self, cnpj, nome, rg,idade) e invoca-
se o construtor da classe pai em super().__init__(nome, rg, idade). A 
classe filha possui seus próprios atributos self.cnpj = cnpj e os próprios 
métodos setters e getters em def setCnpj(self, cnpj): self.cnpj = cnpj e def 
getCnpj(self): return self.cnpj.
29
Figura 3 – Herança em Python por meio da classe PessoaJuridica
Fonte: elaborada pelo autor.
1.2 Ruby
A linguagem Ruby foi inspirada em outras linguagens, como Perl, 
Smalltalk e List. Ela foi criada por Yukihiro Matsumoto, em 1995, no 
Japão, tendo sua disseminação por meio do principal framework MVC, o 
Ruby on Rails (SOUZA, 2014).
Sobre a instalação da Ruby, se o sistema operacional for Windows, a 
forma mais simples de instalar é utilizando uma versão RubyInstaller. Os 
usuários de Linux podem fazer a instalação utilizando o apt-get install, 
abrindo um terminal e digitando: sudo apt-get install ruby2.7.1. No Mac 
OS, a Ruby já vem instalada, sendo necessário só abrir o terminal e 
executar ruby-v.
A Ruby é uma linguagem totalmente orientada a objetos, em que tudo 
é considerado um objeto, até mesmo os tipos básicos da linguagem, 
obtendo grandes benefícios ao manter o conjunto de informações 
e os métodos que operam sobre essas informações em um mesmo 
lugar. Para isso, é necessário utilizar as classes, por meio de atributos 
(características) e métodos (funcionalidades). A linguagem Ruby é 
dinamicamente, implicitamente e fortemente tipada, isto é, a cada 
30
interação o tipo é verificado, a Ruby detecta o tipo automaticamente e 
todas as variáveis possuem um tipo.
A Figura 4 ilustra a criação de uma classe Usuário na linguagem Ruby. 
Dois atributos nome e senha são definidos, como attr_reader, permitindo 
a leitura direta de seus valores. A criação de um método é realizada por 
meio do comando def. São criados dois métodos para atribuir valores 
às variáveis, recebendo os dados por parâmetro (nome e senha). Se o 
parâmetro estiver vazio, a função de validação de dados apresentará 
a mensagem que os dados não podem ficar em branco. Os métodos 
visualiza_nome e visualiza_senha apresentam, respectivamente, os nomes 
e as senhas cadastrados. Para criar uma instância da classe Usuario, é 
necessário utilizar o operador new, como em usuario = new Usuario. Uma 
vez instanciado o objeto, é possível acessar os métodos, atribuindo o 
nome (Thiago) e a senha (123456), e visualizá-los, chamando o método 
visualiza_nome e visualiza_senha.
31
Figura 4 – Orientação a Objetos em Ruby
Fonte: elaborada pelo autor.
Alguns pontos importantes sobre a linguagem de programação Ruby 
(MCGAVREN, 2015):
32
• Um corpo de método consiste em uma ou mais instruções Ruby 
que serão executadas quando o método for chamado.
• Parênteses devem ser deixados de fora de uma definição de 
método se (e somente se) não estiver sendo definido nenhum 
parâmetro.
• Se não for especificado um valor de retorno, os métodos 
retornarão o valor da última expressão avaliada.
• Definições de método que aparecem em uma definição de classe 
são tratadas como métodos de instância para essa classe.
• Fora de uma definição de classe, as variáveis de instância podem 
ser acessadas apenas por métodos acessadores.
• É possível chamar os métodos attr_writer, attr_reader e attr_accessor 
dentro de sua definição de classe como um atalho para definir 
métodos de acessador.
• Os métodos do acessador podem ser usados para garantir que os 
dados sejam válidos antes de serem armazenados nas variáveis de 
instância.
• O método raise pode ser chamado para relatar um erro no 
programa.
A linguagem Ruby possibilita o uso de herança entre classes, permitindo 
que o programador crie uma classe filha, que é uma especialização da 
classe pai. A Figura 5 ilustra a herança em Ruby. A classe Pessoa (pai) 
possui os atributos nome, sobrenome e CPF com o método construtor 
(def initialize), recebendo por parâmetro os dados e realizando a 
atribuição às respectivasvariáveis. O método nome_completo exibe 
o nome e o sobrenome. A classe Empregado é filha da classe Pessoa. 
A herança é definida utilizando o sinal de menor (class Empregado < 
Pessoa). A classe Empregado possui seus atributos cargo e salário. Ao 
33
instanciar um empregado (empregado = Empregado.new), o construtor do 
pai (Pessoa) é chamado, enviando nome, sobrenome e CPF.
Figura 5 – Herança em Ruby
Fonte: elaborada pelo autor.
34
Neste Tema, vimos as linguagens Python e Ruby e aprendemos sobre 
os conceitos de programação orientada a objetos nas respectivas 
linguagens.
Referências Bibliográficas
BANIN, S. L. Python 3: conceitos e aplicações – uma abordagem didática. São Paulo: 
Érica, 2018.
MCGAVREN, J. Head First Ruby: A Brain Friendly Guide. Sebastopol: O’Reilly, 2015.
PERKOVIC, L. Introdução à computação usando Python: um foco no 
desenvolvimento de aplicações. Rio de Janeiro: LTC, 2016.
SOUZA, L. Ruby: Aprenda a programar na linguagem mais divertida. São Paulo: 
Casa do Código, 2014.
35
Modelagem de banco de dados e o 
projeto do fluxo de dados
Autoria: Thiago Salhab Alves
Leitura crítica: Anderson Paulo Ávila Santos
Objetivos
• Aprender sobre o projeto de banco de dados.
• Aprender sobre o modelo conceitual do banco de 
dados.
• Aprender sobre o projeto lógico do banco de dados.
36
1. Modelagem de banco de dados e o projeto do 
fluxo de dados
É interessante parar para pensar na possibilidade de vivermos 
hoje sem o uso de sistemas e o armazenamento de dados para 
posterior consulta e utilização. Como seria o trabalho dos grandes 
hipermercados, por exemplo, tendo que controlar todo o estoque 
de produtos manualmente? Graças ao uso de banco de dados e 
sistemas gerenciadores de dados, vinculados a modernos sistemas de 
informação, o trabalho e o controle dos dados se tornaram muito mais 
eficientes.
Neste tema, estudaremos sobre o projeto de banco de dados e os 
modelos utilizados, sendo os modelos conceituais e lógico do banco de 
dados.
Um Banco de Dados ou uma Base de Dados é uma coleção de dados 
logicamente relacionados que embute um determinado significado, não 
podendo associações aleatórias de dados serem chamadas de base 
de dados. Em outras palavras, é uma coleção de dados relacionados 
organizada de maneira a possibilitar a fácil manipulação de dados.
Uma base de dados representa um aspecto do mundo real chamado de 
“minimundo”. Mudanças no minimundo provocam mudanças na base 
de dados (ELMASRI; NAVATHE, 2019). Há também os Banco de Dados 
não relacionais, que apresentam como diferencial a oferta de melhor 
performance e alta escalabilidade, garantindo um gerenciamento mais 
eficiente, com linguagem NoSQL. Todas as informações no banco de 
dados não relacional ficam agrupadas em um único registro.
Sendo assim, podemos partir dos seguintes conceitos:
1. Dado (representação da informação): fato do mundo real que 
está registrado e possui um significado implícito no contexto 
37
de um domínio de aplicação. Exemplos: endereço, data de 
nascimento, filhos.
2. Informação (significado do dado): fato útil que pode ser extraído 
direta ou indiretamente a partir dos dados. Exemplos: endereço e 
idade da pessoa; ela tem filhos?
Os Bancos de Dados fazem parte do nosso cotidiano, como em:
• Operações Bancárias.
• Matrícula na Universidade.
• Reserva de Hotel.
• Controle de Estoque de uma Empresa.
• Comércio Eletrônico.
Um Sistema Gerenciador de Banco de Dados (SGBD) é uma coleção de 
programas que permite aos usuários criarem, manipularem e gerenciar 
uma base de dados. A base de dados e o SGBD juntos compõem o 
chamado Sistema de Base de Dados. Exemplos: Oracle, DB2, Paradox, 
Postgres, MySQL, SQL Server, MongoDB etc. (SILBERCHATZ; KORTH; 
SUDARSHAN, 2012).
O SGBD é um software que controla os acessos ao banco de dados e 
possibilita uma interface de usuário para usar o sistema de banco de 
dados. Ele isola dos usuários os detalhes do banco de dados (abstração 
de dados) e possibilita independência de dados às aplicações (estrutura 
física de armazenamento) e à estratégia de acesso.
O SGBD apresenta as seguintes vantagens (ELMASRI; NAVATHE, 2019):
• Rapidez na manipulação e no acesso à informação.
• Redução do esforço humano (desenvolvimento e utilização).
38
• Redução da redundância e inconsistência de informações.
• Compartilhamento de dados.
• Aplicação automática de restrições de segurança.
Um Modelo de Dados é usado para descrever a estrutura de um banco 
de dados, as operações para manipular essas estruturas e certas 
restrições que o banco de dados deve obedecer (ELMASRI; NAVATHE, 
2019). Ele oferece uma maneira de descrever o projeto de um banco de 
dados no nível físico, lógico e de visão.
Sendo assim, um projeto de banco de dados é a atividade de 
modelagem de dados em diversos níveis de abstrações, compreendendo 
desde a identificação dos dados a serem armazenados até a escolha de 
estruturas de dados adequadas.
1.1 Projeto Conceitual
No projeto conceitual, descreve-se o conteúdo da informação sem se 
preocupar com detalhes de armazenamento. O esquema conceitual 
apresenta a descrição de alto nível da estrutura do banco de dados, 
utilizando um modelo conceitual e representando a relação entre 
os dados. O modelo conceitual é a linguagem usada para descrever 
esquemas conceituais. Exemplo: Modelo Entidade-Relacionamento 
(ELMASRI; NAVATHE, 2019).
O Modelo Entidade-Relacionamento (MER) é um modelo semântico, 
proposto em 1976 por Peter Chen, que apresenta uma simbologia muito 
simples que pode ser utilizada para a validação com o cliente. A Figura 1 
ilustra os elementos visuais que são utilizados no MER.
39
Figura 1 – Elementos visuais do MER
Fonte: elaborada pelo autor.
No MER alguns elementos são representados (ELMASRI; NAVATHE, 
2019):
• Entidade: representa um conjunto de objetos semelhantes no 
mundo real. Exemplo: Professores, Carros, Livros. No MER, uma 
entidade é representada por um retângulo.
• Atributos: representam propriedades de uma entidade ou de um 
relacionamento. Exemplo: Nome, CPF, Autor, Título. No MER, os 
atributos são representados por elipses.
• Relacionamento: representa uma associação entre entidades. 
Exemplo: Compra – Um cliente compra vários Livros, mas um 
livro é comprado por, no máximo, um cliente. No MER, os 
relacionamentos são representados por losangos ligando duas 
entidades.
40
• Cardinalidade: corresponde aos relacionamentos que existem 
entre as entidades. Eles podem ser de um para um (1 – 1), em 
que uma entidade se relaciona exatamente com uma outra 
entidade; de um para muitos (1 – N), em que uma entidade se 
relacionamento com muitas outras entidades; e de muitos para 
muitos (N – N), em que muitas entidades se relacionam com 
muitas outras entidades.
Um atributo chave (chave primária) é um atributo que identifica 
unicamente uma entidade sendo seu identificador. Exemplo: CPF para 
pessoas, RA para alunos, CRM para médicos etc. Um atributo chave 
estrangeira é um atributo chave primária em uma entidade e, por conta 
do relacionamento, aparece em outra entidade.
A Figura 2 ilustra o exemplo da entidade Médico, que possui os 
atributos Nro (chave primária da tabela e sublinhado), nome, idade, 
sexo, endereço e salário se relacionando com a entidade Exames. O 
relacionamento é de um para muitos (1 – N), isto é, um médico realiza 
muitos exames, mas um exame é realizado por um médico.
Figura 2 – Exemplo de MER com seus elementos
Fonte: elaborada pelo autor.
A Figura 3 ilustra a representação dos tipos de atributos, os quais podem 
ser representados da seguinte forma:
41
• Simples e monovalorados: são atributos indivisíveis, que 
assumem um único valor para cada elemento. Exemplo: nome, 
sexo etc.
• Simples e multivalorados: uma única entidade tem diversos 
valores para esse atributo. Exemplo: telefone, motorista etc.
• Compostos e monovalorados: formados por um ou mais 
subatributos. Exemplo: endereço (rua, número, bairro e CEP).
• Compostos e multivalorados:uma entidade tem diversos valores 
formados por um ou mais subatributos. Exemplo: autor com 
prenome e sobrenome.
 
Figura 3 – Representação dos tipos de atributos
Monovalorado Multivalorado
Simples
Composto
Fonte: elaborada pelo autor.
A Figura 4 ilustra a representação de uma entidade Pessoa, que possui a 
chave primária CPF; os atributos simples e monovalorados (nome, nro e 
data_nascimento); o atributo composto endereço (composto de estado, 
cidade, rua, nro e bairro); atributo multivalorado (telefone); e atributo 
derivado (idade), que é derivado de data_nascimento.
42
Figura 4 – Representação de entidade com todos os tipos de 
atributo
Fonte: elaborada pelo autor.
O MER permite representar a participação das entidades no 
relacionamento, o que é conhecido por restrição de participação, que 
pode ser parcial (uma única linha), em que parte das instâncias da 
entidade pertencem ao relacionamento, e total (linha dupla), quando 
toda a instância da entidade pertence ao relacionamento. A Figura 5 
ilustra o relacionamento da entidade cliente com serviço. Do lado do 
cliente, a participação é total, indicando que ele comprou ao menos um 
serviço; e, do lado de serviço, a participação é parcial, indicando que 
nem todos os serviços são comprados por clientes.
Figura 5 – Representação de participação parcial e total das 
entidades
Fonte: elaborada pelo autor.
43
O MER pode representar entidades fracas, que são aquelas que 
dependem da existência de outras entidades para existir, não possuindo 
chave primária, e sim um atributo identificador parcial. A Figura 6 
ilustra a entidade fraca dependente, simbolicamente representada por 
um retângulo duplo. Essa entidade não possui chave primária, e sim 
um atributo identificador parcial (nome). O losango que representa o 
relacionamento também é duplo. Ela é dependente, ou seja, necessita 
de responsável para poder existir (SILBERCHATZ; KORTH; SUDARSHAN, 
2012).
Figura 6 – Representação de entidade franca no MER
Fonte: elaborada pelo autor.
Já a Figura 7 ilustra um exemplo completo de MER. A entidade 
Empregado possui os atributos Nss (chave primária), atributo composto 
nome (composto por Pnome, Mnome e Snome), endereço, salário e 
datanasc. Essa entidade se autorrelaciona com Empregado, em que um 
empregado supervisiona muitos empregados. A entidade Departamento 
possui os atributos Número (chave primária) e Nome e o atributo 
multivalorado Localização. As entidades Empregado e Departamento se 
relacionam no papel de trabalha-para, em que o empregado trabalha 
em um departamento, enquanto o departamento tem trabalhando 
muitos empregados. No papel de gerência, o empregado gerencia um 
departamento e o departamento é gerenciado por um empregado. A 
44
entidade Projeto possui as entidades Número (chave primária), Nome 
e Localização. A entidade Projeto se relaciona com Empregado, em que 
um empregado Trabalha em muitos projetos, enquanto um projeto 
tem trabalhando muitos empregados. A entidade fraca Dependente 
depende da existência da entidade Empregado, possuindo como chave 
identificadora parcial o Nome e os atributos Sexo, DataNasc e TipoRelação. 
O dependente depende de um empregado e o empregado pode ter 
muitos dependentes.
Figura 7 – MER
Fonte: elaborada pelo autor.
1.2 Projeto Lógico
No projeto lógico, avalia-se o esquema conceitual diante das 
necessidades do uso de banco de dados, realizando refinamentos para 
aumentar o desempenho das operações sobre o banco de dados. O 
45
esquema lógico é a descrição de uma estrutura de um banco de dados 
(usando um modelo lógico), que pode ser processada por SGBD. O 
Modelo Lógico é um diagrama visual que ilustra como o programa 
funcionará para atender às necessidades identificadas de um cliente. 
Exemplo: Modelo Lógico Relacional (ELMASRI; NAVATHE, 2019).
O Projeto Lógico do Banco de Dados consiste em mapear as entidades e 
os relacionamentos para o esquema relacional, sendo apresentado em 
cinco passos (ELMASRI; NAVATHE, 2019):
• Passo 1: para cada entidade regular E no MER, criar uma relação 
contendo todos os atributos simples de E; para os atributos 
compostos, incluir apenas os atributos simples que compõem 
o atributo composto. Para os atributos multivalorados m, criar 
uma relação contendo esse atributo m e a chave primária ch da 
relação original. A Figura 8 ilustra o mapeamento para o esquema 
relacional das entidades e dos atributos.
Figura 8 – Mapeamento de Atributos para o Esquema Relacional
Fonte: elaborada pelo autor.
Carro (placa, cor, ano, modelo, potência) 
CarroRevisao (placa, km, oficina) 
CarroMotorista (placa, motorista)
46
Audiodescrição: a imagem mostra o mapeamento para o esquema 
relacional das entidades e dos atributos.
• Passo 2: para cada entidade fraca W no Modelo Entidade 
Relacionamento com identificação da entidade E, criar uma relação 
R que inclua todos os atributos simples de W como atributos de R. 
Incluir como chave estrangeira de R a chave primária da relação 
que corresponde ao tipo de entidade de identificação. A chave 
primária de R é a combinação da chave primária da entidade de 
identificação e a chave principal da entidade fraca W. A Figura 9 
ilustra o mapeamento para o esquema relacional da entidade fraca 
Dependente.
Figura 9 – Mapeamento de Entidade Fraca para o Esquema 
Relacional
Fonte: elaborada pelo autor.
Passo 3: em relacionamentos de um para um (1:1), criar as relações S 
e T, que correspondem às entidades participantes do relacionamento 
R. Escolher uma das relações, por exemplo S, e incluir como chave 
estrangeira de S a chave primária de T. Escolher o tipo de entidade com 
participação total em R, como a relação S. Incluir todos os atributos 
simples do relacionamento como atributos de S. A Figura 10 ilustra o 
mapeamento para o esquema relacional do relacionamento de um 
47
para um, com a propagação da chave estrangeira (nroEmp) da entidade 
Empregado para Departamento.
Figura 10 – Mapeamento de Relacionamento um para um (1:1) para 
o Esquema Relacional
Fonte: elaborada pelo autor.
Passo 4: em relacionamento de um para muitos (1:n), identificar 
a relação S que representa a entidade que participa do lado N do 
relacionamento. Incluir como chave estrangeira de S a chave primária 
da relação T, que representa a outra entidade que participa do 
relacionamento. A Figura 11 ilustra o mapeamento para o esquema 
relacional do relacionamento de um para muitos, com a propagação da 
chave estrangeira (nrodept) da entidade Departamento para Empregado.
48
Figura 11 – Mapeamento de Relacionamento um para muitos (1:N) 
para o Esquema Relacional
Fonte: elaborada pelo autor.
Passo 5: em relacionamento de muitos para muitos (n:n), criar uma 
nova relação S para representar o relacionamento. Incluir como 
chave primária de S as chaves primárias das relações participantes. 
Incluir qualquer atributo simples do relacionamento como atributos 
de S. A Figura 12 ilustra o mapeamento para o esquema relacional 
do relacionamento de muitos para muitos, criando uma nova relação 
(TrabalhaEm) que contém a chave estrangeira das duas entidades.
49
Figura 12 – Mapeamento de Relacionamento muitos para muitos 
(N:N) para o Esquema Relacional
Fonte: elaborada pelo autor.
Neste Tema, aprendemos sobre o projeto de Banco de Dados e os 
modelos conceituais e lógicos de banco de dados.
Referências Bibliográficas
ELMASRI, R.; NAVATHE, S. B. Sistemas de Banco de Dados. 7. ed. São Paulo: 
Pearson Education, 2019.
SILBERCHATZ, A.; KORTH, H. F.; SUDARSHAN, S. Sistema de Banco de Dados. 6. ed. 
São Paulo: Campus, 2012.
50
Procedimentos de programação 
em banco de dados utilizando a 
linguagem SQL
Autoria: Thiago Salhab Alves
Leitura crítica: Anderson Paulo Avila Santos
Objetivos
• Aprender sobre os procedimentos de programação 
em banco de dados.
• Aprender sobre a linguagem SQL.
• Aprender a programar utilizando a linguagem SQL.
51
1. Programação em Banco de Dados utilizando 
SQL
É interessante parar para pensarcomo são criados os bancos de dados 
que armazenam os dados dos sistemas utilizados nas Universidades 
com os dados de alunos; no comércio eletrônico, com dados de 
produtos; entre outros sistemas. Graças à linguagem de programação 
SQL e a seus principais comandos para definição e manipulação de 
dados, o trabalho de criação e manipulação de banco de dados se 
tornou mais eficiente e seguro.
Neste tema, serão apresentados os procedimentos de programação 
em banco de dados. Aprenderemos sobre a linguagem SQL e a 
programação, utilizando os principais comandos SQL.
A linguagem Structured Query Language (SQL), em português Linguagem 
de Consulta Estruturada, é considerada como um dos principais motivos 
para o sucesso de bancos de dados relacionais comerciais. Inicialmente 
chamada de Structured English QUEry Language (SEQUEL), foi criada e 
implementada na IBM Research como a interface para um sistema 
de banco de dados relacional experimental, chamado de SYSTEM R 
(ELMASRI; NAVATHE, 2019).
A SQL é a linguagem padrão para SGBDs (Sistemas Gerenciadores de 
Banco de Dados) relacionais comerciais. O esforço conjunto entre o 
American National Standards Institute (ANSI) e a International Standars 
Organization (ISO) levou a uma versão padrão da SQL (ANSI), de 1986, 
chamada de SQL-86 ou SQL1. Já um padrão revisado e expandido 
levou à SQL-92, também conhecida por SQL2. O próximo padrão foi o 
SQL:1999, ou SQL3. Duas atualizações posteriores ao padrão são a SQL: 
2003 e SQL: 2006, que acrescentou recursos de XML, e atualizações em 
2008 e 2016 (SILBERCHATZ; KORTH; SUDARSHAN, 2012).
52
A SQL é uma linguagem para banco de dados com instruções para 
definição de dados, consultas e atualizações. Assim, possui um conjunto 
de comandos para a definição de dados DDL (Data Definition Language), 
contendo os comandos CREATE, ALTER e DROP, e para a manipulação 
de dados DML (Data Manipulation Language), contendo os comandos 
INSERT, UPDATE, DELETE E SELECT.
A SQL também apresenta comandos para o controle de dados DCL (Data 
Control Language), que são utilizados para controlar a autorização de 
dados e as licenças de usuários, contendo os comandos GRANT (autoriza 
o usuário a executar operações) e REVOLKE (remove a autorização de 
um usuário para executar operações), e o os comandos para transação 
de dados DTL (Data Transaction Language), sendo responsáveis por 
gerenciar transações ocorridas em um banco de dados, contendo os 
comandos BEGIN TRANSACTION, que marca o começo de uma transação 
no banco de dados; COMMIT, que envia os dados da transação ao banco 
de dados de forma permanente; e ROLLBACK, que desfaz as alterações 
feitas na transação realizada.
1.1 Criando um Banco de Dados e Tabelas
O principal comando DDL é o CREATE, que pode ser usado para criar 
esquemas e tabelas. As primeiras versões do SQL não incluíam o 
conceito de esquema de banco de dados, sendo introduzido a fim de 
agrupar tabelas e outras construções que pertencem à mesma aplicação 
de banco de dados. O esquema SQL é identificado por um nome de 
esquema, por exemplo: a instrução a seguir apresentada na Figura 1 cria 
um esquema chamado EMPRESA (ELMASRI; NAVATHE, 2019):
53
Figura 1 – Criação de schema
 
1 create schema empresa;
Fonte: elaborada pelo autor
O comando CREATE TABLE é utilizado para criar uma nova tabela 
(relação), atribuindo um nome e especificando seus atributos e 
restrições. Os atributos são os primeiros a serem especificados, em 
que cada um recebe um nome e um tipo de dado e restrições como 
o NOT NULL (atributo não pode ficar vazio). A criação de uma tabela 
Funcionário é realizada da seguinte forma:
Figura 2 – Sintaxe para criação de uma tabela
• CREATE TABLE FUNCIONARIO;
Fonte: elaborada pelo autor.
Os tipos de dados básicos que são utilizados nos atributos são 
numéricos, cadeia de caracteres, cadeia de bits, booleano, data e hora. 
Os seguintes tipos são considerados (ELMASRI; NAVATHE, 2019):
• Numérico: incluem números inteiros (INTEGER ou INT) e números 
reais (FLOAT e DOUBLE PRECISION). O formato dos números 
pode ser DECIMAL (i, j), em que i é a precisão (número de dígitos 
decimais) e j é a escala (número de dígito após o ponto decimal).
• Cadeia de caracteres: são de tamanho fixo CHAR(n), em que n é o 
número de caracteres ou de tamanho variável VARCHAR(n).
• Cadeia de bits: pode ser de tamanho fixo n BIT(n) ou de tamanho 
variável BIT VARYING (n), em que n é o número máximo de bits, 
sendo 1 o valor padrão para a cadeia de bits. Outro tipo de cadeia 
de bits de tamanho variável é o BLOB, usado para especificar 
colinas com grandes valores binários, como imagens.
54
• Booleano: o tipo booleano tem os valores TRUE (verdadeiro) ou 
FALSE (falso).
• Data: o tipo de dado DATE possui dez posições e seus 
componentes são dia (DAY), mês (MONTH) e ano (YEAR) no 
formado DD-MM-YYYY.
• Hora: o tipo de dado TIME (tempo) possui oito posições, com os 
componentes hora (HOUR), minuto (MINUTE) e segundo (SECOND) 
no formato HH:MM:SS.
• Timestamp: o tipo de dados TIMESTAMP engloba os campos DATE 
e TIME.
O comando DROP é utilizado para apagar esquemas e tabelas. Por 
exemplo, para remover o esquema Empresa, é utilizado o seguinte 
comando:
Figura 3 – Sintaxe para apagar um schema
1 drop schema empresa;
Fonte: elaborada pelo autor.
Para excluir uma tabela, por exemplo, a tabela Dependente, é utilizado o 
seguinte comando:
Figura 4 – Sintaxe para apagar uma tabela
1 drop table empresa;
Fonte: elaborada pelo autor.
Uma chave primária identifica um único registro armazenado na tabela. 
Para que um campo seja definido como chave primária, é utilizado 
primary key. Se considerarmos uma tabela pessoa, o identificador (chave 
primária) dessa tabela pode ser o CPF.
55
Figura 5 – Sintaxe para definir a chave primária de uma tabela
Fonte: elaborada pelo autor.
A chave estrangeira é utilizada para expressar o relacionamento que 
existe entre tabelas, sendo uma referência em uma tabela a uma chave 
primária de outra tabela. Consideremos, por exemplo, a tabela Carro. 
O relacionamento entre Pessoa e Carro é do tipo 1:N, pois uma Pessoa 
pode ter muitos Carros. Assim, a chave primária (CPF) de Pessoa aparece 
como chave estrangeria em Carro, conforme a Figura 6.
Figura 6 – Sintaxe para definir a chave primária de uma tabela
Fonte: elaborada pelo autor.
A cláusula PRIMARY KEY especifica um ou mais atributos que definem 
a chave primária da relação. A cláusula UNIQUE define as chaves 
alternativas (secundárias), que é um identificador único dentro de 
uma relação que garante que nenhuma tupla será duplicada, e as 
chaves estrangeiras, que são chaves primárias de outras tabelas da 
relação, são definidas pela cláusula FOREIGN KEY. As Figuras 7 a 11 
ilustram a criação, utilizando SQL, das tabelas Employee, Department, 
Dept_Locations, Project e Works_On. São definidos os campos, com 
56
seus respectivos tipos e restrições. As chaves primárias e estrangeiras 
também foram definidas (ELMASRI; NAVATHE, 2019).
Figura 7 – Criação da tabela Employee
Fonte: elaborada pelo autor.
Figura 8 – Criação da tabela Department
Fonte: elaborada pelo autor.
57
Figura 9 – Criação da tabela Dept_Locations
Fonte: elaborada pelo autor.
Figura 10 – Criação da tabela Project
Fonte: elaborada pelo autor.
Figura 11 – Criação da tabela Works_On
Fonte: elaborada pelo autor.
58
Uma tabela pode ter sua estrutura alterada por meio do comando 
ALTER. As ações possíveis são adicionar ou eliminar uma coluna 
(atributo), alterar a definição de uma coluna e adicionar ou eliminar 
restrições na tabela. A Figura 12 ilustra a alteração da tabela Employee 
adicionando a chave estrangeira no campo DNO, que tem como 
referência a tabela Department no campo DNUMBER. O uso de DELETE 
CASCADE e UPDATE CASCADE fará com que todas as restrições que 
fizerem referência a esse campo sejam apagadas e atualizadas. A 
tabela Employee recebe também a adição de um novo campo JOB 
(SILBERCHATZ; KORTH; SUDARSHAN,2012).
Figura 12 – Alteração de tabelas utilizando a linguagem SQL
Fonte: elaborada pelo autor.
1.2 Principais Comandos DML
Após visualizarmos os comandos DDL, serão apresentados os comandos 
DML. Para a atualização de dados, os comandos INSERT, DELETE e 
UPDATE são utilizados. O comando INSERT permite a inserção de 
registros na tabela. A inserção é realizada conforme apresentado na 
Figura 13. A inserção deve obedecer à sequência de campos criados, 
sendo os campos definidos como CHAR, VARCHAR e DATE e inseridos 
entre aspas simples e os campos numéricos sem ASPAS. É possível 
escolher quais campos terão os dados inseridos, como, no segundo 
INSERT ,são inseridos apenas os registros para FNAME, LNAME e SSN, 
que são os campos que foram definidos como NOT NULL (ESMASRI; 
NAVATHE, 2019).
59
Figura 13 – Inserção de dados utilizando a linguagem SQL
Fonte: elaborada pelo autor.
O comando DELETE remove tuplas (registros ou linhas de dado) de uma 
relação. Incluir uma cláusula WHERE para selecionar as tuplas a serem 
eliminadas. A integridade referencial deve ser aplicada. As tuplas são 
excluídas da tabela somente uma de cada vez (a menos que a CASCADE 
for especificada em uma restrição de integridade referencial). A falta 
da cláusula WHERE especifica que todas as tuplas da relação devem ser 
excluídas. A cláusula WHERE é utilizada para definir a condição para a 
aplicação do comando; a tabela torna-se, então, uma tabela vazia. O 
número de tuplas excluídas depende do número de tuplas na relação 
que satisfazem a cláusula WHERE.
A Figura 14 ilustra o uso do comando DELETE. A primeira instrução irá 
remover os registros da tabela Employee em que o campo LNAME for 
igual a Brown. A segunda instrução irá excluir os registros da tabela 
Employee em que o campo SSN for igual a 123456789. Já a terceira 
instrução irá excluir todos os registros da tabela Employee (ELMASRI; 
NAVATHE, 2019).
Figura 14 – Exclusão de registros utilizando a linguagem SQL
Fonte: elaborada pelo autor.
O comando UPDATE usado para modificar os valores dos atributos de 
uma ou mais tuplas. Uma cláusula WHERE–seleciona as tuplas a 
serem modificadas. Um adicional de cláusula SET especifica os 
60
atributos a serem modificados e seus novos valores. Cada comando 
modifica tuplas na mesma relação. A integridade referencial deve ser 
aplicada. A Figura 15 ilustra o uso do comando UPDATE para realizar 
atualizações. A primeira instrução atualiza o local e departamento de 
controle do projeto de número 10, alterando a localização do projeto 
para Bellaire e o número do departamento de controle para 5. A 
segunda instrução atualiza o salário de todos os empregados que 
trabalham no departamento Research, atribuindo 10% de aumento 
(ELMASRI; NAVATHE, 2019).
Figura 15 – Atualização de registros utilizando a linguagem SQL
Fonte: elaborada pelo autor.
O comando SELECT é utilizado para a consulta de dados. O comando 
básico da declaração do SELECT é composto por três clausulas, SELECT, 
FROM e WHERE, e tem a seguinte forma (ELMASRI; NAVATHE, 2019):
• SELECT <lista de atributos>.
• FROM <lista de tabelas>.
• WHERE <condição>.
A lista de atributos é uma lista dos nomes dos atributos cujos valores são 
recuperados pela consulta. A lista de tabelas é uma lista dos nomes das 
relações necessárias para o processamento da consulta, e a condição é 
uma expressão condicional (booleana) que identifica as tuplas que serão 
recuperadas pela consulta. A Figura 16 ilustra a consulta de registros 
61
utilizando o comando SELECT. Na primeira consulta, são recuperados 
a data de nascimento e o endereço do empregado de nome John B. 
Smith; na segunda consulta, são recuperados o nome e o endereço de 
todos os funcionários que trabalham para o departamento Research; 
e, na terceira consulta, são recuperados o número de projetos, o 
departamento de controle do projeto, o sobrenome, o endereço e a data 
de nascimento do gerente do departamento que está localizado em 
Stafford (ELMASRI; NAVATHE, 2019).
Figura 16 – Consulta de registros utilizando a linguagem SQL
Fonte: elaborada pelo autor.
Em SQL, podemos usar o mesmo nome para dois (ou mais) atributos, 
desde que os atributos estejam em diferentes relações. Uma consulta 
que se refere a dois ou mais atributos com o mesmo nome deve 
qualificar o nome do atributo com o nome da relação, prefixando o 
nome da relação para o nome do atributo. Algumas consultas precisam 
disso para se referirem duas vezes à mesma relação. Nesse caso, 
aliases são dadas para o nome da relação. Consideremos, por exemplo, 
a seguinte situação apresentada na Figura 17: para cada empregado, 
vamos recuperar o nome do empregado e o nome do supervisor 
imediato. Foi criado um Alias para a entidade Employee por meio de 
EMPLOYEE AS E e EMPLOYEE AS S; dessa forma, o nome do atributo fica 
62
qualificado. Ao visualizar E.FNAME ou S.LNAME, as letras E e S se referem 
à tabela EMPLOYEE (ELMASRI; NAVATHE, 2019).
Figura 17 – Exemplo do uso do Alias nas consultas SQL
Fonte: elaborada pelo autor.
Para a codificação dos códigos SQL, é necessário o uso de um Sistema 
Gerenciador de Banco de Dados (SGBD), sendo um dos mais utilizados 
o MySQL. Para efetuar sua instalação, basta baixar a versão MySQL 
Community Server, que é uma versão de download gratuito e open source. 
Ele está disponível sob a licença General Public License (GPL) e recebe o 
suporte de uma imensa e ativa comunidade de desenvolvedores open 
source.
É preciso escolher a plataforma na qual o MySQL vai rodar (Linux, 
Windows, Solaris e várias outras opções) e baixar o instalador do MySQL, 
já sendo possível instalá-lo e utilizá-lo. O MySQL é um serviço que fica 
rodando no sistema e que por padrão não possuí interface gráfica, mas 
permite a manipulação por linha de comando.
Para realizar a instalação, é necessário as instruções da documentação 
do próprio MySQL. No Windows, basta utilizar o instalador, disponível 
na página de downloads, e seguir as instruções dele. Já no Linux existem 
as opções de instalar os binários, como em pacotes RPM, e a opção de 
baixar as fontes e compilá-las na máquina de destino do MySQL.
Uma vez instalado o MySQL, para facilitar a sua utilização e o seu 
desenvolvimento de código SQL, há uma ferramenta integrada de 
desenvolvimento chamada MySQL Workbench (https://dev.mysql.com/
downloads/workbench/), que fornece recursos de modelagem e design 
https://dev.mysql.com/downloads/workbench/
https://dev.mysql.com/downloads/workbench/
63
de banco de dados, desenvolvimento SQL, administração de banco de 
dados e migração de banco de dados. O MySQL Workbench, assim como 
o MySQL Community Server, é um software sob licença GPL e open source.
Neste tema, aprendemos sobre os procedimentos de programação 
em banco de dados, a linguagem SQL e a programação, utilizando os 
principais comandos SQL.
Referências Bibliográficas
ELMASRI, R.; NAVATHE, S. B. Sistemas de Banco de Dados. 7. edição. São Paulo: 
Pearson Education, 2019.
SILBERCHATZ, A.; KORTH, H. F.; SUDARSHAN, S. Sistema de Banco de Dados. 6. 
edição. São Paulo: Campus, 2012.
64
Bons estudos!
	Sumário
	Procedimento de programação orientada a objeto: Java e C#
	Objetivos
	1. Programação Orientada a Objetos
	Referências Bibliográficas
	Procedimento de programação orientada a objeto: Python e Ruby
	Objetivos
	1. Programação Orientada a Objetos com Python e Ruby
	Referências Bibliográficas
	Modelagem de banco de dados e o projeto do fluxo de dados
	Objetivos
	1. Modelagem de banco de dados e o projeto do fluxo de dados
	Referências Bibliográficas
	Procedimentos de programação em banco de dados utilizando a linguagem SQL
	Objetivos
	1. Programação em Banco de Dados utilizando SQL
	Referências Bibliográficas

Continue navegando