Escolar Documentos
Profissional Documentos
Cultura Documentos
banco de dados (SBD) e a arquitetura dos sistemas de gerência de banco de dados (SGBD).
PROPÓSITO:Compreender a origem e as características dos SBDs, bem como suas funcionalidades, vantagens e
desvantagens, além de conhecer a arquitetura dos SGBDs e os sistemas mais utilizados em bancos de dados
MÓDULO 1:Reconhecer o histórico dos bancos de dados e suas tecnologias
MÓDULO 2:Identificar as características dos sistemas de banco de dados (SBD)
MÓDULO 3:Descrever a arquitetura dos sistemas de gerência de banco de dados (SGBD)
MÓDULO 1:Reconhecer o histórico dos bancos de dados e suas tecnologias
DEFINIÇÃO DE BANCO DE DADOS
Você certamente já leu sobre o termo banco de dados em algum contexto técnico ou geral na mídia tradicional ou na
internet.
Mas o que é um banco de dados?:O termo banco de dados, no sentido técnico, origina-se de database, do inglês, e o
livro-texto de edição norte-americana mais adotado no mundo o define de maneira simples e direta: “banco de dados é
uma coleção de dados relacionados” (ELMASRI; NAVATHE, 2019), em que dados são fatos conhecidos que podem ser
registrados e possuem significado implícito.
EXEMPLO:Nome, data de nascimento, endereço e telefone são dados relacionados entre si, inerentes a uma pessoa
conhecida em certo contexto. Antes de elaboramos mais essa definição, vamos relembrar um pouco da história dos
bancos de dados.
O conceito de banco de dados como uma coleção de dados relacionados sempre existiu como componente central dos
sistemas de informação. Estes, por sua vez, sempre existiram desde que a humanidade se organizou como sociedade.
Segundo afirmam Melo, Silva e Tanaka (1998), o que tem mudado rapidamente ao longo da história é a tecnologia que
permite a sua implementação e que se confunde com o próprio conceito de sistemas de informação.
Assim, antes da existência do computador, bancos de dados existiam sob a forma de registros físicos em papel,
organizados em pastas dentro de armários, que formavam os arquivos dos sistemas de informação, operados
manualmente pelos seus usuários. Será que ainda existem sistemas de informação desse tipo em pleno século XXI?
EVOLUÇÃO DOS SISTEMAS DE INFORMAÇÃO EM COMPUTADOR
ERA DO PROCESSAMENTO DE DADOS
Historicamente, o computador, inventado na década de 1940 ao fim da Segunda Guerra Mundial, era usado
primordialmente como uma máquina para cálculos matemáticos complexos, a exemplo da máquina diferencial
de Charles Babbage, do século XIX.
CHARLES BABBAGE:Charles Babbage (1791-1871) é um dos mais célebres ícones no mundo da computação. As suas
notáveis contribuições para a área fizeram dele o pioneiro dos computadores. A Máquina Diferencial N. 1 foi a primeira
calculadora automática a ser inventada e ainda é considerada uma peça única pela precisão que na época apresentava.
Logo se percebeu que, graças à arquitetura criada pelo seu inventor, John von Neumann, baseada em uma unidade
central de processamento que armazena programas e dados, o computador também serve para o processamento de
dados e não apenas para cálculos.
JOHN VON NEUMANN:John von Neumann (1903-1957) foi um matemático húngaro, naturalizado norte-americano,
considerado o pai da Teoria dos Jogos. Seus interesses abrangiam lógica, assuntos militares, computação, economia,
entre outros.
Essa utilidade do computador foi impulsionada com a invenção do disco magnético pela IBM, em 1957, que o
denominou de Dispositivo de Armazenamento de Acesso Direto (DASD, do inglês Direct Acess Storage Device).
Fundamentalmente, o que esse dispositivo – atualmente conhecido como disco rígido e pela sigla HD (Hard Disk) –
apresentou de novidade, à época, foi a capacidade de leitura de dados externos à unidade central de processamento de
forma direta, sem a necessidade de leitura sequencial, como em fitas magnéticas.
Com o advento do armazenamento externo em disco rígido, nasceu a era do processamento de dados por computador.
Você já ouviu falar em Centro de Processamento de Dados (CPD), denominação que ainda persiste em organizações
tradicionais?
Nessa era, os programas de aplicação, desenvolvidos em uma linguagem de programação (usualmente COBOL, em
aplicações empresariais, ou Fortran, em aplicações científicas), manipulavam dados armazenados em arquivos
hospedados em disco magnético, utilizados pelo sistema operacional e formando o que se denomina sistema de
arquivos.
A figura a seguir mostra a evolução obtida ao possibilitar que os programas
acessassem os dados externamente em arquivos no disco (configurando um
avanço em relação aos programas que continham internamente os próprios
dados) para execução em lotes (batch, em inglês), na fase inicial do uso do
computador.
Esse modelo de processamento de dados com sistema de arquivos foi
largamente utilizado no início do emprego do computador em sistemas de
informação empresariais, após o advento do disco magnético, persistindo até os dias atuais, nos chamados sistemas
legados. Exemplo disso, foi a maior demanda por programadores da linguagem COBOL durante a pandemia de COVID-
19 para realizar manutenção em sistemas da Administração Pública do governo dos EUA.
SAIBA MAIS:Para saber mais sobre o aumento da procura por programadores COBOL durante a pandemia de COVID-19,
não deixe de verificar a indicação feita no Explore + ao fim deste tema.
PRIMÓRDIOS DOS SISTEMAS DE BANCO DE DADOS
Seguindo na história, o advento dos bancos de dados foi uma evolução natural dos sistemas de arquivos. Observe na
figura anterior que os programas os quais manipulam os arquivos de dados, além de implementarem a lógica da
aplicação, têm de conter um módulo para a gerência dos arquivos de dados. Esse módulo deve ser repetido em todos os
programas que precisam acessar e manipular o mesmo arquivo de dados.
Por exemplo, o departamento de pessoal de uma organização mantém o arquivo com os dados dos empregados.
Suponha que o departamento de produção também precise usar dados desse arquivo para alocar empregados em
projetos. Nesse caso, os programas de aplicação que atendem aos dois departamentos deverão conter o mesmo
módulo de gerência do arquivo de empregados, causando uma repetição de código de programação e dificultando a sua
manutenção.
Assim, os sistemas de banco de dados (SBD) vieram para mitigar esse problema, a partir de 1960, tirando dos programas
de aplicação a responsabilidade de gerenciar os arquivos de dados, tarefa que passou a ser delegada a um software
intermediário, denominado de sistema de gerência de banco de dados (SGBD), como mostra a figura a seguir.
Essa propriedade dos sistemas de banco de dados é denominada
de independência entre dados e programas, uma diferença primordial em
relação aos sistemas de arquivos.
Em outras palavras, ocorreu uma modularização do sistema de informação, com
a distribuição de responsabilidades entre os programas de aplicação e o SGBD.
Os programas de aplicação passaram a se ocupar exclusivamente das funcionalidades da aplicação propriamente dita,
deixando as tarefas de acesso e manipulação dos dados armazenados em disco para o SGBD, um software tipicamente
auxiliar, de bastidores ou, como se costuma dizer no jargão do mercado, um serviço de back end.
ATENÇÃO:Perceba a diferença entre o sistema de banco de dados (SBD) e o sistema de gerência de banco de /dados
(SGBD), pois o primeiro é mais amplo, englobando o SGBD, os próprios programas de aplicação e os bancos de dados
manipulados por eles.
Neste ponto, cabe um questionamento importante, cada vez mais válido em face dos avanços das tecnologias de
hardware de memória, tanto de memória principal (RAM) quanto de memória secundária (discos magnéticos ou hard
disk drives (HDD) e de semicondutores ou solid state drives (SSD)).
A questão é: qual dos três modelos de sistemas é o mais eficiente para uma aplicação com o mesmo volume de dados,
ou seja, o modelo monolítico com dados junto dos programas; o modelo com sistemas de arquivos; ou o modelo com
sistemas de bancos de dados?
Adiaremos a resposta a essa questão para o final deste módulo.
ESTÁGIO ATUAL DOS SISTEMAS DE INFORMAÇÃO (NA WEB)
Antes de discorrer sobre o histórico dos SBDs, vale completar a evolução dos sistemas de informação até os dias atuais,
fortemente influenciada pela revolução tecnológica causada pela World Wide Web no final do século XX.
Com a popularização da interface Web no desenvolvimento das aplicações,
surgiram novas linguagens de programação e novas formas de
armazenamento e acesso a dados em fontes com diferentes formatos. Assim,
o SGBD das aplicações tradicionais pode ser considerado atualmente como um
gênero de software básico, com papel intermediário, que denominamos na
figura a seguir de middleware, em que se incluem servidores de aplicações das
diferentes linguagens e ambientes de desenvolvimento Web.Essa figura resume o atual estágio dos sistemas de
informação na Web, em que as fontes de dados não se restringem a dados estruturados, como em bancos de dados
tradicionais, admitindo volumes gigantescos em diversos formatos, localizações e velocidade de produção,
características marcantes do conceito de Big Data. Igualmente, as aplicações via Web são desenvolvidas em uma
diversidade de plataformas digitais, de smartphones a supercomputadores, que têm em comum a conexão com a
internet e, em consequência, a computação em nuvem (Cloud Computing).
EVOLUÇÃO DOS SISTEMAS DE BANCO DE DADOS
BANCOS DE DADOS NAVEGACIONAIS:Há uma controvérsia sobre qual foi o primeiro SGBD implementado e utilizado
comercialmente na década de 1960. Sabe-se que duas iniciativas independentes ocorreram paralelamente, resultando
em dois produtos comerciais:
IDS (INTEGRATED DATA SYSTEM):Criado por Charles Bachman (1924-2017) no âmbito de um comitê que padronizou a
linguagem COBOL (CODASYL, de Committee on Data Systems Languages).
IMS (INFORMATION MANAGEMENT SYSTEMS):Criado pela IBM na esteira do sucesso da invenção do disco magnético
anos antes.
O IDS e o IMS tinham em comum a característica de que os dados eram acessados por meio de programas que
“navegam” de registro em registro pela estrutura dos dados armazenados em disco. Por causa dessa característica,
atualmente aqueles SGBDs e outros que seguiram a mesma abordagem são denominados de navegacionais.
Observe a diferença entre eles:
IDS:Usava a estrutura de dados de grafos ou redes, daí a denominação de network databases.
IMS:Adotava a estrutura de dados de árvores, que é um tipo de grafo mais restrito do que as redes, baseado em
hierarquias, originando a denominação hierarchical databases.
Vários SGBDs foram implementados com variantes desses modelos de banco de dados, como o DMS (Data Management
System) e o IDMS (Integrated Database Management System). Vale relembrar que muitos sistemas de informação
legados daquela época ainda utilizam esses SGBDs navegacionais, a exemplo da demanda por programadores COBOL
em meio à pandemia de COVID-19.
O MODELO RELACIONAL DE BANCO DE DADOS:A grande revolução na história dos bancos de dados ocorreu na virada
das décadas de 1960 e 1970, com a publicação do artigo seminal do matemático pesquisador da IBM, Edgar Codd,
intitulado A Relational Model of Data for Large Shared Data Banks, que introduziu o modelo relacional de banco de
dados.
O artigo de Codd, uma das obras mais citadas na comunidade da computação em todos os tempos, foi o marco do
chamado modelo relacional de banco de dados, cuja estrutura de dados, diferentemente dos grafos dos bancos de
dados navegacionais, é uma função matemática denominada relação.
EDGAR CODD:Edgar Frank Codd (1923-2003) foi um cientista da computação e matemático americano que inventou o
modelo de dados relacionais, que levou à criação do banco de dados relacional, um método padrão de recuperação e
armazenamento de dados do computador.
Codd criou uma Álgebra Relacional e um Cálculo Relacional, nos quais baseou toda a teoria matemática das relações em
que fundamentou o modelo relacional. Apesar da base teórica do modelo, a estrutura de dados subjacente tem o
mérito de ser muito simples, pois uma relação nada mais é do que uma tabela formada por colunas e linhas, em cujas
células estão armazenados os dados, conceito compreensível pelo senso comum de qualquer leigo em Matemática ou
computação, como podemos ver a seguir.
CARDINALIDADE MÁXIMA 1
Expressa no modelo ao lado da entidade DOCENTE, diz respeito ao par (ALUNO, PROJETO). Um aluno participante de um
projeto pode ser orientado por no máximo um docente.
CARDINALIDADE MÁXIMA N
Expressa no modelo ao lado da entidade ALUNO, diz respeito ao par (DOCENTE, PROJETO). Um docente participante de
um projeto pode orientar diversos alunos.
CARDINALIDADE MÁXIMA N
Expressa no modelo ao lado da entidade PROJETO, diz respeito ao par (ALUNO, DOCENTE). Um aluno e um docente
podem participar de vários projetos.
ATRIBUTO
Entidades e relacionamentos podem ter propriedades, que são especificadas pelos atributos.
[...] Atributo corresponde a um dado que é associado a cada ocorrência de uma entidade ou de um relacionamento.
(HEUSER, 2009)
Vamos especificar algumas propriedades para as entidades CURSO e DISCIPLINA:
Todo curso possui um código único, nome e, opcionalmente, data de criação.
Toda disciplina possui um código único, nome e carga horária.
A Figura 10 apresenta a parte do DER contemplando esses requisitos de dados:
Figura 10 – DER contemplando atributos das entidades
CURSO e DISCIPLINA.
Percebemos que os atributos CODIGOCURSO e
CODIGODISCIPLINA são únicos em suas respectivas entidades.
Na prática, essa unicidade significa que:
Todo curso possui valor para o atributo CODIGOCURSO
diferente dos demais
Toda disciplina possui valor para o atributo CODIGODISCIPLINA diferente das demais
Esse tipo especial de atributo é conhecido por atributo identificador e sua representação gráfica é dada por um traço
com uma das extremidades contendo um círculo preenchido. De acordo com os requisitos de dados, DATADECRIACAO é
um atributo opcional, ou seja, não obrigatório. Sua representação gráfica é dada por um traço com uma das
extremidades contendo um círculo pontilhado. Os demais atributos são obrigatórios.
Cardinalidade em atributo
No DER anterior, ao lado do atributo DATACRIACAO, há um par de cardinalidade com valor (0,1). A cardinalidade 0
expressa que o atributo é opcional. A cardinalidade 1 expressa que o atributo é monovalorado. Cada combinação de
cardinalidade tem um significado especial, conforme Tabela 1:
III e V
I, III e IV
I e II
GABARITO
1. Considere o DER a seguir sobre inscrição em concurso público. Qual
proposição está correta?
A alternativa "C " está correta.
A proposição da alternativa C está correta, pois a informação sobre o número
de vezes em que um CANDIDATO pode fazer inscrição em exames é definido
pela cardinalidade máxima n, expressa ao lado da entidade EXAME.
2. Considere o DER a seguir. Quais proposições estão corretas?
Como desvantagem, o modelo ficou com um visual bastante denso. Por outro lado, é comum modelarmos o objeto alvo
do atributo composto sob o formato de entidade relacionada à entidade principal. Vamos então observar essa mudança
na figura a seguir:
MÓDULO 2
Diferenciar formas normais
NORMALIZAÇÃO
Ao longo da nossa jornada, conhecemos os principais elementos do modelo relacional. Quando trabalhamos com
modelagem das tabelas de um banco de dados, ao criarmos as tabelas, é natural definirmos colunas que têm relação
com as características do objeto sendo modelado.
No entanto, modelar um banco de dados relacional não se resume simplesmente a usar uma ferramenta CASE e
adicionar tabelas e relacionamentos sem que haja algum critério para essa construção.
FERRAMENTA CASE
(de Computer-Aided Software Engineering – Engenharia de Software Apoiada por Computador): software de apoio ao
desenvolvimento de sistemas, desde a análise e modelagem até a programação e testes.
Ao longo deste módulo, estudaremos o assunto normalização, que ajudará a responder se um banco de dados foi bem
projetado. Além disso, é possível executar o processo de normalização a partir de qualquer representação de dados.
Isso significa que podemos iniciar o processo a partir de uma tela de sistema, ou mesmo um relatório.
A normalização é um processo baseado no conceito de forma normal (FN), que pode ser vista como uma regra, a qual
deve ser observada na semântica de uma tabela, para que a considerem bem projetada.
ATENÇÃO
Na literatura de banco de dados, há diversas formas normais: 1FN, 2FN, 3FN, FNBC, 4FN e 5FN. No entanto, para fins
práticos, no contexto da maior parte dos projetos de banco de dados relacionais, costumamos executar o processo de
normalização até a 3FN.
Dividiremos o processo de normalização até a 3FN de acordo com o seguinte roteiro:
Vamos estudar um exemplo?Considere o relatório expresso na figura, que informa os docentes participantes em
projetos de pesquisa de uma instituição de ensino superior (IES):
Figura: Representação
dos dados do relatório
em tabela não
normalizada.
Atenção! Para
visualização completa da
tabela utilize a rolagem
horizontal
A representação textual
da tabela está expressa a
seguir:
Figura: Representação
dos dados da tabela
PROJETODOCENTE.
Se analisarmos a relação
CODIGOPROJETO,
CODIGODOCENTE →
NOME, iremos perceber
que NOME é dependente
somente de
CODIGODOCENTE, ou
seja, não é necessária a
existência do par
CODIGOPROJETO, CODIGODOCENTE para determinar o nome do docente. Estamos diante de uma dependência
funcional parcial, visto que identificamos uma coluna dependente somente de parte da chave primária composta.
SEGUNDA FORMA NORMAL (2FN)
Uma tabela está na 2FN, caso esteja na 1FN e não haja dependências funcionais parciais.
Se analisarmos com um pouco mais de atenção cada coluna não chave da tabela PROJETODOCENTE, iremos perceber
que, além da coluna NOME, as colunas CATEGORIA e SALARIO também só dependem da coluna CODIGODOCENTE.
Para ficar de acordo com a 2FN, será necessário eliminarmos as dependências parciais, conforme os passos a seguir:
Manter no modelo cada tabela que possua chave primária simples;
Identificar cada dependência parcial;
Criar uma tabela para cada dependência parcial identificada.
A figura a seguir identifica as colunas dependentes de parte da chave primária na tabela PROJETODOCENTE:
PROJETODOCENTE
DOCENTE
Com isso, dizemos que a coluna CATEGORIA é determinante da coluna SALARIO. Podemos
dizer também que SALARIO é dependente de CATEGORIA.
ATENÇÃO
Estamos diante de um exemplo de dependência funcional, em que o determinante é uma coluna que não pertence à
chave primária da tabela.
Uma dependência funcional transitiva ocorre quando uma coluna é dependente de alguma coluna não-chave da tabela.
TERCEIRA FORMA NORMAL (3FN)
Uma tabela está em 3FN caso esteja na 2FN e não possua dependências transitivas.
A figura a seguir identifica a dependência transitiva na tabela PROJETODOCENTE:
Fonte: AutorFigura: Representação da dependência
transitiva na tabela PROJETODOCENTE.
Para ficar de acordo com a 3FN, será necessário
eliminarmos as dependências transitivas, conforme os passos a seguir:
Manter no modelo cada tabela que tenha menos de duas colunas não chave;
Identificar cada dependência transitiva;
Criar uma tabela para cada dependência transitiva identificada.
Ao aplicarmos os passos ao modelo, teremos como resultado as seguintes tabelas na 3FN:
PROJETO
PROJETODOCENTE
DOCENTE
CATEGORIA
MAPEAMENTO DE RELACIONAMENTOS
O mapeamento de relacionamentos dependerá da cardinalidade
máxima:
RELACIONAMENTOS 1:1:
Cardinalidade (0,1):(0,1): priorizar adição de coluna(s). Alternativa: tabela própria.
Cardinalidade (0,1):( 1,1): priorizar fusão de tabelas. Alternativa: adição de colunas.
Cardinalidade (1,1):( 1,1): fusão de tabelas.
RELACIONAMENTOS 1:N:
Identificar a tabela T do lado N.
Adicionar chave estrangeira na tabela T do lado N referente à chave primária da tabela do lado 1.
Cada atributo simples do relacionamento vira uma coluna na tabela T.
RELACIONAMENTOS N:N:
Cada relacionamento vira uma tabela T.
A tabela T possuirá chaves estrangeiras originadas das chaves primárias das tabelas participantes do relacionamento.
A tabela T possuirá chave primária composta pelas chaves estrangeiras criadas no passo anterior.
Cada atributo simples do relacionamento vira uma coluna na tabela T.
RELACIONAMENTOS N-ÁRIOS (ANÁLOGO A RELACIONAMENTOS N:N):
Cada relacionamento vira uma tabela T.
A tabela T possuirá chaves estrangeiras originadas das chaves primárias das tabelas participantes do relacionamento.
A tabela T possuirá chave primária composta pelas chaves estrangeiras criadas no passo anterior.
Cada atributo simples do relacionamento vira uma coluna na tabela T.
EXEMPLOS DE MAPEAMENTO DE RELACIONAMENTO 1:1:
Conhecidas as regras para o mapeamento de relacionamentos 1:1, observe no exemplo a seguir um diagrama de
entidade e relacionamento (DER) contendo duas entidades: FUNCIONARIO e NOTEBOOK. Há um relacionamento 1:1 no
qual ambas as entidades possuem participação opcional (cardinalidades (0,1): (0,1)):
Fonte: AutorFigura:
Tabelas criadas com base
no mapeamento
conceitual-lógico
envolvendo relacionamento 1:1 - ambas as entidades com participação opcional.
Para esse tipo de relacionamento, o mais adequado é priorizar adição de coluna(s), o que ocorreu ao criarmos a coluna
CODIGONOTEBOOK como chave estrangeira na tabela FUNCIONARIO. Vale lembrar que estamos diante de uma coluna
opcional.
A seguir, a representação textual do modelo:
A figura a seguir apresenta um DER contendo um relacionamento 1:1 no qual há uma entidade com participação
obrigatória e a outra opcional (cardinalidades (0,1): (1,1)):
Fonte: AutorFigura DER contendo relacionamento 1:1 – uma entidade com participação obrigatória e a outra opcional.
A figura a seguir exibe o modelo lógico gerado:
A figura a seguir apresenta um DER parcial contendo um relacionamento 1:1 e ambas as entidades com participação
obrigatória (cardinalidades (1,1): (1,1)):
Fonte: AutorFigura: DER parcial contendo relacionamento 1:1 – ambas as entidades com participação obrigatória.
A figura a seguir exibe o modelo lógico gerado:
Fonte:
AutorFigura:
Tabelas criadas
com base no
mapeamento
conceitual-lógico envolvendo relacionamento 1:N.
Para esse tipo de relacionamento, foi utilizada adição de coluna(s) na tabela do lado N, o que ocorreu ao criarmos a
chave estrangeira CODIGONIVEL na tabela CURSO.
Após a aplicação das regras de mapeamento, foi gerada a representação textual a seguir:
Fig
ura: Tabelas criadas com base no mapeamento conceitual-lógico envolvendo relacionamento N:N
Para esse tipo de relacionamento, foi utilizada tabela própria, o que ocorreu ao criarmos CURSODISCIPLINA, contendo
duas chaves estrangeiras: CODIGOCURSO e CODIGODISCIPLINA. Ao mesmo tempo, a combinação das duas colunas
forma a chave primária composta da tabela.
Após a aplicação das regras de mapeamento, foi
gerada a representação textual a seguir:
MAPEAMENTO DE ATRIBUTOS
MULTIVALORADOS
O mapeamento de atributos multivalorados
envolve:
Criar uma tabela T para cada atributo
multivalorado.
Criar coluna(s) para o(s) atributo(s) multivalorado(s).
A tabela T possuirá chave estrangeira originada da chave primária da tabela original.
A tabela T possuirá chave primária composta pela chave estrangeira criada no passo anterior e pela(s) coluna(s)
referente(s) ao(s) atributo multivalorado(s).
A figura a seguir mostra um DER parcial contendo atributo multivalorado.
A figura a seguir exibe o modelo lógico gerado após a aplicação da solução II das regras de mapeamento:
Figura: Tabelas criadas com base no mapeamento conceitual-lógico envolvendo especialização/generalização – solução
II.
No exemplo, foram criadas três tabelas: uma (FUNCIONARIO) referente à entidade genérica. As restantes, DOCENTE e
ANALISTA, referentes às entidades especializadas em questão. Cada CODIGOFUNCIONARIO presente nas tabelas
DOCENTE e ANALISTA exerce o papel de chave estrangeira.
Após a aplicação das regras de mapeamento, foi gerada a representação textual a seguir:
A figura a seguir exibe o modelo lógico gerado após a aplicação da solução III das regras de mapeamento:
Fig
ura: Tabelas criadas com base no mapeamento conceitual-lógico envolvendo especialização/generalização – solução III.
No exemplo, foram criadas três tabelas, sendo OUTROSFUNCIONARIOS onde devem ser mantidos funcionários que não
sejam docentes nem analistas. As restantes, DOCENTE e ANALISTA, são referentes às entidades especializadas em
questão.
Após a aplicação das regras de mapeamento, foi gerada a
representação textual a seguir:
PARA CONSTRUIR O PROJETO LÓGICO A PARTIR DO DER, É CORRETO AFIRMAR QUE SERÃO CRIADAS:
Duas tabelas.
Três tabelas.
Quatro tabelas.
Cinco tabelas.
Parte inferior do formulário
GABARITO
1. Considere um relacionamento entre TURMA e DISCIPLINA (N:N) denominado OFERTA. Para cada disciplina ofertada
por uma turma é necessário saber o número de vagas. Qual alternativa a seguir representa corretamente o modelo
lógico derivado do modelo conceitual?
A alternativa "C " está correta.
Diante da cardinalidade máxima N:N, a solução é criar três tabelas: duas para as entidades participantes e uma para o
relacionamento. O atributo que representa o número de vagas, pelo fato de fazer parte do relacionamento, deve ser
modelado na tabela OFERTA.
2. Considere o projeto conceitual parcial a seguir:
Fonte: Autor
Para construir o projeto lógico a partir do DER, é correto afirmar que serão criadas:
A alternativa "C " está correta.
No mapeamento lógico-conceitual, cada entidade vira tabela. O mesmo ocorrerá no LA, por ter cardinalidade máxima
N:N. O relacionamento EL, por ter cardinalidade máxima 1:N será implementado na tabela LIVRO.
MÓDULO 4
Identificar os aspectos físicos para implementação do modelo no SGBD
CONSULTAS
A partir de agora, conheceremos diretrizes que devem ser consideradas quando formos implementar um banco de
dados relacional. As diretrizes abrangem aspectos que influenciam no desempenho do banco de dados. Assim, o projeto
lógico pode sofrer ajustes para adaptar-se ao sistema gerenciador de banco de dados (SGBD) escolhido para a
implementação.
Planejar um banco de dados que tenha um bom desempenho pressupõe adquirir conhecimento sobre as consultas e
transações que serão realizadas pela aplicação.
Um SGBD tipicamente processa e devolve dados requisitados em consultas para diversas finalidades, tais como
recuperação, inclusão, exclusão ou mesmo atualização de dados. As consultas são implementadas com o auxílio da
linguagem SQL (do Inglês, Structured Query Language – linguagem de consulta estruturada).
DICA
Um código típico de consulta para recuperar dados em SQL envolve o comando SELECT com as
cláusulas FROM e WHERE.
Por exemplo, dada a tabela DOCENTE (CODIGODOCENTE, NOME, SEXO), o código a seguir recupera os registros de todas
as professoras:
A primeira linha do comando informa ao SGBD as colunas que devem ser exibidas após
o processamento da consulta. Na segunda, especificamos o nome da tabela que contém
os dados. Finalmente, na terceira linha, adicionamos uma condição de filtro que será
processada pelo SGBD para recuperar as linhas de interesse.
TRANSAÇÕES
Diversos SGBDs modernos permitem a especificação de operações de transação.
Uma transação corresponde a uma série de operações que, quando submetidas ao SGBD, devem ser consideradas como
uma unidade lógica de trabalho. Isso significa que todas as operações que compõem uma transação precisam ser
executadas. Caso contrário, é necessário serem canceladas e nenhuma modificação ocorrerá no banco de dados.
Por exemplo, em um processo de inscrição em disciplinas, em geral, o aluno tem a liberdade para compor seu quadro de
horário de disciplinas, para, em seguida, confirmar inscrição em diversas matérias. Assim, a inscrição em disciplinas deve
ser considerada como um único processo ou transação. Trata-se de um procedimento atômico: ou todas as operações
são confirmadas ou nenhuma delas é realizada.
INDEXAÇÃO EM BANCO DE DADOS
O desempenho de consultas é um assunto vasto que faz uso de diversas estratégias de acesso a dados, semelhantes às
utilizadas em nosso dia a dia.
Por exemplo, ao buscarmos por determinada informação em algum livro, para ganharmos tempo, é comum primeiro
consultar o índice remissivo do livro, que indicará a página onde se localiza o termo buscado.
ATENÇÃO
Em banco de dados, índices funcionam como estruturas auxiliares utilizadas para tornar mais eficiente a recuperação de
registros em resposta a determinadas condições de busca.
Normalmente, ao projetamos uma tabela com chave primária, os registros de dados são gravados em disco sem
nenhum critério de ordenação das linhas da tabela. Para facilitar a consulta pelo valor da chave primária, o SGBD cria
uma estrutura de índice para a chave primária de cada tabela.
A estrutura de índice poderá ser utilizada pelo SGBD caso seja necessário realizar consulta que envolva, por exemplo,
uma condição de igualdade na coluna de chave primária da tabela. Quando isso ocorre, o desempenho da consulta em
geral é melhor do que caso não existisse a estrutura de índice.
EXEMPLO PRÁTICO ENVOLVENDO INDEXAÇÃO:
Visando ressaltar a importância dos índices, realizamos um pequeno experimento, que consiste em submeter duas
consultas ao SGBD, uma sem índice, e a segunda com uma coluna indexada.
Vamos perceber que, quando o SGBD processa uma consulta com o auxílio de um índice, o tempo de resposta tende a
ser mais otimizado se comparado à execução da mesma consulta sem esse recurso.
Suponha então a existência de uma tabela DM_DOCENTE (CO_IES, NO_IES, CO_DOCENTE_IES,
CO_MUNICIPIO_NASCIMENTO) - apresentada aqui com quatro colunas para fins de exemplo – originalmente, extraída
do Censo da Educação Superior Brasileira de 2016.
A tabela contém 367.980 registros. Cada registro corresponde a um docente vinculado a uma instituição de ensino
superior (IES). Ainda, originalmente, os registros de DM_DOCENTE estão fisicamente ordenados pela coluna CO_IES e a
tabela não possui chave primária definida.
Nosso objetivo é recuperar todas as colunas da tabela, referentes ao docente que possui o valor 850516 para a coluna
CO_DOCENTE_IES.
O comando SQL executado na consulta I a seguir, serve para esse propósito:
VERIFICANDO O APRENDIZADO
Parte superior do formulário
1. ACERCA DO SGBD POSTGRESQL, ASSINALE A PROPOSIÇÃO VERDADEIRA.
O PostgreSQL é um SGBD comercial de código fechado, disponível apenas para ambiente Windows.
O PostgreSQL é um SGBD de código aberto, com versões compatíveis com diversos sistemas operacionais, tais como
Windows, MAC OS e diversas distribuições Linux.
O PostgreSQL é um SGBD puramente orientado a objeto.
O PostgreSQL é um SGBD puramente relacional.
Parte inferior do formulário
Parte superior do formulário
2. ANALISE AS SEGUINTES PROPOSIÇÕES A RESPEITO DO POSTGRESQL:
I - O COMANDO “CREATE USER BTESTE SUPERUSER INHERIT CREATEDB CREATEROLE; ” CRIA UM BANCO DE DADOS
DENOMINADO BTESTE.
II - AO INSTALAR O POSTGRESQL VERSÃO 12 NO WINDOWS, A PASTA PADRÃO DE INSTALAÇÃO É “C:/PROGRAM
FILES/POSTGRESQL/12”.
III - O COMANDO “CREATE TABLE CLIENTE (CODIGOC INT NOT NULL, NOME CHAR(80), CONSTRAINT CHAVECLIENTE
PRIMARY KEY (CODIGOC));” CRIA UMA TABELA DENOMINADA CLIENTE COM AS COLUNAS CODIGOC E NOME, SENDO
QUE A COLUNA CODIGOC É CHAVE ESTRANGEIRA.
De fato, o PostgreSQL é um SGBD livre e está disponível para funcionamento em diversas plataformas de sistemas
operacionais.
2. Analise as seguintes proposições a respeito do PostgreSQL:
I - O comando “create user bteste superuser inherit createdb createrole; ” cria um banco de dados denominado bteste.
II - Ao Instalar o PostgreSQL versão 12 no Windows, a pasta padrão de instalação é “C:/Program Files/PostgreSQL/12”.
III - O comando “create table cliente (codigoc int not null, nome char(80), constraint chavecliente primary key
(codigoc));” cria uma tabela denominada cliente com as colunas codigoc e nome, sendo que a coluna codigoc é chave
estrangeira.
O comando expresso na primeira proposição cria um usuário denominado bteste, e não um banco de dados. O comando
expresso na terceira proposição cria uma tabela denominada cliente. No entanto, a coluna codigoc é chave primária, e
não chave estrangeira.
MÓDULO 2
RESTRIÇÃO aponta alguma propriedade associada à coluna em questão. Por exemplo, podemo
A sintaxe completa a respeito do comando CREATE TABLE no PostgreSQL pode ser encontrada no site oficial do PostgreSQL.
serial gera valor único inteiro sequencial para um novo registro entre 1 e 2.147.483.647
varchar(comprimento) útil para sequência de dados de caracteres com comprimento variável. Não armazena espaços
Fonte: O autor
A tabela NIVEL está especificada no bloco de comandos entre as linhas 2 e 6. As duas colunas da tabela são obrigatórias.
A tabela CURSO está especificada no bloco de comandos entre as linhas 8 e 15. As colunas DATACRIACAO e CODIGONIVEL s
outro momento, ser associado à informação que caracteriza o nível dele.
FONTE: O AUTOR
A execução completa do script cria três tabelas e todas as colunas são obrigatórias.
A execução dos comandos entre as linhas 1 e 16 cria três tabelas relacionadas.
A execução dos comandos entre as linhas 18 e 24 cria três relacionamentos.
A execução dos comandos entre as linhas 18 e 24 cria dois relacionamentos: o primeiro envolve as tabelas
CURSODISCIPLINA e CURSO. O segundo, as tabelas CURSODISCIPLINA e DISCIPLINA.
Parte inferior do formulário
Parte superior do formulário
2. ANALISE O MODELO A SEGUIR E ASSINALE A PROPOSIÇÃO VERDADEIRA:
FONTE: O AUTOR
A execução do script a seguir cria a tabela CURSODISCIPLINA e seus relacionamentos.
CREATE TABLE CURSODISCIPLINA (
CODIGOCURSO int NOT NULL,
CODIGODISCIPLINA int NOT NULL,
CONSTRAINT CURSODISCIPLINA_pk (PRIMARY KEY (CODIGOCURSO,CODIGODISCIPLINA));
A execução do script a seguir cria a tabela DISCIPLINA.
CREATE TABLE CURSO (
CODIGOCURSO int NOT NULL,
NOME char(90)NOT NULL,
DATACRIACAO date NULL,
CONSTRAINT CURSO_pk (PRIMARY KEY (CODIGOCURSO));
Admitindo a existência das tabelas CURSODISCIPLINA e DISCIPLINA, a execução do script a seguir relaciona
CURSODISCIPLINA à DISCIPLINA.
ALTER TABLE CURSODISCIPLINA ADD FOREIGN KEY (CODIGOCURSO)
REFERENCES CURSO (CODIGOCURSO) ;
Admitindo a existência das tabelas CURSODISCIPLINA e CURSO, a execução do script a seguir relaciona
CURSODISCIPLINA à CURSO.
ALTER TABLE CURSODISCIPLINA ADD FOREIGN KEY (CODIGOCURSO)
REFERENCES CURSO (CODIGOCURSO)
Parte inferior do formulário
GABARITO
1. Analise o script a seguir e assinale a proposição verdadeira:
Fonte: O autor
A alternativa "D " está correta.
De fato, há dois blocos de comando entre as linhas 18 e 24. O primeiro altera a estrutura da tabela CURSODISCIPLINA
adicionando à coluna CODIGOCURSO uma restrição de chave estrangeira que implementa o relacionamento entre as
tabelas CURSODISCIPLINA e CURSO. O segundo altera a estrutura da tabela CURSODISCIPLINA, adicionando à coluna
CODIGODISCIPLINA uma restrição de chave estrangeira que implementa o relacionamento entre as tabelas
CURSODISCIPLINA e DISCIPLINA.
2. Analise o modelo a seguir e assinale a proposição verdadeira:
Fonte: O autor
A alternativa "D " está correta.
Fonte: Autor
O modelo é útil para gerenciar os dados de cursos, disciplinas e do relacionamento entre esses objetos. Em especial,
cada linha da tabela CURSODISCIPLINA representa uma associação entre curso e disciplina.
INSERÇÃO DE LINHAS EM TABELA
A inserção de linhas em tabela é realizada com o auxílio do comando INSERT da SQL. Sua sintaxe básica está expressa a
seguir:
INSERT INTO <NOMETABELA> (COLUNA1, COLUNA2,…,COLUNAn) VALUES (VALOR1, VALOR2,…,VALORn);
Na sintaxe, <NOMETABELA> representa a tabela alvo da inserção. Em seguida, são declaradas as colunas que receberão
os dados; por último, os dados em si. Note que deve haver uma correspondência entre cada par COLUNA/VALOR, ou
seja, o conteúdo de cada coluna deve ser compatível com o tipo de dados ou domínio dela.
A sintaxe completa a respeito do comando INSERT pode ser encontrada no site oficial do PostgreSQL.
Vamos estudar um exemplo?
Iremos cadastrar quatro cursos. O comando SQL a seguir pode ser utilizado:
INSERT INTO CURSO (CODIGOCURSO,NOME,DATACRIACAO)
VALUES( 1,'Sistemas de Informação','19/06/1999');
INSERT INTO CURSO (CODIGOCURSO,NOME,DATACRIACAO)
VALUES( 2,'Medicina','10/05/1990');
INSERT INTO CURSO (CODIGOCURSO,NOME,DATACRIACAO)
VALUES( 3,'Nutrição','19/02/2012');
INSERT INTO CURSO (CODIGOCURSO,NOME,DATACRIACAO)
VALUES( 4,'Pedagogia','19/06/1999');
ATENÇÃO
Note que, dentro dos parênteses representativos dos conteúdos, o primeiro valor, por ser do tipo inteiro, foi informado
sem aspas. Já o segundo valor, por ser do tipo char, foi informado com aspas. Finalmente, o valor referente ao tipo date
também foi informado entre aspas. Internamente, o PostgreSQL converte o texto para o formato de data.
Agora, faremos um procedimento semelhante, cadastrando quatro disciplinas. O comando SQL a seguir pode ser
utilizado:
INSERT INTO DISCIPLINA (CODIGODISCIPLINA,NOME,CARGAHORARIA)
VALUES( 1,''Leitura e Produção de Textos',60);
INSERT INTO DISCIPLINA (CODIGODISCIPLINA,NOME,CARGAHORARIA)
VALUES( 2,''Redes de Computadores',60);
INSERT INTO DISCIPLINA (CODIGODISCIPLINA,NOME,CARGAHORARIA)
VALUES( 3,'Computação Gráfica',40);
INSERT INTO DISCIPLINA (CODIGODISCIPLINA,NOME,CARGAHORARIA)
VALUES( 4,'Anatomia',60);
Agora, vamos registrar na tabela CURSODISCIPLINA algumas associações entre cursos e disciplinas. O comando SQL a
seguir pode ser utilizado:
INSERT INTO CURSODISCIPLINA(CODIGOCURSO,CODIGODISCIPLINA) VALUES (1,1);
INSERT INTO CURSODISCIPLINA(CODIGOCURSO,CODIGODISCIPLINA) VALUES (1,2);
INSERT INTO CURSODISCIPLINA(CODIGOCURSO,CODIGODISCIPLINA) VALUES (1,3);
INSERT INTO CURSODISCIPLINA(CODIGOCURSO,CODIGODISCIPLINA) VALUES (2,1);
INSERT INTO CURSODISCIPLINA(CODIGOCURSO,CODIGODISCIPLINA) VALUES (2,3);
INSERT INTO CURSODISCIPLINA(CODIGOCURSO,CODIGODISCIPLINA) VALUES (3,1);
INSERT INTO CURSODISCIPLINA(CODIGOCURSO,CODIGODISCIPLINA) VALUES (3,3);
E se submetermos ao SGBD o comando a seguir?
INSERT INTO CURSODISCIPLINA(CODIGOCURSO,CODIGODISCIPLINA) VALUES (3,30);
RESPOSTA
O SGBD não realizará a inserção e retornará uma mensagem de erro informando que 30 não é um valor previamente
existente na chave primária da tabela DISCIPLINA. Isso acontece porque, quando definimos (linha 16 do script da seção
anterior) a chave estrangeira da tabela CURSODISCIPLINA, nós delegamos ao SGBD a tarefa de realizar esse tipo de
validação com objetivo de sempre manter a integridade dos dados do banco de dados. Note que não existe disciplina
identificada de código 30 na tabela DISCIPLINA.
MECANISMO DE CHAVE PRIMÁRIA EM AÇÃO
Já vimos que o SGBD é responsável por manter a integridade dos dados ao longo de todo o ciclo de vida do banco de
dados. A consequência disso pode ser percebida ao tentarmos executar (novamente) o comando a seguir:
INSERT INTO DISCIPLINA (CODIGODISCIPLINA, NOME, CARGAHORARIA) VALUES (4,'Anatomia',60);
Como já existe um registro com valor de CODIGODISCIPLINA igual a 4, o SGBD exibirá mensagem de erro informando
que o referido valor já existe no banco de dados. Semelhantemente, devemos lembrar que todo valor de chave primária
é obrigatório.
Vamos agora tentar inserir uma disciplina sem valor para CODIGODISCIPLINA, conforme comando SQL a seguir:
INSERT INTO DISCIPLINA (CODIGODISCIPLINA, NOME, CARGAHORARIA) VALUES (NULL,'Biologia Celular e Molecular',60);
O SGBD exibirá mensagem de erro informando que o valor da coluna CODIGODISCIPLINA não pode ser nulo.
ATUALIZAÇÃO DE LINHAS EM TABELA
A atualização de linhas em tabela é realizada com o auxílio do comando UPDATE da SQL. Sua sintaxe básica está
expressa a seguir:
UPDATE <NOMETABELA>
SET COLUNA1=VALOR1, COLUNA2=VALOR2,…,COLUNAn=VALORn
WHERE <CONDIÇÃO>;
Na sintaxe, <NOMETABELA> representa a tabela alvo da atualização. Em seguida, é declarada uma lista contendo a
coluna e o seu respectivo valor novo. Por último, uma condição lógica, caso seja necessário. Isso ocorre porque, em
geral, estamos interessados em alterar somente um subconjunto de linhas que é obtido a partir do processamento da
cláusula WHERE. A sintaxe completa a respeito do comando UPDATE pode ser encontrada no site oficial do PostgresSQL.
Vamos estudar alguns exemplos?
Alteraremos para 70 a carga horária da disciplina Redes de Computadores. Para isso, basta executar o comando a
seguir:
UPDATE DISCIPLINA SET CARGAHORARIA=70 WHERE CODIGODISCIPLINA=2;
No comando, o SGBD busca na tabela a disciplina cujo valor da coluna CODIGODIISCIPLINA seja igual a 2. Em seguida,
atualiza o valor da coluna CARGAHORARIA para 70. Note também que poderíamos ter executado o comando a seguir:
UPDATE DISCIPLINA SET CARGAHORARIA=70 WHERE NOME='Redes de Computadores';
Suponha agora que houve a necessidade de alterar em 20% a carga horária de todas as disciplinas cadastradas no banco
de dados. Podemos executar o seguinte comando:
UPDATE DISCIPLINA SET CARGAHORARIA=CARGAHORARIA*1.2;
Note que, no último comando, não foi necessária a cláusula WHERE, visto que o nosso interesse era o de atualizar todas
as linhas da tabela DISCIPLINA. Ainda, para obter o novo valor, nós utilizamos a expressão CARGAGORARIA*1.2.
Fonte: TierneyMJ/Shutterstock
ATUALIZAÇÃO DE COLUNA CHAVE PRIMÁRIA
Devemos ter especial cuidado ao planejarmos alterar o valor de coluna com o papel de chave primária em uma tabela.
Vamos supor que seja necessário alterar para 6 o valor de CODIGOCURSO referente ao curso de Pedagogia. Podemos,
então, executar o comando a seguir:
UPDATE CURSO SET CODIGOCURSO=6 WHERE CODIGOCURSO=4;
Perceba que o SGBD processará a alteração, visto que não há vínculo na tabela CURSODISCIPLINA envolvendo este
curso. No entanto, o que aconteceria se tentássemos alterar para 10 o valor de CODIGOCURSO referente ao curso de
Sistemas de Informação?
Seguindo a mesma linha de raciocínio da última alteração, vamos submeter o comando a seguir:
UPDATE CURSO SET CODIGOCURSO=10 WHERE CODIGOCURSO=1;
ATENÇÃO
O SGBD não realizará a alteração e retornará uma mensagem de erro indicando que o valor 1 está registrado na tabela
CURSODISCIPLINA, coluna CODIGOCURSO. Isso significa que, se o SGBD aceitasse a alteração, a tabela CURSODISCIPLINA
ficaria com dados inconsistentes, o que não deve ser permitido.
Assim, de modo semelhante ao que aprendemos na seção Mecanismo de chave primária em ação, deixaremos o SGBD
realizar as alterações necessárias para manter a integridade dos dados. Vamos, então, submeter o comando a seguir:
ALTER TABLE CURSODISCIPLINA
DROP CONSTRAINTCURSODISCIPLINA_CURSO,
ADD CONSTRAINT CURSODISCIPLINA_CURSO
FOREIGN KEY (CODIGOCURSO) REFERENCES CURSO (CODIGOCURSO)
ON UPDATE CASCADE ;
O que fizemos? Usamos o comando ALTER TABLE para alterar a estrutura da tabela CURSODISCIPLINA:, removemos a
chave estrangeira (comando DROP CONSTRAINT) e, por último, recriamos a chave (ADD CONSTRAINT), especificando a
operação de atualização (UPDATE) em cascata.
Assim, após o processamento da alteração anterior, podemos então submeter o comando, conforme a seguir:
UPDATE CURSO SET CODIGOCURSO=10 WHERE CODIGOCURSO=1;
REMOÇÃO DE LINHAS EM TABELA
A remoção de linhas em tabela é realizada com o auxílio do comando DELETE da SQL. Sua sintaxe básica está expressa a
seguir:
DELETE FROM <NOMETABELA>
WHERE <CONDIÇÃO>;
Na sintaxe, <NOMETABELA> representa a tabela alvo da operação de deleção de linha(s). Por último, há uma condição
lógica, caso seja necessário. Isso ocorre porque, em geral, estamos interessados em remover somente um subconjunto
de linhas que é obtido a partir do processamento da cláusula WHERE. A sintaxe completa a respeito do comando
DELETE pode ser encontrada no site oficial do PostgresSQL.
Vamos estudar alguns exemplos?
Suponha que temos interesse em apagar do banco de dados a disciplina de Anatomia. Podemos, então, submeter o
código a seguir:
DELETE FROM DISCIPLINA WHERE CODIGODISCIPLINA=4;
O SGBD localiza na tabela DISCIPLINA a linha cujo conteúdo da coluna CODIGODISCIPLINA seja igual a 1. Em seguida,
remove do banco de dados a linha em questão.
Agora vamos imaginar que tenha surgido a necessidade de remover do banco de dados a disciplina de Leitura e
Produção de Textos. Podemos, então, submeter o código a seguir:
DELETE FROM DISCIPLINA WHERE CODIGODISCIPLINA=1;
O SGBD não realizará a remoção e retornará uma mensagem de erro indicando que o valor 1 está registrado na tabela
CURSODISCIPLINA, coluna CODIGODISCIPLINA. Se o SGBD aceitasse a remoção, a tabela CURSODISCIPLINA ficaria com
dados inconsistentes, o que não deve ser permitido.
Assim, de modo semelhante ao que aprendemos na seção Mecanismo de chave primária em ação, deixaremos o SGBD
realizar as alterações necessárias para manter a integridade dos dados. Vamos, então, submeter o comando a seguir:
ALTER TABLE CURSODISCIPLINA
DROP CONSTRAINT CURSODISCIPLINA_DISCIPLINA,
ADD CONSTRAINT CURSODISCIPLINA_DISCIPLINA
FOREIGN KEY (CODIGODISCIPLINA) REFERENCES DISCIPLINA (CODIGODISCIPLINA)
ON DELETE CASCADE ;
O que fizemos? Usamos o comando ALTER TABLE para alterar a estrutura da tabela CURSODISCIPLINA:, removemos a
chave estrangeira (comando DROP CONSTRAINT) e, por último, recriamos a chave (ADD CONSTRAINT), especificando
operação de remoção (DELETE) em cascata.
Assim, após o processamento da alteração anterior, podemos submeter o comando conforme a seguir:
DELETE FROM DISCIPLINA WHERE CODIGODISCIPLINA=1;
Ao processar o comando, o SGBD verifica se existe alguma linha da tabela CURSODISCIPLINA com valor 1 para a coluna
CODIGODISCIPLINA. Caso encontre, cada ocorrência é então removida do banco de dados.
E se quiséssemos eliminar todos os registros de todas as tabelas do banco de dados?
RESPOSTA
Para realizarmos esta operação, precisaremos identificar quais tabelas são mais independentes e quais são as que
possuem vínculos de chave estrangeira.
No caso do nosso exemplo, CURSODISCIPLINA possui duas chaves estrangeiras, portanto, é a tabela mais dependente.
As demais, não possuem chave estrangeira. De posse dessa informação, podemos submeter os comandos a seguir para
completar a tarefa:
DELETE FROM CURSODISCIPLINA;
DELETE FROM CURSO;
DELETE FROM DISCIPLINA;
Perceba que a primeira tabela que foi usada no processo de remoção de linhas foi a CURSODISCIPLINA, pois essa é a
responsável por manter as informações sobre o relacionamento entre as tabelas CURSO e DISCIPLINA. Após eliminar os
registros de CURSODISCIPLINA, o SGBD removerá com sucesso os registros das tabelas CURSO e DISCIPLINA.
Ao longo deste módulo, aprendemos os comandos básicos da linguagem SQL, os quais são úteis para a manipulação de
linhas no SGBD PostgreSQL. Também estudamos comandos para inserir, alterar e eliminar linhas em tabelas.
COMANDOS DE MANIPULAÇÃO DE DADOS
VERIFICANDO O APRENDIZADO
Parte superior do formulário
1. ANALISE O SCRIPT A SEGUIR E ASSINALE A PROPOSIÇÃO CORRETA:
FONTE: O AUTOR
Após a execução com sucesso do trecho entre as linhas 1 e 16, se executarmos o comando expresso na linha 18, o SGBD
retornará uma mensagem de erro.
Após a execução com sucesso do trecho entre as linhas 1 e 16, se executarmos o comando expresso na linha 25, o SGBD
retornará uma mensagem de erro.
Após a execução com sucesso do trecho entre as linhas 1 e 16, se executarmos o comando expresso na linha 26, o SGBD
não retornará uma mensagem de erro.
Após a execução com sucesso do trecho entre as linhas 1 e 16, se executarmos o comando expresso na linha 25, o SGBD
não retornará uma mensagem de erro.
Parte inferior do formulário
Parte superior do formulário
2. ANALISE O SCRIPT A SEGUIR E ASSINALE A PROPOSIÇÃO CORRETA:
FONTE: O AUTOR
APÓS A EXECUÇÃO, COM SUCESSO, DO TRECHO ENTRE AS LINHAS 1 E 26, SE EXECUTARMOS O COMANDO EXPRESSO NA
LINHA 28, QUANTAS LINHAS SERÃO REMOVIDAS DO SGBD?
Nenhuma.
Uma.
Duas.
Três.
Parte inferior do formulário
GABARITO
1. Analise o script a seguir e assinale a proposição correta:
Fonte: O autor
A alternativa "B " está correta.
De fato, se observarmos as inserções em CURSO e DISCIPLINA, vamos perceber que os valores de chave primária são os
inteiros 1 e 2 em ambos os casos. Ainda, a tabela CURSODISCIPLINA possui duas chaves estrangeiras: uma referência à
tabela CURSO; a outra, referência à tabela DISCIPLINA. Portanto, o valor para CÓDIGODISCIPLINA da tabela
CURSODISCIPLINA não pode ser diferente de 1 ou 2.
2. Analise o script a seguir e assinale a proposição correta:
Fonte: O autor
Após a execução, com sucesso, do trecho entre as linhas 1 e 26, se executarmos o comando expresso na linha 28,
quantas linhas serão removidas do SGBD?
A alternativa "D " está correta.
De fato, a chave estrangeira declarada na linha 15 foi criada de maneira a permitir a deleção em cascata. Ao executar o
comando da linha 28, o SGBD eliminará tanto os dois registros da tabela CURSODISCIPLINA (cujo valor de
CODIGOCURSO é igual a 1) quanto o registro referente ao curso Sistemas de Informação.
MÓDULO 4
Falha do computador
Consistência A transação deve levar o banco de dados de um estado consistente para outro
Isolamento A execução de uma transação não deve ser interferida por quaisquer outras transações
Fonte: O autor
Após o processamento do comando da linha 1, visualizaremos o conteúdo da tabela CURSO da seguinte maneira:
Fonte: O autor
Na linha 4, adicionamos um SAVEPOINT denominado CARGA60. Quando a linha 6 for executada, o SGBD vai desfazer a
operação de UPDATE da linha 5.
UM POUCO MAIS SOBRE ATUALIZAÇÃO TEMPORÁRIA
Estudamos que uma transação não deve atrapalhar o andamento de outra. Pense na execução da nossa última
transação, que envolveu dois comandos de atualização na tabela DISCIPLINA.
Vimos que, logo após a execução da linha 3, a única disciplina que não sofreu alteração foi a de Computação Gráfica.
Perceba que o SELECT da linha 3 está sendo executado no contexto da transação.
No entanto, o que aconteceria se tivéssemos em paralelo outra aplicação que submetesse consulta para acessar os
registros da tabela DISCIPLINA no mesmo momento da execução da linha 3 da transação?
RESPOSTA
A consulta em questão enxergaria os dados “originais”, sem quaisquer alterações. Por qual razão? Para não haver o
problema da atualização temporária. Queremos dizer que, se a transação fosse desfeita por qualquer motivo, o UPDATE
da linha 2 seria também desfeito.
UM POUCO MAIS SOBRE TRANSAÇÃO DE LEITURA
Vimos que uma transação que não modifica dados é denominada transação somente de leitura (READ ONLY). Caso
contrário, é denominada leitura-gravação (READ WRITE).
Para especificar o tipo de transação, usaremos o comando SET TRANSACTION <TIPOTRANSAÇÃO>. No PostgreSQL,
quando iniciamos uma transação, o padrão é READ WRITE.
Vamos analisar um exemplo envolvendo uma transação READ ONLY:
Fonte: Autor
Na transação acima, propositalmente, inserimos um comando de atualização em uma transação que não permite essa
categoria de comando. Logo, após a execução da linha 3, o SGBD retornará uma mensagem informando ao usuário que
não é possível executar comando de atualização em uma transação do tipo somente leitura.
Ao longo deste módulo, aprendemos o conceito de transação, que representa uma sequência de comandos que devem
ser executados na totalidade, ou, caso contrário, desfeitos.
Vimos que, por padrão, o SGBD PostgreSQL implicitamente gera uma transação quando submetemos algum comando
de inserção, atualização ou remoção de dados. Por fim, aprendemos comandos para gerenciar transações no
PostgreSQL.
COMANDOS DE CONTROLE DE TRANSAÇÕES
VERIFICANDO O APRENDIZADO
Parte superior do formulário
1. A RESPEITO DE TRANSAÇÕES NO POSTGRESQL E, CONSIDERANDO O MODELO A SEGUIR, ASSINALE A PROPOSIÇÃO
VERDADEIRA:
FONTE: O AUTOR
Ao executar o comando DELETE FROM CURSODISCIPLINA(; o PostgreSQL não executa uma transação.
O comando DELETE FROM CURSODISCIPLINA(; pode ser executado sem erro em uma transação PostgreSQL do
tipo READ ONLY.
O comando DELETE FROM CURSODISCIPLINA(; pode ser executado sem erro em uma transação PostgreSQL do
tipo READ WRITE.
O comando SELECT * FROM CURSODISCIPLINA(; não pode ser executado em uma transação PostgreSQL do tipo READ
ONLY.
Parte inferior do formulário
Parte superior do formulário
2. SUPONHA QUE UM PROFISSIONAL PROGRAMOU NO POSTGRESQL OS SEGUINTES COMANDOS EM UMA TABELA
DENOMINADA EMPREGADO:
FONTE: O AUTOR
SUPONHA TAMBÉM QUE, APÓS A EXECUÇÃO DA LINHA 2, O PROFISSIONAL PERCEBEU QUE NÃO DEVERIA TER
AUMENTADO O SALÁRIO DE MARIA NESSE VALOR. QUAL COMANDO É ADEQUADO ADICIONAR À LINHA 3 PARA
DESFAZER ESSA OPERAÇÃO?
DELETE;
COMMIT;
UPDATE;
ROLLBACK;
Parte inferior do formulário
GABARITO
1. A respeito de transações no PostgreSQL e, considerando o modelo a seguir, assinale a proposição verdadeira:
Fonte: O autor
A alternativa "C " está correta.
De fato, se uma transação no PostgreSQL é definida como READ WRITE, ela aceita comandos de inserção, atualização e
remoção de dados. Logo, a instrução que contém o comando DELETE poderá ser executada sem erro.
2. Suponha que um profissional programou no PostgreSQL os seguintes comandos em uma tabela denominada
empregado:
Fonte: O autor
Suponha também que, após a execução da linha 2, o profissional percebeu que não deveria ter aumentado o salário de
Maria nesse valor. Qual comando é adequado adicionar à linha 3 para desfazer essa operação?
A alternativa "D " está correta.
De fato, como a transação não foi concluída, é possível desfazer a operação da linha 2, bastando para isso adicionar o
comando ROLLBACK. Após isso, a tabela funcionário ficará com os registros iguais à situação imediatamente anterior à
execução da transação.
CONCLUSÃO
CONSIDERAÇÕES FINAIS
Ao longo do nosso estudo, fizemos uma introdução aos recursos do SGBD PostgreSQL, envolvendo características desse
SGBD, bem como sua instalação.
Foram apresentados comandos, classificados como DDL, para a criação e a alteração de tabelas. Em seguida,
conhecemos diversos comandos SQL para manipulação de linhas em tabelas. Tais comandos, classificados como DML,
são úteis para inserção, alteração e remoção de dados.
Finalizamos com uma breve contextualização a respeito do conceito, uso e importância das transações, com destaque
aos comandos do PostgreSQL utilizados para esse fim.
AVALIAÇÃO DO TEMA:
REFERÊNCIAS
DBEAVER COMMUNITY. Consultado em meio eletrônico em: 30 mai. 2020.
ELMASRI, R.; NAVATHE, S. Sistemas de Banco de Dados. 7. ed. São Paulo: Pearson, 2019.
MANZANO, J.A.M.G., Microsoft SQL Server 2016 Express Edition Interativo. 1. ed. São Paulo: Saraiva, 2017.
POSTGRESQL. PostgreSQL 12.3 Documentation. Consultado em meio eletrônico em: 30 mai. 2020.
POSTGRESQL. Create Table. Consultado em meio eletrônico em: 30 mai. 2020.
POSTGRESQL. Data Type. Consultado em meio eletrônico em: 30 mai. 2020.
POSTGRESQL. Delete. Consultado em meio eletrônico em: 30 mai. 2020.
POSTGRESQL. Download. Consultado em meio eletrônico em: 30 mai. 2020.
POSTGRESQL. Insert. Consultado em meio eletrônico em: 30 mai. 2020.
POSTGRESQL. Ubuntu. Consultado em meio eletrônico em: 30 mai. 2020.
POSTGRESQL. Update. Consultado em meio eletrônico em: 30 mai. 2020.
EXPLORE+
Para aprofundar seus conhecimentos sobre o assunto deste tema, leia:
CHAMBERLIN, D. D. Early History of SQL In: IEEE Annals of the History of Computing n 4, 2012. Como vimos, a linguagem
SQL tornou-se um padrão para uso em sistemas gerenciadores de bancos de dados relacionais. O artigo indicado é um
interessante material sobre a história da SQL.
CONTEUDISTA
Nathielly de Souza Campos
CURRÍCULO LATTES
DEFINIÇÃO
Consultas com expressões no comando SELECT. Consultas com o uso da cláusula WHERE. Agrupamento de dados.
PROPÓSITO
Saber construir comandos SQL com o uso de expressões no comando SELECT, bem como a especificação de condições
na cláusula WHERE, que representam tarefas importantes no projeto de consultas em sistemas gerenciadores de banco
de dados (SGBD). Para o desenvolvimento de relatórios e consultas analíticas, é fundamental saber trabalhar com
agrupamento de dados. Essas atividades são relacionadas ao dia a dia de programadores, analistas de sistemas e
desenvolvedores.
PREPARAÇÃO
Antes de iniciar o conteúdo deste tema, certifique-se de ter baixado e instalado o SGBD PostgreSQL em seu
computador.
OBJETIVOS
MÓDULO 1
Operar consultas com o comando SELECT
MÓDULO 2
Operar consultas usando a cláusula WHERE
MÓDULO 3
Operar consultas envolvendo agrupamento de dados
INTRODUÇÃO
Ao longo deste tema, vamos explorar diversos exemplos de consultas envolvendo uma tabela. Aprenderemos a codificar
consultas abrangendo tanto a recuperação de colunas da própria tabela quanto o uso de expressões no comando
SELECT. Quando projetamos um banco de dados para determinado domínio de negócio, em geral, são criadas diversas
tabelas que serão manipuladas pelas aplicações desenvolvidas para acessar os recursos do banco de dados.
Diversas operações que manipulam tabelas em um banco de dados necessariamente estão associadas a alguma
operação de consulta. Por exemplo, se resolvermos aumentar em 10% o salário de todos os funcionários que ganham
até R$ 4.000, será necessário programarmos um comando de consulta para que o sistema gerenciador de banco de
dados (SGBD) selecione os registros dos funcionários alvo da atualização. Assim, aprender de maneira efetiva a
programar consultas trará benefícios, tanto para atividades de construção de relatórios, quanto para o projeto de
operações de remoção e atualização de dados.
Clique aqui para baixar o arquivo com todos os códigos que serão utilizados nas consultas dos módulos a seguir.
MÓDULO 1
Fonte: O autor.
Vamos ver alguns exemplos de consultas?
CONSULTA 01
Exibir todas as informações dos alunos.
SELECT * FROM ALUNO;
A tabela a seguir apresenta os resultados da consulta.
Um resumo contendo algumas funções de data do PostgreSQL pode ser visualizado na tabela a seguir:
Fonte: O autor
Agora veja na tabela a seguir os resultados da consulta:
Fonte: O autor
Observe que construímos uma lógica utilizando o comando CASE, que é equivalente ao comando IF:, cada linha com a
cláusula WHEN avalia expressão que retorna um inteiro representativo do dia da semana, caso a expressão tenha valor
lógico verdadeiro.
CALCULANDO IDADE E FAIXA ETÁRIA
Em geral, quando estamos diante de alguma coluna representativa da data de nascimento de uma pessoa, é comum
extrair informações derivadas, tais como idade e faixa etária. Por exemplo, o código a seguir retorna o nome, a data de
nascimento e a idade dos alunos:
Fonte: O autor
Perceba que na linha 3 utilizamos a função AGE, que retorna uma frase representativa da informação sobre a idade em
questão. Na linha 4, usamos a função EXTRACT para exibir a idade do aluno. A figura a seguir apresenta o resultado
dessa consulta:
Fonte: O autor
Perceba que cada linha com a cláusula WHEN avalia a expressão que retorna uma faixa etária de acordo com a idade do
aluno.
A seguir, o resultado da consulta:
Fonte: O autor
Perceba que, como estamos usando somente o comando SELECT/FROM, cada função é calculada levando em
consideração todos os registros da tabela.
Veja na figura a seguir, o resultado da consulta:
Fonte: O autor.Resultado da consulta envolvendo funções para extrair resumo a partir da tabela aluno.
ATENÇÃO
Perceba, também, que o código da linha 6 é equivalente ao da linha 4: ambos calculam a idade média dos alunos.
LISTANDO RESUMOS EM UMA LINHA
Suponha que haja interesse em conhecer os quantitativos de cursos, disciplinas e alunos do nosso banco de dados.
Poderíamos submeter ao SGBD as consultas a seguir:
CURSO
SELECT COUNT(*) NCURSOS FROM CURSO;
DISCIPLINA
SELECT COUNT(*) NDISCIPINAS FROM DISCIPLINA;
ALUNO
SELECT COUNT(*) NALUNOS FROM ALUNO;
Estamos diante de três consultas. No entanto, pode ser mais interessante mostrarmos os resultados em apenas uma
linha.
Podemos, então, submeter o código a seguir:
Fonte: O autor
O que fizemos?
Como cada consulta (linhas 2 a 4) retorna somente um valor, utilizamos um SELECT externo (linha 1) para exibir cada
coluna resultante.
Observe o resultado a seguir:
Fonte: O autor
No exemplo apresentado, o SGBD criará uma tabela denominada TTESTE e armazenará os dados resultantes da consulta
(linhas 2 a 11) em questão.
CRIANDO VIEW A PARTIR DE CONSULTA
Outro recurso interessante, diretamente relacionado ao processo de construção de consultas, é o objeto view (visão).
Uma view encapsula a complexidade da consulta SQL, que a forma. Para criar esse objeto, usa-se o comando CREATE
VIEW <CONSULTA>.
Fonte: O autor
No exemplo, o SGBD criará uma view denominada VTESTE. Na prática, quando usuário submeter, por exemplo, a
consulta SELECT * FROM VTESTE, o SGBD executará o código associado à view em questão.
CONSULTAS SIMPLES COM O COMANDO SELECT NO POSTGRESQL
Veja agora o vídeo sobre Consultas simples com o comando SELECT no PostgreSQL
Ao longo da nossa jornada, estudamos a construção de consultas envolvendo a extração de informação a partir de uma
tabela. Além disso, foram exibidas funções de data e funções para resumir dados de uma tabela.
Agora é com você! Vamos realizar as atividades a seguir?
VERIFICANDO O APRENDIZADO
Parte superior do formulário
1. CONSIDERE A TABELA E O CÓDIGO SQL A SEGUIR:
FONTE: O AUTOR
ANALISE AS SEGUINTES PROPOSIÇÕES:
A proposição II é verdadeira, pois não há condição de filtro na consulta. A proposição V é verdadeira, pois retorna
informações a respeito de todas as colunas da tabela ALUNO. As demais proposições são falsas.
2. Seja uma tabela assim definida: FUNCIONARIO (IDFUNC, NOME, DATANASCIMENTO, SALARIO). Qual consulta SQL
retorna o maior salário?
A alternativa "B " está correta.
Na alternativa B, foi usado o comando MAX para retornar o maior valor da coluna SALÁRIO da tabela FUNCIONARIO.
MÓDULO 2
Operador Significado
< menor
> maior
= igual
Operador Significado
AND conjunção
OR disjunção
NOT negação
Fonte: O autor
Fonte: O autor
Fonte: O autor
Fonte: O autorResultado consulta 03.
Note que a expressão na cláusula WHERE compara o mês de nascimento de cada aluno junto aos valores da lista
contendo os inteiros correspondentes aos meses do segundo semestre.
RECUPERANDO DADOS COM O USO DO OPERADOR BETWEEN
O operador [NOT] BETWEEN verifica se determinado valor encontra-se no intervalo entre dois valores.
Por exemplo, X BETWEEN Y AND Z é equivalente a X>=Y AND X<=Z. De modo semelhante, X NOT BETWEEN Y AND Z é
equivalente a X<Y OR X>Z.
CONSULTA 04 + RESULTADO
Listar o nome dos alunos nascidos entre 1985 e 2005.
Fonte: O autor
Fonte: O autor
RECUPERANDO DADOS COM O USO DO OPERADOR LIKE
O uso do [NOT] LIKE permite realizar buscas em uma cadeia de caracteres.
Trata-se de um recurso bastante utilizado em buscas textuais. Você pode utilizar os símbolos especiais a seguir:
_(Underline) para ignorar qualquer caractere específico;
%(Percentual) para ignorar qualquer padrão.
Vamos estudar alguns exemplos?
CONSULTA 05 + RESULTADO
Listar o nome dos alunos que possuem a string COSTA em qualquer parte do nome.
Fonte: O autor
Fonte: O autor
Fonte: O autor
Fonte: O autor
Fonte: O autorResultado consulta 09.
O SGBD retorna os registros onde há algum conteúdo cadastrado na coluna EMAIL.
CONSULTA 10 + RESULTADO
Retornar o nome dos alunos sem e-mail cadastrado no banco de dados.
Fonte: O autor
Fonte: O autor
Fonte: O autor
Para recuperar os registros que contenham “da Silva” em qualquer parte do nome, utiliza-se o comando LIKE com
auxílio do “%” como forma do SGBD desconsiderar qualquer padrão à esquerda e à direita da string de interesse.
2. Um programador recuperou os dados dos bairros Penha, Ipanema, Flamengo e Centro gravados na coluna BAIRRO da
tabela CLIENTE, a seguir especificada.
CLIENTE (IDCLIENTE, NOME, ENDERECO, BAIRRO, CIDADE, UF, CEP)
A sintaxe SQL correta usada por ele para realizar essa atividade foi SELECT * FROM CLIENTE
A alternativa "A " está correta.
Para recuperar os registros de interesse, foi utilizado o operador IN com o uso de uma lista contendo os bairros em
questão. O SGBD compara o bairro do cliente junto aos elementos especificados na lista de bairros em questão.
MÓDULO 3
Operar consultas envolvendo agrupamento de dados
CONSULTAS COM GROUP BY E HAVING
Em nossas consultas, usaremos como base a tabela FUNCIONARIO, conforme figura a seguir:
Fonte: O autor.
Após a criação da tabela e a inserção dos registros, podemos utilizar o código a seguir para exibir todo o seu conteúdo:
Fonte: O autor
O resultado da consulta será semelhante a este:
F {1,2,3} {ROBERTA SILVA BRASIL, MARIA SILVA BRASIL, GABRIELLA PEREIRA LIMA} {…}
Fonte: O autor
O resultado da consulta anterior pode ser visualizado na figura a seguir:
Fonte: O autor
No entanto, vamos perceber que o uso mais conhecido da cláusula GROUP BY ocorre quando associada a funções de
agregação, tais como COUNT, MIN, MAX e AVG.
Uma tabela com o nome e o significado dessas funções foi apresentada na seção “Funções de resumo ou agregação” no
módulo 1.
Vamos estudar alguns exemplos?
CONSULTA 01 + RESULTADO
Retornar o número de funcionários por sexo.
Fonte: O autor
Fonte: O autor
Fonte: O autor.Número de funcionários por sexo: informações exibidas em uma única linha.
CONSULTA 02 + RESULTADO
Retornar a média salarial por sexo.
Fonte: O autor
Fonte: O autor
Fonte: O autor
Fonte: O autor
1 VIRTUS 2020
2 FIESTA 2014
3 CRUZE 2020
4 CAMARO 2018
5 KOMBI 1996
6 FOCUS 2016
Para recuperar corretamente os registros de interesse, é necessário agrupar os dados pela coluna BAIRRO e em seguida
usar a função de média (AVG), tendo como base a coluna RENDA.
2. Suponha a existência de uma tabela no PostgreSQL com a seguinte estrutura: PRODUTO (CODIGOP, NOME, ANO
QUANTIDADE). Suponha também que a tabela tenha os seguintes registros:
1 VIRTUS 2020
2 FIESTA 2014
3 CRUZE 2020
4 CAMARO 2018
5 KOMBI 1996
6 FOCUS 2016
Para recuperar os registros de interesse, a consulta em questão retorna o total de automóveis por ano, no entanto,
levando em conta somente os grupos em que o total seja maior que 1. Na prática, os anos 2014 e 2018 não farão parte
dos resultados da consulta e os demais o farão, totalizando três resultados.
CONCLUSÃO
CONSIDERAÇÕES FINAIS
Neste tema, tratamos do comando SELECT da SQL no PostgreSQL. Vimos a sua sintaxe básica para consulta a uma
tabela, no formato SELECT ... FROM ... WHERE.
Reconhecemos que, na cláusula SELECT, são especificadas as colunas da tabela a serem selecionadas, o que
corresponde à operação de projeção da Álgebra Relacional.
Aprendemos que é possível especificar expressões e funções nesta cláusula. No caso específico do PostgreSQL, vimos
que a execução de funções pré-definidas é realizada especificando o nome e os parâmetros da função na cláusula
SELECT, omitindo as demais cláusulas do comando, inclusive a cláusula FROM. Em seguida, estudamos o uso da cláusula
WHERE, que especifica a condição de seleção de linhas da tabela, o que corresponde à operação de restrição ou seleção
da Álgebra Relacional. Por fim, aplicamos cláusulas adicionais do comando SELECT, como ORDER BY, GROUP BY e
HAVING, todas implementadas no PostgreSQL em compatibilidade com o padrão da linguagem SQL.
AVALIAÇÃO DO TEMA:
REFERÊNCIAS
AWS. Tarefas comuns do administrador de banco de dados para PostgreSQL. In: AWS. Consultado em meio eletrônico
em: 30 mai. 2020.
BILECKI, L. F.; KALEMPA, V. C. EasyRA: Uma ferramenta para tradução de consultas em álgebra relacional para SQL. In:
Computer On The Beach, 2015, Florianópolis. Computer on the Beach, 2015. p. 21-30.
CAMPOS, N. S. Notas de Aula sobre Banco de Dados da professora Nathielly Campos.
Disponível sob licença Creative Commons BR Atribuição – CC BY, 2020.
ELMASRI, R.; NAVATHE, S. Sistemas de Banco de Dados. 7. ed. São Paulo: Pearson, 2019.
POSTGRESQL. Chapter 9. Functions and Operators. In: PostgreSQL. Consultado em meio eletrônico em: 30 mai. 2020.
POSTGRESQL. PostgreSQL Downloads. In: PostgreSQL. Consultado em meio eletrônico em: 30 mai. 2020.
POSTGRESQL. SELECT. In: PostgreSQL. Consultado em meio eletrônico em: 30 mai. 2020.
EXPLORE+
Para aprofundar os seus conhecimentos sobre o assunto deste tema, leia:
“Tarefas comuns do administrador de banco de dados para PostgreSQL”, um interessante material sobre tarefas do dia
a dia de um administrador de banco de dados que atue com o PostreSQL. Você pode encontrá-lo no site da Amazon
Web Services.
BILECKI, L. F.; KALEMPA, V. C. EasyRA: Uma ferramenta para tradução de consultas em álgebra relacional para SQL. In:
Computer on the Beach, 2015. É importante saber que parte considerável da linguagem SQL é baseada na teoria de
Álgebra Relacional. Trata-se de uma álgebra que envolve diversos operadores sobre relações. Neste trabalho, você
aprenderá sobre as operações básicas da Álgebra Relacional, e conhecerá uma ferramenta para praticar comandos em
álgebra e visualizar o respectivo comando na linguagem SQL.
CONTEUDISTA
Nathielly de Souza Campos
CURRÍCULO LATTES
DEFINIÇÃO
Consultas com expressões no comando SELECT. Consultas com o uso da cláusula WHERE. Agrupamento de dados.
PROPÓSITO
Saber construir comandos SQL com o uso de expressões no comando SELECT, bem como a especificação de condições
na cláusula WHERE, que representam tarefas importantes no projeto de consultas em sistemas gerenciadores de banco
de dados (SGBD). Para o desenvolvimento de relatórios e consultas analíticas, é fundamental saber trabalhar com
agrupamento de dados. Essas atividades são relacionadas ao dia a dia de programadores, analistas de sistemas e
desenvolvedores.
PREPARAÇÃO
Antes de iniciar o conteúdo deste tema, certifique-se de ter baixado e instalado o SGBD PostgreSQL em seu
computador.
OBJETIVOS
MÓDULO 1
Operar consultas com o comando SELECT
MÓDULO 2
Operar consultas usando a cláusula WHERE
MÓDULO 3
Operar consultas envolvendo agrupamento de dados
INTRODUÇÃO
Ao longo deste tema, vamos explorar diversos exemplos de consultas envolvendo uma tabela. Aprenderemos a codificar
consultas abrangendo tanto a recuperação de colunas da própria tabela quanto o uso de expressões no comando
SELECT. Quando projetamos um banco de dados para determinado domínio de negócio, em geral, são criadas diversas
tabelas que serão manipuladas pelas aplicações desenvolvidas para acessar os recursos do banco de dados.
Diversas operações que manipulam tabelas em um banco de dados necessariamente estão associadas a alguma
operação de consulta. Por exemplo, se resolvermos aumentar em 10% o salário de todos os funcionários que ganham
até R$ 4.000, será necessário programarmos um comando de consulta para que o sistema gerenciador de banco de
dados (SGBD) selecione os registros dos funcionários alvo da atualização. Assim, aprender de maneira efetiva a
programar consultas trará benefícios, tanto para atividades de construção de relatórios, quanto para o projeto de
operações de remoção e atualização de dados.
Clique aqui para baixar o arquivo com todos os códigos que serão utilizados nas consultas dos módulos a seguir.
MÓDULO 1
Um resumo contendo algumas funções de data do PostgreSQL pode ser visualizado na tabela a seguir:
Fonte: O autor
Agora veja na tabela a seguir os resultados da consulta:
Fonte: O autor
Perceba que na linha 3 utilizamos a função AGE, que retorna uma frase representativa da informação sobre a idade em
questão. Na linha 4, usamos a função EXTRACT para exibir a idade do aluno. A figura a seguir apresenta o resultado
dessa consulta:
Fonte: O autor
Perceba que cada linha com a cláusula WHEN avalia a expressão que retorna uma faixa etária de acordo com a idade do
aluno.
A seguir, o resultado da consulta:
Fonte: O autor.Resultados da consulta envolvendo idade e faixa etária dos alunos.
FUNÇÕES DE RESUMO OU DE AGREGAÇÃO
As funções a seguir são úteis para obtermos resumo dos dados de alguma tabela:
Funções para resumo de dados.
Fonte: O autor
Perceba que, como estamos usando somente o comando SELECT/FROM, cada função é calculada levando em
consideração todos os registros da tabela.
Veja na figura a seguir, o resultado da consulta:
Fonte: O autor.Resultado da consulta envolvendo funções para extrair resumo a partir da tabela aluno.
ATENÇÃO
Perceba, também, que o código da linha 6 é equivalente ao da linha 4: ambos calculam a idade média dos alunos.
LISTANDO RESUMOS EM UMA LINHA
Suponha que haja interesse em conhecer os quantitativos de cursos, disciplinas e alunos do nosso banco de dados.
Poderíamos submeter ao SGBD as consultas a seguir:
CURSO
SELECT COUNT(*) NCURSOS FROM CURSO;
DISCIPLINA
SELECT COUNT(*) NDISCIPINAS FROM DISCIPLINA;
ALUNO
SELECT COUNT(*) NALUNOS FROM ALUNO;
Estamos diante de três consultas. No entanto, pode ser mais interessante mostrarmos os resultados em apenas uma
linha.
Podemos, então, submeter o código a seguir:
Fonte: O autor
O que fizemos?
Como cada consulta (linhas 2 a 4) retorna somente um valor, utilizamos um SELECT externo (linha 1) para exibir cada
coluna resultante.
Observe o resultado a seguir:
Fonte: O autor
No exemplo apresentado, o SGBD criará uma tabela denominada TTESTE e armazenará os dados resultantes da consulta
(linhas 2 a 11) em questão.
CRIANDO VIEW A PARTIR DE CONSULTA
Outro recurso interessante, diretamente relacionado ao processo de construção de consultas, é o objeto view (visão).
Uma view encapsula a complexidade da consulta SQL, que a forma. Para criar esse objeto, usa-se o comando CREATE
VIEW <CONSULTA>.
Fonte: O autor
No exemplo, o SGBD criará uma view denominada VTESTE. Na prática, quando usuário submeter, por exemplo, a
consulta SELECT * FROM VTESTE, o SGBD executará o código associado à view em questão.
CONSULTAS SIMPLES COM O COMANDO SELECT NO POSTGRESQL
Veja agora o vídeo sobre Consultas simples com o comando SELECT no PostgreSQL
Ao longo da nossa jornada, estudamos a construção de consultas envolvendo a extração de informação a partir de uma
tabela. Além disso, foram exibidas funções de data e funções para resumir dados de uma tabela.
Agora é com você! Vamos realizar as atividades a seguir?
VERIFICANDO O APRENDIZADO
Parte superior do formulário
1. CONSIDERE A TABELA E O CÓDIGO SQL A SEGUIR:
FONTE: O AUTOR
ANALISE AS SEGUINTES PROPOSIÇÕES:
Fonte: O autor
Analise as seguintes proposições:
A proposição II é verdadeira, pois não há condição de filtro na consulta. A proposição V é verdadeira, pois retorna
informações a respeito de todas as colunas da tabela ALUNO. As demais proposições são falsas.
2. Seja uma tabela assim definida: FUNCIONARIO (IDFUNC, NOME, DATANASCIMENTO, SALARIO). Qual consulta SQL
retorna o maior salário?
A alternativa "B " está correta.
Na alternativa B, foi usado o comando MAX para retornar o maior valor da coluna SALÁRIO da tabela FUNCIONARIO.
MÓDULO 2
Fonte: O autor
RECUPERANDO DADOS COM SELECT/FROM/WHERE/ORDER BY
Uma sintaxe básica para o comando SELECT, com o uso das cláusulas WHERE e ORDER BY, está expressa a seguir:
SELECT COLUNA1 [[AS] APELIDOCOLUNA1],
COLUNA2 [[AS] APELIDOCOLUNA2],
…
COLUNAN [[AS] APELIDOCOLUNAN]
FROM TABELA
WHERE <CONDIÇÃO>
ORDER BY EXPRESSÃO1[ASC|DESC] [NULLS {FIRST|LAST}], [EXPRESSÃO2[ASC|DESC] [NULLS {FIRST|LAST}…];
O propósito do SELECT é declararmos as colunas da consulta. No FROM, informamos a tabela alvo da consulta. No
WHERE, especificamos alguma condição, simples ou composta, para filtrar registros que serão recuperados pelo SGBD.
No ORDER BY, declaramos uma ou mais colunas como critério de ordenação, com possibilidade de especificarmos se
valores NULL aparecem no início ou no final do resultado.
É importante frisar que a cláusula WHERE realiza a operação de restrição da Álgebra Relacional, também conhecida
como seleção – não confundir com o comando SELECT.
Ainda, a construção de uma condição na cláusula WHERE envolve operadores relacionais, conforme tabela a seguir:
Operadores relacionais.
Operador Significado
< menor
> maior
>= maior ou igual a
= igual
Operador Significado
AND conjunção
OR disjunção
NOT negação
Fonte: O autor
Fonte: O autor
Fonte: O autorResultado consulta 02.
Perceba que foi criada uma condição composta envolvendo uma conjunção. O SGBD retornará os registros que possuem
o valor “F” para a coluna SEXO e o inteiro 11 como valor do mês referente à data de nascimento.
RECUPERANDO DADOS COM O USO DO OPERADOR IN
O operador [NOT] IN pode ser utilizado em consultas que envolvam comparações usando uma lista de valores.
CONSULTA 03 + RESULTADO
Listar o nome dos alunos que fazem aniversário no segundo semestre.
Fonte: O autor
Fonte: O autor
Fonte: O autor
RECUPERANDO DADOS COM O USO DO OPERADOR LIKE
O uso do [NOT] LIKE permite realizar buscas em uma cadeia de caracteres.
Trata-se de um recurso bastante utilizado em buscas textuais. Você pode utilizar os símbolos especiais a seguir:
_(Underline) para ignorar qualquer caractere específico;
%(Percentual) para ignorar qualquer padrão.
Vamos estudar alguns exemplos?
CONSULTA 05 + RESULTADO
Listar o nome dos alunos que possuem a string COSTA em qualquer parte do nome.
Fonte: O autor
Fonte: O autor
Fonte: O autor
Fonte: O autor
Fonte: O autor
Fonte: O autor
Fonte: O autor
Trabalhamos o uso de consultas com auxílio da cláusula WHERE, fazendo uso de operadores relacionais e lógicos na
composição de condições lógicas. Além disso, estudamos como estabelecer critérios para ordenação dos resultados de
consultas.
Agora é com você! Vamos realizar as atividades a seguir?
VERIFICANDO O APRENDIZADO
Parte superior do formulário
1. GABRIEL É ANALISTA DE SISTEMAS DE UMA EMPRESA DE TECNOLOGIA DE INFORMAÇÃO E RECEBEU A TAREFA DE
RECUPERAR TODOS OS REGISTROS DA TABELA CLIENTE ONDE O VALOR DA COLUNA “NOMECLIENTE” CONTENHA A
CADEIA “DA SILVA” EM QUALQUER PARTE DO NOME. ASSINALE A ALTERNATIVA CORRETA QUE PERMITA A GABRIEL
EXECUTAR SUA TAREFA.
SELECT * FROM CLIENTE WHERE NOMECLIENTE = 'da Silva '.
SELECT * FROM CLIENTE WHERE NOMECLIENTE != 'da Silva '.
SELECT * FROM CLIENTE WHERE NOME LIKE '%da Silva% '.
SELECT * FROM CLIENTE WHERE NOMECLIENTE LIKE '%da Silva% '.
Parte inferior do formulário
Parte superior do formulário
2. UM PROGRAMADOR RECUPEROU OS DADOS DOS BAIRROS PENHA, IPANEMA, FLAMENGO E CENTRO GRAVADOS NA
COLUNA BAIRRO DA TABELA CLIENTE, A SEGUIR ESPECIFICADA.
CLIENTE (IDCLIENTE, NOME, ENDERECO, BAIRRO, CIDADE, UF, CEP)
A SINTAXE SQL CORRETA USADA POR ELE PARA REALIZAR ESSA ATIVIDADE FOI SELECT * FROM CLIENTE
WHERE BAIRRO IN ('Penha ', 'Ipanema ', 'Flamengo ', 'Centro').
WHERE BAIRRO = ('Penha ', 'Ipanema ', 'Flamengo ', 'Centro').
WHEN BAIRRO = ('Penha ', 'Ipanema ', 'Flamengo ', 'Centro').
WHERE BAIRRO BETWEEN ('Penha ', 'Ipanema ', 'Flamengo ', 'Centro').
Parte inferior do formulário
GABARITO
1. Gabriel é analista de sistemas de uma empresa de tecnologia de informação e recebeu a tarefa de recuperar todos os
registros da tabela CLIENTE onde o valor da coluna “NOMECLIENTE” contenha a cadeia “da Silva” em qualquer parte do
nome. Assinale a alternativa correta que permita a Gabriel executar sua tarefa.
A alternativa "D " está correta.
Para recuperar os registros que contenham “da Silva” em qualquer parte do nome, utiliza-se o comando LIKE com
auxílio do “%” como forma do SGBD desconsiderar qualquer padrão à esquerda e à direita da string de interesse.
2. Um programador recuperou os dados dos bairros Penha, Ipanema, Flamengo e Centro gravados na coluna BAIRRO da
tabela CLIENTE, a seguir especificada.
CLIENTE (IDCLIENTE, NOME, ENDERECO, BAIRRO, CIDADE, UF, CEP)
A sintaxe SQL correta usada por ele para realizar essa atividade foi SELECT * FROM CLIENTE
A alternativa "A " está correta.
Para recuperar os registros de interesse, foi utilizado o operador IN com o uso de uma lista contendo os bairros em
questão. O SGBD compara o bairro do cliente junto aos elementos especificados na lista de bairros em questão.
MÓDULO 3
Fonte: O autor.
Após a criação da tabela e a inserção dos registros, podemos utilizar o código a seguir para exibir todo o seu conteúdo:
Fonte: O autor
O resultado da consulta será semelhante a este:
F {1,2,3} {ROBERTA SILVA BRASIL, MARIA SILVA BRASIL, GABRIELLA PEREIRA LIMA} {…}
Fonte: O autor
O resultado da consulta anterior pode ser visualizado na figura a seguir:
Fonte: O autor
No entanto, vamos perceber que o uso mais conhecido da cláusula GROUP BY ocorre quando associada a funções de
agregação, tais como COUNT, MIN, MAX e AVG.
Uma tabela com o nome e o significado dessas funções foi apresentada na seção “Funções de resumo ou agregação” no
módulo 1.
Vamos estudar alguns exemplos?
CONSULTA 01 + RESULTADO
Retornar o número de funcionários por sexo.
Fonte: O autor
Fonte: O autor.Número de funcionários por sexo: informações exibidas em uma única linha.
CONSULTA 02 + RESULTADO
Retornar a média salarial por sexo.
Fonte: O autor
Fonte: O autor
Fonte: O autor
Ao longo da nossa jornada, estudamos o projeto de consultas com o uso de agrupamento de dados. Percebemos que
esse recurso é imprescindível quando temos interesse na extração de informações de caráter mais analítico a partir de
alguma tabela, fazendo uso de funções de agregação associadas a uma ou diversas colunas.
Ainda, percebemos que, às vezes, a natureza do problema que estamos resolvendo requer o uso de filtro tendo como
base o uso de alguma função de agregação. Para isso, fizemos uso da cláusula HAVING.
Agora é com você! Vamos realizar as atividades a seguir?
VERIFICANDO O APRENDIZADO
Parte superior do formulário
1. SUPONHA QUE EXISTA EM UM BANCO DE DADOS UMA TABELA DENOMINADA CLIENTE, ASSIM ESTRUTURADA:
CLIENTE (CODIGOCLIENTE, NOME, SEXO, BAIRRO, RENDA). VOCÊ FOI SOLICITADO A ESCREVER UM COMANDO SQL PARA
OBTER A RENDA MÉDIA DOS CLIENTES POR BAIRRO.
O COMANDO CORRETO É:
SELECT BAIRRO, MIN(RENDA)
FROM CLIENTE
GROUP BY BAIRRO
SELECT SEXO, SUM(RENDA)
FROM CLIENTE
GROUP BY BAIRRO
SELECT BAIRRO, AVG(RENDA)
FROM CLIENTE
GROUP BY BAIRRO
SELECT BAIRRO,MAX(RENDA)
FROM CLIENTE
GROUP BY SEXO
Parte inferior do formulário
Parte superior do formulário
2. SUPONHA A EXISTÊNCIA DE UMA TABELA NO POSTGRESQL COM A SEGUINTE ESTRUTURA: PRODUTO (CODIGOP,
NOME, ANO QUANTIDADE). SUPONHA TAMBÉM QUE A TABELA TENHA OS SEGUINTES REGISTROS:
2 FIESTA 2014
3 CRUZE 2020
4 CAMARO 2018
5 KOMBI 1996
6 FOCUS 2016
Para recuperar corretamente os registros de interesse, é necessário agrupar os dados pela coluna BAIRRO e em seguida
usar a função de média (AVG), tendo como base a coluna RENDA.
2. Suponha a existência de uma tabela no PostgreSQL com a seguinte estrutura: PRODUTO (CODIGOP, NOME, ANO
QUANTIDADE). Suponha também que a tabela tenha os seguintes registros:
1 VIRTUS 2020
2 FIESTA 2014
3 CRUZE 2020
4 CAMARO 2018
5 KOMBI 1996
6 FOCUS 2016
Para recuperar os registros de interesse, a consulta em questão retorna o total de automóveis por ano, no entanto,
levando em conta somente os grupos em que o total seja maior que 1. Na prática, os anos 2014 e 2018 não farão parte
dos resultados da consulta e os demais o farão, totalizando três resultados.
CONCLUSÃO
CONSIDERAÇÕES FINAIS
Neste tema, tratamos do comando SELECT da SQL no PostgreSQL. Vimos a sua sintaxe básica para consulta a uma
tabela, no formato SELECT ... FROM ... WHERE.
Reconhecemos que, na cláusula SELECT, são especificadas as colunas da tabela a serem selecionadas, o que
corresponde à operação de projeção da Álgebra Relacional.
Aprendemos que é possível especificar expressões e funções nesta cláusula. No caso específico do PostgreSQL, vimos
que a execução de funções pré-definidas é realizada especificando o nome e os parâmetros da função na cláusula
SELECT, omitindo as demais cláusulas do comando, inclusive a cláusula FROM. Em seguida, estudamos o uso da cláusula
WHERE, que especifica a condição de seleção de linhas da tabela, o que corresponde à operação de restrição ou seleção
da Álgebra Relacional. Por fim, aplicamos cláusulas adicionais do comando SELECT, como ORDER BY, GROUP BY e
HAVING, todas implementadas no PostgreSQL em compatibilidade com o padrão da linguagem SQL.
AVALIAÇÃO DO TEMA:
REFERÊNCIAS
AWS. Tarefas comuns do administrador de banco de dados para PostgreSQL. In: AWS. Consultado em meio eletrônico
em: 30 mai. 2020.
BILECKI, L. F.; KALEMPA, V. C. EasyRA: Uma ferramenta para tradução de consultas em álgebra relacional para SQL. In:
Computer On The Beach, 2015, Florianópolis. Computer on the Beach, 2015. p. 21-30.
CAMPOS, N. S. Notas de Aula sobre Banco de Dados da professora Nathielly Campos.
Disponível sob licença Creative Commons BR Atribuição – CC BY, 2020.
ELMASRI, R.; NAVATHE, S. Sistemas de Banco de Dados. 7. ed. São Paulo: Pearson, 2019.
POSTGRESQL. Chapter 9. Functions and Operators. In: PostgreSQL. Consultado em meio eletrônico em: 30 mai. 2020.
POSTGRESQL. PostgreSQL Downloads. In: PostgreSQL. Consultado em meio eletrônico em: 30 mai. 2020.
POSTGRESQL. SELECT. In: PostgreSQL. Consultado em meio eletrônico em: 30 mai. 2020.
EXPLORE+
Para aprofundar os seus conhecimentos sobre o assunto deste tema, leia:
“Tarefas comuns do administrador de banco de dados para PostgreSQL”, um interessante material sobre tarefas do dia
a dia de um administrador de banco de dados que atue com o PostreSQL. Você pode encontrá-lo no site da Amazon
Web Services.
BILECKI, L. F.; KALEMPA, V. C. EasyRA: Uma ferramenta para tradução de consultas em álgebra relacional para SQL. In:
Computer on the Beach, 2015. É importante saber que parte considerável da linguagem SQL é baseada na teoria de
Álgebra Relacional. Trata-se de uma álgebra que envolve diversos operadores sobre relações. Neste trabalho, você
aprenderá sobre as operações básicas da Álgebra Relacional, e conhecerá uma ferramenta para praticar comandos em
álgebra e visualizar o respectivo comando na linguagem SQL.
CONTEUDISTA
Nathielly de Souza Campos
CURRÍCULO LATTES
1
Marcar para revisão
Qual conjunto de comandos da SQL abaixo serve para o administrador do banco de dados gerenciar os metadados de
um banco de dados?
A
CREATE, MODIFY, DELETE.
B
INSERT, ALTER, REMOVE.
C
CREATE, ALTER, DROP.
D
INSERT, UPDATE, DELETE.
E
CREATE, ALTER, DELETE.
Resposta incorreta
Resposta correta: C
Gabarito comentado
2
Marcar para revisão
Qual das alternativas abaixo não é uma propriedade desejada das transações em um sistema de banco de dados?
A
Atomicidade.
B
Consistência.
C
Isolamento.
D
Integridade.
E
Durabilidade.
Resposta correta
Resposta correta: D
Gabarito comentado
3
Marcar para revisão
Que invenção da IBM permitiu a utilização dos computadores na implementação de sistemas de informação,
inaugurando a chamada era do processamento de dados?
A
O disco magnético.
B
A memória RAM.
C
Os arquivos eletrônicos.
D
O modelo relacional de dados.
E
O microcomputador.
Resposta correta
Resposta correta: A
Gabarito comentado
4
Marcar para revisão
Analise as afirmações abaixo e responda qual alternativa corresponde a afirmações verdadeiras sobre os módulos de um
SGBD:
I - O catálogo armazena os metadados do sistema de banco de dados.
II - Os programas de aplicação são pré-compilados para separar os comandos da linguagem de programação dos
comandos de manipulação de dados.
III - As transações são compiladas após passarem pelo otimizador de consultas.
A
Somente a afirmação I está correta.
B
Somente as afirmações I e II estão corretas.
C
Somente a afirmação II está correta.
D
Somente as afirmações II e III estão corretas.
E
Somente a afirmação III está correta.
Resposta correta
Resposta correta: B
Gabarito comentado
5
Marcar para revisão
Os primeiros sistemas de bancos de dados implementados na década de 1960, como o IDS e o IMS, usavam,
respectivamente, estruturas de dados em redes e em árvores, por isso, são conhecidos como bancos de dados:
A
relacionais.
B
de arquivos.
C
navegacionais.
D
de esquemas.
E
conceituais.
Resposta correta
Resposta correta: C
Gabarito comentado
6
Marcar para revisão
Qual conjunto de comandos da SQL abaixo serve para manipular o estado ou a instância do banco de dados?
A
CREATE, ALTER, DROP.
B
INSERT, ALTER, DELETE.
C
CREATE, UPDATE, DROP.
D
INSERT, UPDATE, DELETE.
E
CREATE, ALTER, DELETE.
Resposta correta
Resposta correta: D
Gabarito comentado
1
Marcar para revisão
Na nomenclatura de banco de dados, restrição corresponde a uma regra que deve ser obedecida pelo SGBD.
Seja a restrição "um funcionário não pode ter salário maior que seu chefe imediato", esta deve ser classificada
como restrição de:
A
Unicidade
B
Semântica
C
Chave
D
Tabela
E
Domínio
Resposta correta
Resposta correta: B
Gabarito comentado
2
Marcar para revisão
Em alguns casos, dois ou mais valores de atributos em um modelo de Entidade-Relacionamento estão
relacionados. Por exemplo, os atributos Idade e Data de Nascimento de uma pessoa. Para uma Entidade −
Pessoa em particular, o valor de Idade pode ser determinado pela data corrente e o valor de Data de Nascimento
da pessoa. Portanto, o atributo Idade é chamado atributo ...I... do atributo Data de Nascimento, que, por sua vez,
é chamado atributo ...II... .
As lacunas I e II são, correta e respectivamente, preenchidas com:
A
armazenado - derivado
B
derivado - armazenado
C
multivalorado - monovalorado
D
identificador - complexo
E
resultante - unívoco
Resposta correta
Resposta correta: B
Gabarito comentado
3
Marcar para revisão
Em relação aos conceitos de bancos de dados, é correto afirmar que:
A
Um atributo não pode possuir cardinalidade.
B
Um relacionamento não pode possuir cardinalidade.
C
Um atributo pode possuir cardinalidade de relacionamentos.
D
O conjunto de valores que um atributo pode assumir é a cardinalidade do atributo.
E
Em uma generalização/especialização total, para cada ocorrência da entidade genérica, existe sempre uma
ocorrência em uma das entidades especializadas.
Resposta correta
Resposta correta: E
Gabarito comentado
4
Marcar para revisão
Em Modelo de Entidade de Relacionamento, possuímos entidades e atributos. A esse respeito, analise as
assertivas e assinale a alternativa que aponta a(s) correta(s).
I. O objeto básico de um MER é uma entidade, "algo" do mundo real, com uma existência independente.
II. Uma entidade pode ser um objeto com uma existência física (por exemplo, uma pessoa, um carro, uma casa
ou um funcionário) ou um objeto com uma existência conceitual (por exemplo, uma empresa, um trabalho ou
um curso universitário).
III. Os valores dos atributos que descrevem cada entidade se tornarão a maior parte dos dados armazenados no
banco de dados.
IV. Cada entidade tem atributos e propriedades particulares que a descrevem. Por exemplo, uma entidade
empregada pode ser descrita pelo nome do empregado, idade, endereço, salário e trabalho (função).
A
Apenas I.
B
Apenas I, II e III.
C
Apenas I, III e IV.
D
Apenas II, III e IV.
E
I, II, III e IV.
Resposta correta
Resposta correta: E
Gabarito comentado
5
Marcar para revisão
Logo da análise dos requisitos de um projeto de banco de dados para representar as estradas de um País, obteve-
se as seguintes especificações:
As estradas são descritas pelo nome oficial, apelido (pode ser mais de um), tipo, extensão.
As estradas se classificam em: Federais, estaduais e municipais.
As estradas se dividem em trechos. Porém um trecho pertence sempre a única estrada e não poderá fazer parte
de outra estrada. Existe o trecho inicial e trecho final de uma estrada.
Na criação de um modelo de entidades-relacionamento para o problema descrito acima, marque a alternativa
correta:
A
TRECHO será modelada como uma especialização de ESTRADA.
B
TRECHO pode ser modelada como uma entidade fraca com relação a ESTRADA.
C
O apelido da estrada vai ser o atributo identificador pois é o nome pelo qual a estrada é mais conhecida.
D
A classificação das estradas gerará três atributos para a entidade ESTRADA: Federal, estadual e municipal.
E
Teremos três entidades para representar trecho: TRECHO_INICIAL, TRECHO_FINAL e TRECHO. Sendo
TRECHO uma entidade fraca que se relaciona com as outras duas.
Resposta correta
Resposta correta: B
Gabarito comentado
6
Marcar para revisão
Para responder à próxima questão, considere o texto a seguir:
A empresa Express conta com diversas equipes de desenvolvimento, nas áreas de software em geral, incluindo
técnicas estruturadas e de orientação a objetos. Essas equipes estão em constante aperfeiçoamento, visando
mantê-las sempre atualizadas com as técnicas mais recentes da engenharia de software, incluindo-se aí a área de
bancos de dados.
A Express atende clientes de diversos perfis, abrangendo pequenas, médias e grandes empresas. Dessa forma,
os sistemas de computação solicitados também atendem a esse perfil, compreendendo sistemas de pequeno,
médio e grande porte.
A Express conta com equipes especializadas, de grande experiência nas áreas acima destacadas, estando,
portanto, apta a atender desde um simples produto até um grande sistema de software. Dessa forma, os produtos
desenvolvidos pela Express possuem, normalmente, uma qualidade bastante apurada, o que pode ser verificado
pelas diversas técnicas existentes.
Uma das normas da Express é a de produzir documentação de excelente qualidade, cuja finalidade é não apenas
para entrega aos clientes, mas também para possibilitar a manutenção adequada dos produtos desenvolvidos.
No projeto de seus bancos de dados, a Express faz uso da modelagem relacional, na qual é necessário definir os
domínios dos atributos de uma relação. Um domínio é considerado atômico se, na aplicação em questão:
A
O comprimento máximo de seus valores tiver até 255 caracteres.
B
Seus elementos forem considerados como indivisíveis.
C
Não houver caractere especial nos valores dos atributos, tais como $ e @.
D
Forem admitidos apenas letras e espaços como caracteres válidos.
E
Não forem admitidos valores nulos.
Resposta correta
Resposta correta: B
Gabarito comentado