Explorar E-books
Categorias
Explorar Audiolivros
Categorias
Explorar Revistas
Categorias
Explorar Documentos
Categorias
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: