Apostila Fic Dev2 BD Final
Apostila Fic Dev2 BD Final
Apostila Fic Dev2 BD Final
MINISTRO DA EDUCAÇÃO
Renato Janine Ribeiro
DIAGRAMAÇÃO E ARTE
João Pedro Rodrigues Vilela
Leonardo Ribeiro de Alcântara
Produção Editorial
Ficha Catalográfica
Cuiabá/MT - 2023
Texto Introdutório
Bancos de dados
SUMÁRIO
1 Introdução à Banco de Dados 6 4.1 Linguagem SQL 45
1.1 O que é um Banco de Dados? 8 4.2 Linguagem de Definição de Da-
1.2. Do BIT ao Big Data: Evolução dos dos (DDL) 45
Bancos de Dados 11 5 Data Manipulation Language (DM
1.3. Diferentes tipos de usuários de L) 50
Bancos de Dados e suas responsa- 5.1 Data Manipulation Language
bilidades 14 (DML)52
1.4. Modelagem Conceitual 17 5.2 INSERT 52
1.5. Modelo Entidade-Relaciona- 5.3 DELETE 53
mento (MER) 18 5.4 UPDATE 54
1.6. Ferramentas para modelagem 5.5 SELECT 55
21
6 O Comando SELECT: Junções 59
2 Modelagem Lógica e Modelagem
Relacional 23 6.1 Junções 61
2.1 Modelo Lógico 25 6.2 Junção Interna 63
2.2 Modelo Relacional 26 6.3 Junção Interna – USING e INNER63
3 Mapeamento do Modelo Concei- 6.4 Junção utilizando operadores
tual para o Modelo Lógico 30 (<, >) 65
3.1 Mapear entidades e seus atribu- 6.5 Junção externa 66
tos33 7 Agregação, Visão e Subconsulta
3.2 Mapear relacionamento relacio- 74
namentos e seus atributos 34 7.1 Funções Agregadas 76
3.2.1 - Relacionamento 1:1 (um para 7.1.1 Função Contador (COUNT) 77
um)34
7.1.2 Função Média (AVG) 78
3.2.2 - Mapear relacionamentos 1:n
7.1.3 Função Soma (SUM) 79
(um para n) 35
7.1.4 Funções de Mínimo e Máximo
3.2.3 Mapear relacionamentos n:n
(MIN e MAX )80
(muitos para muitos) 36
7.2 Usando GROUP BY na cláusula
3.3 Mapear Generalização/Especia-
WHERE81
lização38
7.2.1 GROUP BY com HAVING 81
3.4. Conclusão 39
7.2.2 Usando GROUP BY no padrão
4 Linguagem SQL, definição de da-
SQL82
dos (DDL) 40
5
Banco de dados
6
Bancos de dados
Notas
7
Dia 1
INTRODUÇÃO À
BANCO DE DADOS
CÉSAR EDUARDO GUARIENTI
Bancos de dados
Desafio:
Criar um Diagrama de Entidade Relacionamento (Modelo Conceitual) de
acordo com o que foi pedido na Atividade 1 de Algoritmos, do exemplo da
escola com diretor, professores e disciplinas. Considere que a escola pode
ter ensino fundamental, médio e superior. Acrescente a entidade “Estudan-
te”.
Objetivos da seção
9
Cap 1: Introdução
10
Bancos de dados
11
Cap 1: Introdução
12
Bancos de dados
13
Cap 1: Introdução
14
Bancos de dados
15
Cap 1: Introdução
16
Bancos de dados
17
Cap 1: Introdução
18
Bancos de dados
Notas
Bancos de dados possuem sistemas complexos que re-
querem a colaboração de várias funções e responsabilida-
des para funcionar corretamente. Cada tipo de usuário de
banco de dados desempenha um papel crítico no gerencia-
mento e na utilização das informações armazenadas nesses
sistemas. Essa diversidade de papéis garante que os dados
sejam gerenciados de maneira eficiente, segura e conforme
as regulamentações aplicáveis, garantindo que a organiza-
ção possa extrair valor máximo de suas informações.
19
Cap 1: Introdução
20
Bancos de dados
21
Cap 1: Introdução
22
Bancos de dados
23
Cap 1: Introdução
24
Dia 2
Modelagem Lógica e
Modelagem Relacional
CÉSAR EDUARDO GUARIENTI
Cap 2: Modelagem Lógica e racional
Desafio:
Fazer a Modelagem Lógica de acordo com o que foi pedido na Atividade
1 de Algoritmos, do exemplo da escola com diretor, professores e discipli-
nas. Considere que a escola pode ter ensino fundamental, médio e superior.
Acrescente a entidade “Estudante”.
Objetivos da seção
26
Bancos de dados
27
Cap 2: Modelagem Lógica e racional
28
Bancos de dados
29
Cap 2: Modelagem Lógica e racional
30
Bancos de dados
31
Dia 3
Mapeamento do Modelo
Conceitual para o Modelo
Lógico
EDIE CORREIA SANTANA
Bancos de dados
Desafio:
Considere os conceitos e técnicas que serão estudados nesta aula para de-
finir o mapeamento do modelo entidade relacionamento (ver a Figura 3.1)
para o modelo relacional.
Objetivos da seção
• Mapear os seguintes conceitos: entidades, atributos e relacionamen-
tos;
33
Cap 3: Mapeamento para os modelos
Figura 3.2 - Fases do projeto de banco de dados. Fonte: (Elmasri e Navate (2005))
34
Bancos de dados
3. Mapear Generalização/Especialização.
35
Cap 3: Mapeamento para os modelos
36
Bancos de dados
37
Cap 3: Mapeamento para os modelos
38
Bancos de dados
39
Cap 3: Mapeamento para os modelos
40
Bancos de dados
Notas
3.4. Conclusão
41
Cap 3: Mapeamento para os modelos
Professor_trabalha_Escola(matricula, idEscola)
matricula referencia Professor
idEscola referencia Escola
42
Dia 4
Desafio:
Uma empresa contratou uma outra empresa para criar um banco de dados
para uma rede social, mas a empresa contratada não conseguiu concluir
o serviço de modelagem. A empresa contratante agora pediu a sua ajuda
para criar/consertar as tabelas necessárias para o banco de dados. Utilize a
descrição de Mini Mundo e o Modelo Lógico deixados pela empresa contra-
tada para criar as tabelas com as respectivas colunas e chaves primárias.
Lembre-se: a empresa não conseguiu concluir o serviço
Descrição de minimundo:
Uma rede social para compartilhamento de fotos e vídeos online. A
plataforma permite que os usuários criem perfis, publiquem fotos e ví-
deos, sigam outros usuários, comentem e curtam publicações, partici-
pem de grupos de interesse e recebam notificações sobre atividades
relevantes em suas contas. Os usuários podem interagir com a plata-
forma por meio de um aplicativo móvel ou de um site.
44
Bancos de dados
Objetivos da seção
• Apresentar os conceitos fundamentais da Linguagem SQL, incluindo
a sintaxe básica de comandos DDL (CREATE, ALTER, DROP);
45
Cap 4: Linguagem SQL
46
Bancos de dados
Notas
47
Cap 4: Linguagem SQL
48
Bancos de dados
<restrições da tabela>
);
areaFormacao INT,
especialidade INT,
nome INT
);
Alteração de Estruturas
O comando SQL ALTER é utilizado para alterar estruturas
do banco de dados. Com esse comando podemos alterar o
banco de dados e as tabelas. Por exemplo, para alterar um
banco de dados, a sintaxe do comando SQL é:
49
Cap 4: Linguagem SQL
50
ALTER TABLE <nome da tabela> RENAME TO
Renomear tabela
<novo nome da tabela>;
51
Dia 5
Data Manipulation
Language (DML)
MARCOS PAULO DE MESQUITA
Bancos de dados
Desafio:
O módulo de gestão de atribuição de aulas da plataforma tecnológica da
Secretaria de Ciência, Tecnologia e Inovação já está em fase de testes e
você precisa popular o banco de dados e gerar alguns relatórios. Você de-
verá cadastrar novas escolas, professores, disciplinas e fazer atribuições de
disciplinas a professores. Um relatório de atribuição para cada escola deve-
rá ser criado.
Objetivos da seção
• Inserir registros numa tabela de um banco de dados;
53
Cap 5: Data Manipulation Language
5.2 INSERT
54
Bancos de dados
55
Cap 5: Data Manipulation Language
5.3 DELETE
56
Bancos de dados
57
Cap 5: Data Manipulation Language
5.5 SELECT
Onde:
58
Bancos de dados
59
Cap 5: Data Manipulation Language
60
Dia 6
O Comando SELECT:
Junções
ELMO BATISTA DE FARIA
Cap 6: O Comundo SELECT
Desafio:
Considerando o banco de dados da Escola, foram solicitadas pelos diretores
algumas informações sobre os alunos e os professores.
Qual a carga horaria das disciplinas e os professores que ministram estas
disciplinas.
Também foi detectada um problema nas informações disponíveis a Escola,
não foram identificados os cursos que a escola oferece. Sendo assim insira a
tabela curso e faça as devidas ligações com as demais tabelas.
Após a inserção da tabela curso, liste os cursos, seus professores e os alunos
matriculados em cada disciplina, destes cursos.
Objetivos da seção
• Compreender o conceito de junção e desenvolver consultas com
objetivo de melhorar a gestão das escolas.
62
Bancos de dados
6.1 Junções
Esta operação conecta as colunas entre tabelas linha a li-
nha selecionando as linhas onde a condição de junção for
verdadeira. Pode envolver poucas tabelas em consultas co-
muns ou várias tabelas como em relatórios.
FROM “ESCOLA” e
ON p.matricula = e.fk_professor_matricula
ORDER BY p.nome;
“nome” “nome”
63
Cap 6: O Comundo SELECT
Tabela_1 Tabela_2
SELECT *
FROM tabela_1
COL_1 COL_1
-------- ---------
a a
b a
c a
a b
b b
64
Bancos de dados
c b
Notas
a c
b c
c c
SELECT <listaCampos>
FROM <Tabela1>
65
Cap 6: O Comundo SELECT
FROM categoria c
FROM categoria c
• A lista das colunas que devem ser mostradas das tabelas en-
volvidas é definidas após o comando SELECT.
66
Bancos de dados
FROM “ESCOLA” e
ON p.matricula = e.fk_professor_matricula
ORDER BY p.nome;
“nome” “diretor”
67
Cap 6: O Comundo SELECT
FROM “ESCOLA” e
ON p.matricula = e.fk_professor_matricula
“nome” “diretor”
FROM “ESCOLA” e
“nome” “diretor”
68
Bancos de dados
FROM “ESCOLA” e
69
Cap 6: O Comundo SELECT
ON s.fk_escola_idescola = e.idescola
“escola” ”aluno”
[null] “marcos”
FROM “ESCOLA” e
ON s.fk_escola_idescola = e.idescola
“aluno”
70
Bancos de dados
“marcos”
Notas
FROM “ESCOLA” e
ON s.fk_escola_idescola = e.idescola
“escola” “aluno”
71
Cap 6: O Comundo SELECT
Operação de SELF-JOIN
Operação de SELF-JOIN
FROM “ESTUDANTE” A1
ORDER BY A1.nome
“nome” “nome”
“Carlos” “Manoela”
“Carlos” “Maria”
“Carlos” “Kathy”
“Carlos” “joão”
“Carlos” “marcos”
“joão” “marcos”
“joão” “Kathy”
72
Bancos de dados
“joão” “Maria”
Notas
“joão” “Manoela”
“joão” “Carlos”
“Kathy” “Carlos”
“Kathy” “Manoela”
“Kathy” “Maria”
“Kathy” “joão”
“Kathy” “marcos”
“Manoela” “Carlos”
“Manoela” “marcos”
“Manoela” “joão”
“Manoela” “Kathy”
“Manoela” “Maria”
“marcos” “Carlos”
“marcos” “Manoela”
“marcos” “Maria”
“marcos” “Kathy”
“marcos” “joão”
“Maria” “marcos”
“Maria” “Manoela”
“Maria” “Kathy”
73
Cap 6: O Comundo SELECT
ORDER BY A1.nome
“nome” “nome”
“Carlos” “Manoela”
“Carlos” “Maria”
“Carlos” “Kathy”
“Carlos” “joão”
“Carlos” “marcos”
“joão” “marcos”
“joão” “Kathy”
“joão” “Maria”
“joão” “Manoela”
“joão” “Carlos”
“Kathy” “Carlos”
“Kathy” “Manoela”
“Kathy” “Maria”
“Kathy” “joão”
“Kathy” “marcos”
“Manoela” “Carlos”
“Manoela” “marcos”
74
Bancos de dados
“Manoela” “joão”
Notas
“Manoela” “Kathy”
“Manoela” “Maria”
“marcos” “Carlos”
“marcos” “Manoela”
“marcos” “Maria”
“marcos” “Kathy”
“marcos” “joão”
“Maria” “marcos”
“Maria” “Manoela”
“Maria” “Kathy”
“Maria” “joão”
“Maria” “Carlos”
Exemplo 2 :
FROM “ESTUDANTE” A1
ORDER BY A1.nome
75
Dia 7
Agregação, Visão e
Subconsulta
ELMO BATISTA DE FARIA
Bancos de dados
Desafio:
Considerando o banco de dados da Escola, foram solicitadas pelo departa-
mento das escolas algumas informações, como:
6. Crie uma view que mostre o professor que atuou nas disciplinas de
Objetivos da seção
• Compreender o conceito de Agregação, visão e subconsulta, desen-
volver consultas com objetivo de melhorar a gestão das escolas.
77
Cap 7: Agregação, Visão e Subconsulta
“Maria” “joão”
“Maria” “Carlos”
Exemplo 2 :
FROM “ESTUDANTE” A1
ORDER BY A1.nome
78
Bancos de dados
SELECT *
FROM “DISCIPLINA” d
SELECT COUNT(*)
FROM “ESTUDANTE”;
“count”
79
Cap 7: Agregação, Visão e Subconsulta
FROM “ESTUDANTE”;
“Número de Estudantes”
FROM “DISCIPLINA” d
80
Bancos de dados
Notas
73.333333333333333
FROM “DISCIPLINA” d
73.333333333333333
81
Cap 7: Agregação, Visão e Subconsulta
FROM “DISCIPLINA” d
220
Exemplos:
Um gestor quer a soma de todas as notas do estudante 123123.
FROM “Estudante_Disciplina” ed
“Notas”
120
82
Bancos de dados
Exemplo:
A função MIN retorna o menor valor dos nomes de estudan-
tes considerando a ordem alfabética dos dados. A função
MAX() retorna os funcionários que possui os maiores valores
em ordem alfabética.
FROM “ESTUDANTE” e
“min” “max”
“Carlos” “Maria”
FROM “Estudante_Disciplina” ed
GROUP BY ed.fk_disciplina_codigo;
83
Cap 7: Agregação, Visão e Subconsulta
3 2
2 1
FROM “Estudante_Disciplina” ed
GROUP BY ed.fk_disciplina_codigo
84
Bancos de dados
3 2
Notas
7.3 Subconsultas
Exemplo:
FROM “Estudante_Disciplina” ed
From “ESTUDANTE”
85
Cap 7: Agregação, Visão e Subconsulta
“disciplina”
86
Bancos de dados
• int (integer)
• smallint (small integer)
• decimal
• float
FROM “Estudante_Disciplina” ed
87
Cap 7: Agregação, Visão e Subconsulta
From “ESTUDANTE” e
“disciplina”
3
7.3.5 Subconsultas e o Operador NOT IN
FROM “Estudante_Disciplina” ed
From “ESTUDANTE” e
“disciplina”
88
Bancos de dados
Notas
Uma Subconsulta pode conter outras subconsultas. Quan-
do a cláusula WHERE de uma subconsulta possui seus objetos
ligados a uma outra subconsulta diz consultas aninhadas.
FROM “Estudante_Disciplina” ed
From “ESTUDANTE” e
WHERE fk_escola_idescola =
(Select es.idEscola
FROM “ESCOLA” es
))
“disciplina”
89
Cap 7: Agregação, Visão e Subconsulta
Comando ALL
FROM “Estudante_Disciplina” ed
From “ESTUDANTE” e
“disciplina”
90
Bancos de dados
Comando ANY
Notas
FROM “Estudante_Disciplina” ed
From “ESTUDANTE” e
91
Cap 7: Agregação, Visão e Subconsulta
“disciplina”
92
Bancos de dados
ON pd.fk_professor_matricula = p.matri-
cula
ORDER BY p.nome;
93
Cap 7: Agregação, Visão e Subconsulta
SELECT *
FROM “ESCOLA”;
CREATE VIEW
94
Bancos de dados
95
Dia 8
Dimensões de um SGBD
JOSIEL MAIMONE DE FIGUEIREDO
Bancos de dados
Desafio:
Considere as 3 demandas apresentadas a seguir:
1) É preciso armazenar as rotas de todos os ônibus da cidade de Cuiabá de
forma a auxiliar na gestão de transportes. É necessário envolver os aspectos
de pontos de ônibus, horário de passagem em cada ponto e a quantidade
de passageiros em cada ponto e horário. Deseja-se saber quais bairros pos-
suem maior demanda. Além disso, é necessário abastecer um aplicativo de
celular que mostra em tempo real o posicionamento de cada ônibus, bem
como a quantidade de passageiros.
2) Para utilização mais adequada das centenas de dispositivos de rada-
res fotográficos espalhados nas avenidas da cidade de Cuiabá, resolveu-se
capturar a imagem de todos os veículos, independente de multas. Assim
torna possível registrar o volume do tráfego bem como identificar acidentes
e/ou carros com boletins de ocorrências ativos.
3) Os setores de pronto atendimento nos hospitais municipais e postos de
saúde do Estado de MT resolveram armazenar os prontuários de todos os
pacientes, atendimentos, exames e profissionais de saúde envolvidos. Além
do controle interno, todas as informações devem ser enviadas para a Se-
cretaria Estadual de Saúde. Sabe-se que em torno de dez mil pessoas são
atendidas diariamente em cada unidade de saúde.
Apresente uma listagem envolvendo os tipos de dados, a quantidade de da-
dos e a infraestrutura computacional para cada demanda.
Objetivos da seção
• Compreender os conceitos relacionados com as principais dimen-
sões de um SGBD Relacional.
97
Cap 8: Dimensão de um SGBD
8.1.1 Cliente/Servidor
É a arquitetura universal de um SGBD, no qual o mesmo fun-
ciona como um servidor de dados respondendo requisições de
um cliente. Dessa forma, o Servidor recebe uma String SQL de um
Cliente e responde com os dados.
Com a evolução das infraestruturas computacionais o servidor
de banco de dados passou a ser considerado como mais um ser-
viço a ser mantido na infraestrutura de hardware e software. Des-
sa forma, atualmente, temos uma variedade de configurações
de hardware e software, e a possibilidade de partes deles ou até
mesmo nenhum deles estarem implantados fisicamente dentro
da corporação ou fora através do uso de serviços de nuvem. Para
o servidor de banco de dados, as formas principais são listadas a
seguir.
8.1.2 On Premise
Uma arquitetura na qual tanto o hardware quanto o software
estão localizados nas instalações prediais da corporação. Dessa
forma, toda responsabilidade relacionada com a segurança, ba-
ckups e upgrades são de responsabilidade da corporação.
8.1.3 Cloud
Envolve o contexto no qual o SGBD está instalado em nuvem
computacional (que pode ser privada ou pública) e a corporação
não se preocupa com os aspectos de hardware envolvidos. Além
disso, um ambiente cloud possui a funcionalidade de elasticida-
de para atendimento das demandas, ou seja, se a demanda au-
menta, a nuvem aloca automaticamente mais hardware, que são
desalocados quando a demanda diminui.
O uso de nuvem computacional como infraestrutura envolve
várias possibilidades, sendo que tudo é tratado como um serviço
fornecido pela nuvem. Assim, podemos ter o hardware como um
serviço ou qualquer software, desde o sistema operacional até o
próprio SGBD como serviço.
Para quem utiliza o SGBD, o que muda é apenas a conexão com
98
Bancos de dados
99
Cap 8: Dimensão de um SGBD
100
Bancos de dados
101
Cap 8: Dimensão de um SGBD
102
Bancos de dados
103
Cap 8: Dimensão de um SGBD
Tamanho em
Tipo disco Intervalo
bigint -9.223.372.036.854.775.808
8 bytes
(9*1018) a
104
Bancos de dados
double
precision 8 bytes Precisão de 15 dígitos decimais
-92.233.720.368.547.758,08 (9*1015) a
money 8 bytes
+92.233.720.368.547.758,08 (9*1015)
character varying(n),
Tamanho variável limitado a “n”
varchar(n)
105
Cap 8: Dimensão de um SGBD
Tamanho em Descrição
Tipo disco (precisão) Intervalo
4713 AC
date 4 bytes Data (dia)
5874897 DC
00:00:00
time [ (p) ] [ without
time zone ] 8 bytes hora do dia(ms) 24:00:00
time [ (p) ] with time hora do dia com fuso horá- 00:00:00+1559
zone 12 bytes rio (ms) 24:00:00-1559
106
Bancos de dados
107
Cap 8: Dimensão de um SGBD
108
Dia 9
Projeto Físico
JOSIEL MAIMONE DE FIGUEIREDO
Cap 9: Projeto Físico
Desafio:
Considere o desafio do primeiro dia. Responda às seguintes perguntas:
1) Qual o espaço ocupado em disco de cada tabela?
a) ao iniciar o uso
b) após 6 meses
c) após 1 ano
2) Quais as duas consultas que mais demandam processamento. Faça a
estimativa da quantidade de dados que cada uma manipula por dia.
3) Com o projeto de crescimento das tabelas e das suas consultas, projeto
uma distribuição que utilize discos HD de diferentes velocidades e SSD.
4) Distribua as tabelas em mais de um esquema.
Objetivos da seção
• Compreender os conceitos relacionados com o Projeto Físico.
110
Bancos de dados
111
Cap 9: Projeto Físico
Ano 1 Ano 2
Tamanho
Tabela Campo Tipo (bytes) Qtd. Tuplas
Espaço
Qtd. Tuplas
Espaço
Ocupado Ocupado
timestamp
data [ (p) ] com 8 10000 80000 100000 800000
fuso
Venda
cliente integer 4 40000 400000
Para cada vez que um cliente abre uma conexão com o SGBD,
uma sessão é iniciada. Essa sessão representa uma área de me-
mória do servidor na qual as requisições serão processadas. Nes-
se sentido, um servidor deve possuir memória suficiente para
atender as várias sessões abertas pelos vários clientes.
Nessas sessões são armazenados dados relativos às consultas
demandadas, ou seja, além da SQL da consulta, são armazena-
dos dados intermediários e dados dos resultados finais. Caso a
112
Bancos de dados
113
Cap 9: Projeto Físico
114
Bancos de dados
Schema(esquema).
É onde os objetos de armazenamento dão organizados.
É possível fazer analogia de que um esquema é uma pasta
onde incluímos nossos objetos (tabelas e outros recursos de
armazenamento). Um esquema pode acessar objetos de ou-
tros esquemas desde que dentro do mesmo database. Para
criação de um esquema usamos o comando CREATE SCHE-
MA.
SELECT *
FROM unemat.professor; // acessa a tabela pro-
fessor que está dentro do esquema unemat
115
Cap 9: Projeto Físico
SELECT *
FROM ufmt.professor;// acessa a tabela professor que
está dentro do esquema ufmt
9.3.2 Físico
Além da questão lógica de organização dos dados, tabelas e
objetos; é preciso saber onde no dispositivo de armazenamen-
to, normalmente arquivos no disco, que os database, esquemas e
objetos estão armazenados. Normalmente, esses aspectos físicos
são tratados pelo DBA que é quem gerencia os aspectos gerais
do SGBD. A ligação entre o lógico e o físico é feita pela tablespace.
a) Tablespace.
Uma tablespace é quem faz a ligação entre o lógico e o físi-
co, fazendo a ponte dos objetos com seus arquivos no disco. No
caso do PostgreSQL, uma tablespace corresponde a uma pasta.
Pode-se criar uma tablespace ou direcionar nossos objetos para
serem armazenados em tablespaces diferentes. Sendo pastas, as
tablespaces pode existir em discos diferentes, ou seja, podemos
direcionar objetos para HD, ou para SSD ou qualquer tipo de local
de armazenamento que o PostgreSQL tenha acesso. Pode-se criar
uma tablespace com o comando CREATE TABLESPACE (que deve
apontar para uma pasta vazia), e seu uso pelos objetos envolve a
cláusula TABLESPACE nos comandos CREATE ou ALTER.
116
Bancos de dados
117
Dia 10
Modelagem Lógica:
Normalização
NIELSEN CASSIANO SIMÕES
Bancos de dados
Desafio:
Considerando a imagem abaixo como modelo para a emissão de Nota Fis-
cal de Serviços de uma determinada cidade, proponha um esquema re-
lacional normalizado para o armazenamento dos dados das NFS-e dessa
cidade.
Objetivos da seção
119
Cap 10: Modelagem Lógica
120
Bancos de dados
Autorizado
SetorID Setor Data Empregado HIniP1 HFimP1 HIniP2 HFimP2 TotalHr HoraExtra
Por:
AD45
Administração
Loja 45
03/02/2022
MARCOS ROBERTO
DE JESUS 08:00 11:58 13:15 17:04 7,78 - -
AD45
Administração
Loja 45
03/02/2022 NIVALDO FERREIRA 08:02 12:10 13:30 17:25 8,05 - -
AD45
Administração
Loja 45
03/02/2022
SERGIO DOS
SANTOS 08:00 11:50 13:25 17:37 8,03 - -
AD45
Administração
Loja 45
03/02/2022
EDUARDO RIBEIRO
SANTANA 08:00 12:00 13:22 18:00 8,63 0,43 EDUARDO RIBEIRO
SANTANA
AD45
Administração
Loja 45
04/02/2022
ROBSON FERNAN-
DES MARTINS 08:00 12:02 13:18 17:08 7,87 - -
AD45
Administração
Loja 45
04/02/2022 NIVALDO FERREIRA 08:01 12:05 13:12 17:04 7,93 - -
AD45
Administração
Loja 45
04/02/2022
EDUARDO RIBEIRO
SANTANA 08:15 12:30 13:45 17:44 8,23 - -
AD45
Administração
Loja 45 04/02/2022
SERGIO DOS
SANTOS 08:22 12:29 13:30 17:02 7,65 - -
AD45
Administração
Loja 45
04/02/2022
MARCOS ROBERTO
DE JESUS 08:10 12:16 13:17 17:07 7,93 - -
121
Cap 10: Modelagem Lógica
SetorID Setor
AD45 Administração-Loja 45
ID Empregado
E001 MARCOS ROBERTO DE JESUS
122
Dia 11
DDL e Otimização de
Consultas
NIELSEN CASSIANO SIMÕES
Cap 11: DDL e Otimização de Consultas
Objetivos da seção
124
Bancos de dados
125
Cap 11: DDL e Otimização de Consultas
126
Bancos de dados
ANALYZE;
VACUUM;
127
Dia 12
CONTROLE DE
USUÁRIOS
WILLYAN ALVES DA SILVA
Bancos de dados
Desafio:
Com a nova lei de LGPD (Lei Geral de Proteção aos Dados) e visando o evitar
a possibilidade de alteração indevida de de um registro, foi solicitado que
fossem criados usuários para os programadores Júnior com permissão de
apenas leitura.
Objetivos da seção
129
Cap 12: Controle de Usuários
130
Bancos de dados
12.2 Grant
131
Cap 12: Controle de Usuários
12.3 Revoke
O comando REVOKE é usado para revogar privilégios concedi-
dos. Por exemplo, para revogar o direito de SELECT concedido ao
usuário “usuario_aluno” na tabela “disciplina”, o seguinte coman-
do pode ser utilizado:
132
Dia 13
CONTROLE DE
TRANSAÇÕES
WILLYAN ALVES DA SILVA
Cap 13: Controle de Transações
Desafio:
Considere uma situação em que um sistema web é usado por milhares
de usuários simultaneamente, ocorrendo que em período de fechamento,
muitos usuários começaram a manipular dados na mesma tabela. Embora
cada usuário geralmente altere um registro diferente, houve um impasse
(deadlock) impedindo os demais usuários de continuar utilizando o ban-
co. Com base nestas informações identifique uma situação que poderia ter
ocorrido e qual estratégia poderia ser adotada?
Objetivos da seção
• Entender o conceito de transações concorrentes;
134
Bancos de dados
135
Bancos de dados
13.1 Transações
Uma transação em banco de dados é uma unidade lógica Notas
137
Cap 13: Controle de Transações
13.4 Bloqueios
138
Bancos de dados
13.5 MVCC
139
Cap 13: Controle de Transações
13.6 Logs
Os logs em bancos de dados são registros que armazenam in-
formações sobre as operações realizadas no banco de dados. Es-
ses registros permitem que seja possível recuperar informações
em caso de falhas ou erros no sistema, garantindo assim a inte-
gridade dos dados.
Os logs podem ser utilizados para diferentes propósitos, como:
140
Dia 14
PROCEDIMENTOS
ARMAZENADOS
MARCOS PAULO DE MESQUITA
Cap 14: Procedimentos Armazenados
Desafio:
Para aumentar a performance do sistema e incrementar a segurança sobre
os dados, algumas novas funcionalidades foram adicionadas ao módulo de
gestão de atribuição de aulas da plataforma tecnológica da Secretaria de
Ciência, Tecnologia e Inovação. Deseja-se que a quantidade de disciplinas
alocadas a um professor seja atualizada automaticamente a cada atribui-
ção feita para ele e por questões legais nenhum professor poderá ter mais
que 40h de aulas semanais atribuídas a ele.
Você deverá implementar no banco de dados estes dois novos requisitos.
Objetivos da seção
• Automatizar funcionalidades no banco de dados;
142
Bancos de dados
14.1 Funções
Notas
$$
DECLARE
Declaração de variáveis
BEGIN
Corpo da função
END;
$$ LANGUAGE linguagem;
Vamos a exemplos.
F1: Estamos interessados numa função que soma dois nú-
meros inteiros. A soma de dois inteiros sempre retorna um
inteiro.
143
Cap 14: Procedimentos Armazenados
RETURNS int AS
$$
DECLARE
z int;
BEGIN
z = x + y;
RETURN z;
144
Bancos de dados
$$
DECLARE
nomePro text;
BEGIN
RETURN nomePro;
END;
$$ LANGUAGE plpgSQL;
AS
$$
DECLARE
total int;
BEGIN
145
Cap 14: Procedimentos Armazenados
RETURN total;
END;
$$ LANGUAGE plpgsql;
F4: Agora que a coluna foi adicionada, como poderia ser uma
função para atualizar cada tupla com a quantidade de disciplinas
que eles têm atribuída?
AS
$$
146
Bancos de dados
BEGIN
Notas
FOR matriculaPro in select matricula from Pro-
fessor LOOP
END LOOP;
SELECT atualiza_nroDisciplinas();
14.2 Cursores
147
Cap 14: Procedimentos Armazenados
begin;
close cur;
-- fecha o cursor
148
Bancos de dados
end;
Notas
RETURNS trigger AS
$$
DECLARE
Declaração de variáveis
BEGIN
Corpo da função
149
Cap 14: Procedimentos Armazenados
RETURN new/old;
END;
$$ LANGUAGE linguagem;
150
Bancos de dados
Notas
151