Prévia do material em texto
_________________________________________
1
_________________________________________
2
Tecnologia da Informação
TEORIA
Modelo Relacional
SUMÁRIO
DIRETIVAS DA AULA ............................................................................................................... 4
GLOSSÁRIO DE TERMOS ......................................................................................................... 6
1. MODELO RELACIONAL ................................................................................................... 8
1.1 Conceitos do modelo relacional ......................................................................................... 8
1.2 Doze (Treze) Regras de Codd ......................................................................................... 11
1.3 Tabelas (relações) ............................................................................................................. 16
1.4 Visões (views) ................................................................................................................... 22
1.5 Índice (index) ................................................................................................................... 26
1.6 Chaves .............................................................................................................................. 32
1.7 Relacionamentos .............................................................................................................. 39
1.8 Restrições de integridade ................................................................................................. 44
1.9 Álgebra relacional ............................................................................................................ 48
1.10 Normalização ................................................................................................................... 57
1.10.1 As formas normais ....................................................................................................... 57
1.10.2 TEMA AVANÇADO: análise de dependências e formas normais.............................. 71
1.10.3 TEMA AVANÇADO: axiomas das dependências funcionais ..................................... 78
1.10.4 TEMA AVANÇADO: definições formais para as formas normais ............................. 82
2. ESQUEMAS DE AULA ..................................................................................................... 84
3. MAPA MENTAL ................................................................................................................ 89
4. REFERÊNCIAS .................................................................................................................. 90
_________________________________________
3
A nossa aula é bem esquematizada, então para facilitar o seu acesso aos esquemas, você
pode usar o seguinte índice:
Esquema 1 - Modelo relacional: conceitos básicos. ................................................................................. 9
Esquema 2 – Doze (treze) regras de Codd para os bancos de dados relacionais. .................................................. 13
Esquema 3 – Tabela (relação). ................................................................................................... 17
Esquema 4 – Visão (view) e visão materializada (materialized view). ........................................................... 22
Esquema 5 – Índices. ............................................................................................................. 28
Esquema 6 – Chaves. ............................................................................................................. 36
Esquema 7 – Relacionamentos. ................................................................................................... 42
Esquema 8 – Restrições de integridade. ........................................................................................... 45
Esquema 9 – Operações com relações (álgebra relacional). ........................................................................ 54
Esquema 10 – Formas normais. .................................................................................................. 66
Esquema 11 – Axiomas de dependências funcionais. .............................................................................. 79
_________________________________________
4
DIRETIVAS DA AULA
Esta aula cobre o modelo relacional, também citado nos editais como bancos de dados
relacionais. É o modelo mais cobrado de bancos de dados em provas de concursos, então é
de suma importância que você atente bastaste para o conteúdo ministrado nessa aula.
Começaremos com uma introdução ao modelo relacional e seus aspectos fundamentais, que
não são diretamente cobrados, mas são importantes para a compreensão geral.
Discutiremos as regras de Codd, que definem um banco de dados relacional. Não é
necessário entender essas regras em profundidade, mas é útil ter uma noção geral de sua
existência e função para responder a questões literais.
A seguir, abordaremos a estrutura da tabela (ou relação), incluindo tuplas, atributos e
domínios. Esses conceitos são essenciais tanto para questões diretas quanto para o
entendimento de tópicos subsequentes.
Abordaremos as visões e índices, destacando a diferença entre uma visão e uma visão
materializada. Conheça essas definições, pois as questões costumam ser diretas.
Exploraremos os conceitos de chaves, incluindo superchave, chave, chave candidata e chave
primária, além da chave estrangeira. Esses conceitos simplesmente despencam em prova,
então você precisa ter atenção redobrada aqui.
Você precisa saber distinguir entre os tipos de relacionamentos (1:1, 1:N e N:M) e como
eles são implementados em bancos relacionais. Este tópico é mais direto e é melhor
abordado de forma rápida, pois é mais relevante para a modelagem conceitual (aula própria).
As principais restrições de integridade serão consolidadas em uma seção específica para
organizar seu entendimento. As questões sobre este tema são geralmente diretas.
O tópico sobre operações de álgebra relacional não é tão cobrado pela maioria das bancas,
mas é útil ter noções básicas e saber as definições das operações para acertar aquelas
questões mais diretas.
Finalmente, abordaremos as formas normais, um dos tópicos mais cobrados. Você deve
conhecer os conceitos e palavras-chave associados a cada forma normal. Além disso, saber
identificar a forma normal de uma tabela é crucial para responder a muitas questões. A aula
também incluirá alguns tópicos avançados, conforme necessário para bancas específicas que
puxam um pouco mais no tema.
Nesta aula, estude tudo com carinho, pois como dito trata de um dos modelos mais cobrados,
mas ligue o modo atenção total nos seguintes pontos:
▪ 1.3 Tabelas
▪ 1.4 Visões
▪ 1.5 Índices
▪ 1.6 Chaves
▪ 1.8 Restrições de Integridade
▪ 1.10.1 As formas normais
_________________________________________
5
ORIENTAÇÕES ESPECIAIS PARA AS BANCAS
CEBRASPE
A banca CEBRASPE costuma “amar” os conteúdos dessa aula. Sendo uma banca mais
conceitual, então aqui ela encontra muito subsídio para as questões. Logo, se está estudando
para um concurso dessa banca, a sua atenção aqui deve ser redobrada.
FCC
A FCC costuma não cobrar tantas questões conceituais, focando principalmente nas formas
normais. Contudo, não recomendo que vá direto para esse tema, pois seu entendimento é
facilitado se você souber as estruturas descritas nos demais tópicos.
FGV
A banca FGV costuma ir um pouco além na cobrança de alguns conteúdos. Os conceitos de
chave são bem explorados por essa banca, mas formas normais são as queridinhas dessa
banca, contudo ela prefere os temas avançados, principalmente a análise de dependências
funcionais e os axiomas. Assim, se você estuda para essa banca, muitasalario matricula_chefe
134512
João
Aprovado
13.002,03
123
Departamento de
Auditoria
10
134512
251218
Maria
Concursada
5.519,61
456
Grupo de Auditoria
Operacional
5 251218
124578
Paulo
Passou
13.002,03
789 Gerência de Pregão 3 NULL
131820
Glória
Nomeada
5.519,61
A tabela DEPARTAMENTO possui como chave primária o atributo codigo que identifica
unicamente cada linha. Indica também os nomes dos departamentos, a quantidade de
servidores e a matricula do servidor chefe do setor. O atributo matricula_chefe identifica
o chefe do departamento e é uma chave estrangeira que faz referência ao atributo matricula
da tabela SERVIDOR.
Todos os valores de matricula_chefe devem se referir a valores existentes na tabela
Servidor ou ser nulos. Por exemplo, as matrículas 134512 e 25128 estão corretamente
associadas aos servidores João e Maria. O valor NULL na terceira linha indica que a
Gerência de Pregão não tem um chefe cadastrado, o que é permitido. Porém, um valor
789123 não seria válido, pois não há servidor com essa matrícula na tabela SERVIDOR.
_________________________________________
35
ATENÇÃO!!!
A chave estrangeira de uma tabela deve referenciar a chave primária ou qualquer
chave candidata da outra tabela?
Pessoal, essa é uma daquelas típicas divergências que costumam pegar na hora da prova e
infelizmente não temos uma conclusão bem definida, pois as bancas costumam adotar ambos
os posicionamentos.
Como a chave primária é uma escolha (mais ou menos arbitrária) dentre as chaves
candidatas, basta que a chave estrangeira referencie uma chave CANDIDATA de outra
tabela e não necessariamente uma chave primária. Porém, várias são as questões que dão
como correta a afirmação de que a chave candidata referencia ou deve referenciar a chave
PRIMÁRIA da outra tabela.
Vejamos uma questão que afirma a possibilidade de relacionamento com a chave candidata:
(CESPE - 2008 - STF - Analista Judiciário - Tecnologia da Informação) Chaves
estrangeiras podem ser definidas como sendo um conjunto de atributos pertencentes a um
esquema de relação que constituem chaves primárias ou candidatas em outros esquemas
independentes.
Gabarito: Certo.
E agora uma que fala apenas de chave primária:
(CESPE - 2015 - TJ-DFT - Analista Judiciário - Analista de Sistemas) Em um banco
de dados relacional, a chave estrangeira que existe em uma tabela deve ser chave primária
em outra tabela.
Gabarito: Certo.
E para finalizar, uma questão que restringe à chave primária:
(CESPE - 2010 - TRT - 21ª Região (RN) - Analista Judiciário - Tecnologia da
Informação) Uma chave estrangeira é um atributo ou uma combinação de atributos em
uma relação, cujos valores são necessários para equivaler somente à chave primária de outra
relação.
Gabarito: Errado.
Sugiro os seguintes posicionamentos:
▪ Se a questão afirmar que a chave estrangeira pode referenciar a chave candidata,
aceite como CORRETO.
▪ Se a questão afirmar que a chave estrangeira deve referenciar a chave primária ou
deve fazer parte da chave primária, aceite como CORRETO.
▪ Se a questão for mais explícita e afirmar que a chave estrangeira referencia somente
a chave primária ou indicar que não pode referenciar uma chave candidata, marque
ERRADO.
_________________________________________
36
Vamos consolidar o nosso estudo sobre as chaves com um esquema!!!
Esquema 6 – Chaves.
20- (CESPE / CEBRASPE – MPE-TO - 2024 - Analista Ministerial) Julgue o item
a seguir, referente a banco de dados.
Em um banco de dados relacional, uma chave primária é o conjunto de um ou mais campos
utilizados para identificar um único registro na tabela.
Resolução:
Perfeitamente. A chave primária permite distinguir os registros de uma tabela. Cada
registro terá um valor diferente para a chave, permitindo que ele seja identificado e
diferenciado dos demais.
Suponha que matrícula seja a chave de uma tabela FUNCIONARIO. Logo, cada funcionário
será identificado e diferenciado dos demais através desse atributo. João poderá ter matrícula
123 e Maria 456. Todo funcionário deverá ter matrícula preenchida e não existirão dois
funcionários com matrículas iguais.
Gabarito: Certo.
21- (CESPE / CEBRASPE – 2024 – ANAC - Especialista em Regulação de Aviação
Civil) Acerca de bancos de dados relacionais, julgue o item que se segue.
Definir um atributo como chave do tipo entidade significa que a propriedade de unicidade
deve ocorrer para pelo menos uma entidade, portanto, quaisquer duas ou mais entidades
podem ter, ao mesmo tempo, o mesmo valor para o atributo-chave.
Resolução:
A chave de uma entidade, isto é, a chave primária garante a propriedade da unicidade.
Assim, duas entidades (ou dois registros) não devem possuir o mesmo valor para a chave.
Gabarito: Errado.
C
h
a
v
e
c
a
n
d
id
a
ta
Superchave
Conjunto de um ou
mais atributos que,
coletivamente, permitem
identificar de forma
exclusiva uma tupla.
Chave
Superchave com a
propriedade adicional de
que a remoção de
qualquer dos atributos
a faz deixar de ser
chave.
Chave primária
Chave candidata que é
escolhida pelo designer
de banco de dados
como o principal meio de
identificar tuplas.
Cada uma das
chaves possíveis em
uma relação.
Chave estrangeira
Associa registros
referenciando a chave
primária ou candidata de
outra relação.
_________________________________________
37
22- (CESPE / CEBRASPE - 2024 MPE-TO - Analista Ministerial) A respeito de
modelagem relacional, modelagem dimensional e normalização das estruturas de dados,
julgue o item que se segue.
Chave estrangeira é um campo que aponta para a chave primária de outra tabela ou da
mesma tabela, dessa forma, passa a existir uma relação entre duplas de duas tabelas ou de
uma única tabela.
Resolução:
Uma chave estrangeira (ou externa) é um atributo ou conjunto de atributos em uma
tabela que cria uma ligação lógica com a chave primária (ou candidata) de outra
tabela, permitindo a associação de registros entre elas. Uma tabela pode se referir a ela
mesma, formando um autorrelacionamento.
Imagine uma tabela PESSOA com os campos (CPF, nome, cpf_conjuge). Nesse caso, o
atributo cpf_conjuge é uma chave estrangeira que associa uma pessoa a outra pessoa, isto
é, um registro da tabela PESSOA com outro registro da mesma tabela.
Imagine os seguintes registros:
(123, João, 456)
(456, Maria, 123)
(789, Pedro, NULL).
Perceba que João é casado com Maria, pois, o cpf_conjuge de João faz referência ao de Maria
e, vice versa. Já Pedro não é casado, pois o valor de cpf_conjuge é NULL. De todo modo,
note que a chave estrangeira nesse caso faz referência a um campo da própria tabela.
Gabarito: Certo.
23- (CESPE / CEBRASPE - 2024 – MPO - Analista de Planejamento e
Orçamento) Em relação a banco de dados relacionais, julgue o seguinte item.
A chave estrangeira é definida como um conjunto de um ou mais campos para definir,
univocamente, um único registro.
Resolução:
A chave estrangeira não serve para identificar registros, mas sim para fazer associações
entre registros. A assertiva ficaria correta se fosse:
A chave estrangeira chave primária, chave candidata, chave ou superchave é definida
como um conjunto de um ou mais campos para definir, univocamente, um único registro.
Gabarito: Errado.
_________________________________________
38
24- (CESPE / CEBRASPE - 2024 – MPO - Analista de Planejamento e
Orçamento) Julgue o item a seguir a respeito de conceitos de banco de dados.
A chave utilizada em uma tabela de dados que referencia outra tabela é a chave primária.
Resolução:
A chave que referencia outra tabela é a chave estrangeira (ou externa). A chave primária
serve para identificar os registros de uma tabela.
O esquema a seguir resume os principais conceitosde chave no modelo relacional:
Gabarito: Errado.
25- (FGV - 2024 – TJ-MS - Técnico de Nível Superior) Os principais sistemas de
informação de uma organização armazenam seus dados transacionais em bancos de dados
relacionais que são estruturados em tabelas que se relacionam entre si por meio da
implementação de:
a) chaves;
b) índices;
c) matrizes;
d) métricas;
e) nós e arestas.
Resolução:
O relacionamento entre tabelas é realizado por meio das chaves estrangeiras.
Conceitualmente, uma chave estrangeira (ou externa) é um atributo ou conjunto de
atributos em uma tabela que cria uma ligação lógica com a chave primária (ou
candidata) de outra tabela, permitindo a associação de registros entre elas.
Gabarito: Letra A.
C
h
a
v
e
c
a
n
d
id
a
ta
Superchave
Conjunto de um ou
mais atributos que,
coletivamente, permitem
identificar de forma
exclusiva uma tupla.
Chave
Superchave com a
propriedade adicional de
que a remoção de
qualquer dos atributos
a faz deixar de ser
chave.
Chave primária
Chave candidata que é
escolhida pelo designer
de banco de dados
como o principal meio de
identificar tuplas.
Cada uma das
chaves possíveis em
uma relação.
Chave estrangeira
Associa registros,
referenciando a chave
primária ou candidata de
outra relação.
_________________________________________
39
1.7 Relacionamentos
Um relacionamento é uma associação entre as tabelas. O relacionamento existe quando
um ou mais dados de uma tabela estão relacionados de alguma forma com um ou mais dados
de outra tabela. Existe também relacionamento de dados de uma tabela com outros dados
desta mesma tabela, quando falamos em auto relacionamento.
A chave estrangeira é usada para promover os relacionamentos entre as tabelas. É
importante ressaltar que uma chave estrangeira faz a ligação lógica entre as tabelas,
portanto, o relacionamento entre tabelas não existe fisicamente.
Baseado na cardinalidade dos relacionamentos, isto é, no número de registros que um
registro pode se associar via relacionamento, podemos ter os seguintes tipos:
▪ Relacionamento um para um (1:1): neste tipo de relacionamento, cada registro
de uma tabela se relaciona a um único registro de outra tabela. Este
relacionamento é pouco comum nos modelos de bancos de dados relacionais.
Existem três abordagens para implementar esse relacionamento:
o Técnica da chave estrangeira: uma das duas tabelas possui a chave
estrangeira. As duas tabelas podem ter inclusive chaves estrangeiras
redundantes (duas tabelas).
o Técnica de relação mesclada: mescla-se as duas entidades em uma única
relação (uma única tabela).
o Técnica de relação de referência cruzada: configura-se uma terceira
tabela para realizar a referência cruzada das chaves primárias das duas
tabelas sendo ligadas (três tabelas).
EXEMPLIFICANDO!!!
Vejamos um exemplo de relacionamento 1:1.
Imagine uma escola com um Cadastro de Alunos na tabela Alunos e que apenas uma parte
deles participa da Banda da Escola. Por questões de projeto do Banco de Dados, podemos
criar uma Segunda Tabela "Alunos da Banda", a qual se relaciona com a tabela Alunos
através de um relacionamento do tipo Um para Um. Cada aluno somente é cadastrado
uma vez na Tabela Alunos e uma única vez na tabela Alunos da Banda. Poderíamos utilizar
o Campo Matrícula do Aluno como o Campo que relaciona as duas Tabelas.
Quando fosse necessário buscar as informações tais como nome, fone, etc, estas podem ser
recuperadas através do relacionamento existente entre as duas tabelas, evitando, com isso,
que a mesma informação (Nome, Rua, etc) tenha que ser duplicada nas duas tabelas,
inclusive aumentando a probabilidade de erros de digitação.
_________________________________________
40
▪ Relacionamento um para muitos (1:N): cada registro de uma tabela A pode ser
relacionar com mais de um registro da tabela B, no entanto cada registro da
tabela B está relacionado a apenas um elemento de A. Uma das tabelas (o lado um
do relacionamento) possui um campo que é a Chave Primária e a outra tabela (o lado
muitos) se relaciona através de um campo cujos valores relacionados podem se repetir
várias vezes.
EXEMPLIFICANDO!!!
Vejamos um exemplo de relacionamento 1:N.
Nas tabelas apresentadas anteriormente, cada Cliente somente é cadastrado uma única vez
na tabela de Clientes (por isso o campo Código do Cliente, na tabela Clientes, é uma chave
primária, indicando que não podem ser cadastrados dois clientes com o mesmo código),
portanto a tabela Clientes será o lado um do relacionamento. Ao mesmo tempo cada
cliente pode fazer diversos pedidos, por isso que o mesmo Código de Cliente poderá
aparecer várias vezes na tabela Pedidos: tantas vezes quantos forem os pedidos que o
Cliente tiver feito. Por isso que temos um relacionamento do tipo Um para Muitos entre
a tabela Clientes e Pedidos, através do campo Código do Cliente, indicando que um mesmo
Cliente pode realizar diversos (muitos) pedidos.
_________________________________________
41
▪ Relacionamento muitos para muitos (N:M): neste tipo de relacionamento, para cada
valor do campo de uma tabela, pode haver N valores no campo da outra tabela e
vice-versa. O relacionamento N:M (muitos-para-muitos) possui uma característica
diferente dos outros, pois os dados estão diretamente relacionados ao fato (ou ao
relacionamento), além de às entidades (ou tabelas), como observamos nos outros
tipos de relacionamentos vistos anteriormente.
Em bancos de dados relacionais, esta relação consuma-se através de uma tabela de
ligação que faz a correspondência de ambos os lados com relacionamento 1 para N para
cada lado. A chave primária surge de forma natural, e é composta pela junção das chaves
primárias das tabelas interligadas.
EXEMPLIFICANDO!!!
Vejamos um exemplo de relacionamento N:M.
Neste exemplo, são relacionadas as tabelas Produtos e Pedidos através de uma terceira
tabela Detalhes do Pedido. Perceba que as chaves primárias das duas tabelas fazem parte
da tabela criada para o relacionamento. Note também que o próprio fato (ou
relacionamento) Detalhes do Pedido possui atributos próprios como PreçoUnitário,
Quantidade e Desconto.
Este relacionamento demonstra que um Produto pode estar relacionado a diversos Pedidos.
Por outro lado, um mesmo Pedido pode possuir mais de um Produto e, por isso, falamos em
relacionamento muitos para muitos.
ATENÇÃO!!!
Embora raro, é possível indicar um número exato na cardinalidade 1:N ou N:N ao invés de
simplesmente usar o N para muitos. Assim, é possível indicar cardinalidade 1:5 para
demonstrar que cada registro de um lado pode se associar com até exatamente 5 do outro.
_________________________________________
42
Vamos fixar os tipos e características dos relacionamentos com um esquema!!!
Esquema 7 – Relacionamentos.
26- (CESPE / CEBRASPE - 2024 – CAU-BR - Analista) No que se refere a banco de
dados relacional e orientado a objeto, julgue o item a seguir.
Em um modelo relacional, a cardinalidade de 1 para 10 significa que cada registro em uma
tabela pode estar associado a 10 registros em outra tabela.
Resolução:
Embora raro, é possível indicar um número exato na cardinalidade 1:N ou N:N ao invés de
simplesmente usar o N para muitos. Assim, é possível indicar cardinalidade 1:10 para
demonstrar que cada registro de um lado pode se associar com até exatamente 10 do outro.
Imagine um condomínio com uma regra de que cada apartamento possa ter até, no máximo,
3 vagas de garagem. Nesse caso, o relacionamento será 1:3, conforme diagrama a seguir:
Gabarito: Certo.
Um para um
(1:1)
Cada registro de uma
tabela se relaciona a um
único registro de outra
tabela.
1. Uma tabela mesclada.
2. Duas tabelas, uma com
a chave estrangeira.
3. Três tabelas, com umatabela de ligação
referenciando as originais.
Um para muitos
(1:N)
Cada registro de uma
tabela pode ser relacionar
com mais de um registro
de outra, no entanto cada
registro da segundaestá
relacionado a apenas um
registro da primeira.
Chave estrangeira no
lado muitos.
Muitos para
muitos (N:M)
Cada registro em uma
tabela pode estar
relacionado a múltiplos
registros em outra tabela
e vice-versa
Tabela de ligação com
chaves estrangeiras para
cada tabela original.
https://www.tecconcursos.com.br/concursos/analista-cau-br-geotecnologia-2024
_________________________________________
43
27- (CESPE - 2018 - STJ - Técnico Judiciário - Suporte Técnico) Acerca de banco
de dados, julgue o item que se segue.
Relacionamentos do tipo um-para-um podem ser representados em até três tabelas, de
acordo com a obrigatoriedade do relacionamento.
Resolução:
No relacionamento 1:1, cada elemento de uma tabela se relaciona a um único elemento
de outra tabela. Existem três abordagens para condições especiais para implementar esse
relacionamento.
▪ Técnica da chave estrangeira: uma das duas tabelas possui a chave estrangeira. As
duas tabelas podem ter inclusive chaves estrangeiras redundantes (duas tabelas).
▪ Técnica de relação mesclada: mescla-se as duas entidades em uma única relação (uma
única tabela).
▪ Técnica de relação de referência cruzada: configura-se uma terceira tabela para
realizar a referência cruzada das chaves primárias das duas tabelas sendo ligadas (três
tabelas).
Gabarito: Certo.
_________________________________________
44
1.8 Restrições de integridade
As regras ou restrições de integridade (constraints) são usadas para garantir a exatidão
e consistência dos dados, refletindo corretamente a realidade modelada e protegendo o
banco de dados contra danos acidentais.
As restrições em bancos de dados podem divididas em três categorias principais:
▪ Restrições inerentes no modelo de dados (ou restrições implícitas): envolvem
as regras do próprio modelo, incluindo as características gerais das relações.
Exemplo: em um modelo relacional, cada valor de atributo em uma tabela deve ser
atômico, ou seja, indivisível. Isso significa que cada célula na tabela deve conter um
único valor, não um conjunto ou lista de valores.
▪ Restrições baseadas em esquema (ou restrições explícitas): podem ser
diretamente expressas no esquema de banco de dados e na linguagem de
definição de dados. As restrições baseadas em esquema incluem:
o Restrições de domínio: especificam que, dentro de cada tupla, o valor de
cada atributo deve ser um valor indivisível dentro do domínio desse
atributo. Exemplo: o atributo idade de uma tabela SERVIDOR deve ser um
número inteiro entre 18 e 75.
o Restrições de nulidade ou de vazios: especifica se valores nulos são
permitidos ou não para determinados atributos. Alguns atributos podem
ser obrigatórios (NOT NULL) enquanto outros podem permitir nulos
(NULL). Exemplo: o atributo nome de SERVIDOR não pode ser nulo, já o
atributo data_ultima_promocao pode ser nulo.
o Restrição de unicidade ou exclusividade: especifica se um atributo pode
ou não se repetir. Alguns atributos podem se repetir e outros não
(UNIQUE). Exemplo: o atributo CPF da tabela SERVIDOR deve ser único,
não podendo se repetir.
o Restrições de chave: duas tuplas distintas não podem ter valores idênticos
para todos os seus atributos e para isso toda tabela deve possuir uma
chave capaz de distinguir as tuplas. Exemplo: na tabela SERVIDOR, a
chave é o campo matrícula.
o Restrição de integridade de entidade: nenhum valor de chave primária
pode ser nulo. Isso garante que cada registro pode ser identificado
exclusivamente pela chave primária. Exemplo: o atributo matrícula de
SERVIDOR, que é chave não pode ser nulo, devendo ser preenchido.
o Restrição de integridade referencial: uma tupla em uma relação que
referencia outra relação precisa se referir a uma tupla existente nessa
relação. Isso assegura a consistência das referências entre tabelas. Exemplo:
na tabela DEPARTAMENTOS, matricula_chefe deve referenciar uma
matricula existente na tabela SERVIDOR.
_________________________________________
45
▪ Restrições baseadas em aplicação (ou restrições semânticas ou regras de
negócios): devem ser expressas e impostas pelos programas de aplicação ou de
alguma outra maneira. Exemplo: um servidor não pode ser promovido mais de uma
vez por ano. Essa regra precisa ser verificada na aplicação que gerencia as
promoções.
ESCLARECENDO!!!
Embora as restrições de chave e as restrições de unicidade estejam relacionadas, elas
possuem diferenças importantes.
▪ Restrição de chave: garante que cada registro seja identificável de forma única e
não nula. Isso é alcançado através da chave primária ou chaves candidatas.
▪ Restrição de unicidade: assegura que valores em uma coluna não devem se repetir.
Diferente da chave, uma restrição de unicidade pode permitir valores nulos, mas
cada valor não nulo deve ser único. Essa restrição pode ser aplicada a colunas que
não fazem parte da chave.
Esquematizando as restrições, temos que:
Esquema 8 – Restrições de integridade.
• Regras do próprio modelo, incluindo as características das
relações.
Restrições inerentes no modelo de dados (ou
restrições implícitas)
• Expressas no esquema de banco de dados e na linguagem de
definição de dados. Incluem:
• Restrições de domínio
• Restrições de nulidade ou de vazios
• Restrição de unicidade ou exclusividade
• Restrições de chave
• Restrição de integridade de entidade
• Restrição de integridade referencial
Restrições baseadas em esquema (ou
restrições explícitas)
• Expressas e impostas pelos programas de aplicação.
Restrições baseadas em aplicação (ou
restrições semânticas ou regras de negócios)
_________________________________________
46
28- (CESPE / CEBRASPE – 2024 - ANAC - Especialista em Regulação de Aviação
Civil) Acerca de bancos de dados relacionais, julgue o item que se segue.
Em bancos de dados relacionais, a restrição de integridade de entidade estabelece-se entre
duas relações e é usada para manter a consistência entre as tuplas nessas duas relações.
Resolução:
A restrição que estabelece associação entre relações é a de integridade referencial. A
restrição de entidade, por sua vez, garante que uma chave primária nunca seja nula.
Gabarito: Errado.
29- (CESPE / CEBRASPE - 2023 – DATAPREV - Analista de Processamento) A
respeito de modelagem de dados, julgue o item a seguir.
A integridade referencial é uma parte essencial de qualquer banco de dados relacional, que,
entre outros benefícios, facilita as consultas.
Resolução:
Sim, a integridade referencial é uma parte essencial de qualquer banco de dados relacional
e traz vários benefícios, incluindo a facilitação das consultas. A restrição de integridade
referencial garante a associação correta entre tabelas por meio das chaves
estrangeiras. Essa restrição estabelece que uma tupla em uma relação que referencia outra
relação deve se referir a uma tupla existente nessa outra relação, assegurando a consistência
das referências entre tabelas.
A integridade referencial facilita as consultas porque garante que os dados estejam
consistentes entre as tabelas. Isso permite que as consultas que dependem de relações entre
tabelas sejam realizadas de maneira confiável e precisa, sem a necessidade de lidar com
referências inválidas ou órfãs. Por exemplo, ao consultar os departamentos e seus
respectivos chefes, a integridade referencial garante que cada matricula_chefe realmente
exista na tabela Servidor, evitando erros e inconsistências nos resultados das consultas.
Gabarito: Certo.
30- (CESPE / CEBRASPE - 2023 – FUB - Analista de Tecnologia da Informação)
Julgue o item subsecutivo, a respeito de administração de banco de dados
Deacordo com a restrição de domínio de uma relação, em uma chave estrangeira, o valor
do campo tem que coincidir com uma chave primária de uma tabela referenciada
Resolução:
A restrição referida na questão é a de integridade referencial, segundo a qual uma tupla
em uma relação que referencia outra relação precisa se referir a uma tupla existente
nessa relação. A restrição de domínio, por sua vez, especifica que, dentro de cada tupla, o
valor de cada atributo deve ser um valor indivisível dentro do domínio desse atributo.
Gabarito: Errado.
_________________________________________
47
31- (FCC - 2023 – MPE-PB – Analista Ministerial) A integridade semântica deve
garantir que um dado inserido em uma linha da tabela tenha um valor válido. E para que
este valor seja válido ele
a) não pode estar em branco.
b) deve ser do mesmo tamanho que o especificado nos metadados, desde que tenha sido
especificado como tamanho fixo.
c) não pode ser nulo.
d) deve ter sido especificado nos metadados como um tipo de dado numérico inteiro.
e) deve ser do mesmo tipo de dado definido na especificação da coluna na tabela.
Resolução:
Essa questão inicia toda confusa, pois cita restrição de integridade semântica. As restrições
semânticas estão relacionadas as regras de negócio e não aos esquemas de bancos de dados,
conforme trazidos nos itens.
De todo modo, vamos analisar cada um dos itens:
a) Incorreto: não pode estar em branco. Um valor válido para um atributo pode ser nulo,
isto é, um atributo pode aceitar ausência de valor para algum registro. Sendo assim, é
possível que um atributo possua valor válido, mesmo que “em branco”.
b) Incorreto: deve ser do mesmo tamanho que o especificado nos metadados, desde que
tenha sido especificado como tamanho fixo. Não há obrigatoriedade de um valor ser
declarado como fixo. Se ele foi declarado como variável, também irá ocupar no máximo o
tamanho definido.
c) Incorreto: não pode ser nulo. Um valor válido para um atributo pode ser nulo, isto é, um
atributo pode aceitar ausência de valor para algum registro. Sendo assim, é possível que um
atributo possua valor válido, mesmo que “nulo”.
d) Incorreto: deve pode ter sido especificado nos metadados como um tipo de dado
numérico inteiro. Também pode ser de outros tipos, como caractere, booleano, etc.
e) Correto: deve ser do mesmo tipo de dado definido na especificação da coluna na tabela.
Essa é a restrição de domínio. É uma restrição explícita e não semântica.
Contudo, como os demais itens também não trazem nenhuma restrição semântica e o único
item que faz sentido para restrições é o e), então dava para marcar ele como correto.
Gabarito: Letra E.
_________________________________________
48
1.9 Álgebra relacional
A álgebra relacional define operações sobre relações, similar às operações algébricas como
adição, subtração ou multiplicação, que operam em números. Assim como as operações
algébricas tomam um ou mais números como entrada e retornam um número como saída,
as operações de álgebra relacional tomam uma ou duas relações como entrada e
retornam uma relação como saída.
O termo predicado descreve a condição que deve ser satisfeita na operação. Devido a
propriedade do fechamento, o resultado de uma operação com relações pode ser usado
como entrada em outra operação, permitindo a composição de múltiplas operações.
As operações da álgebra relacional são classificadas em:
▪ Unárias: operam sobre uma única relação. São elas principalmente a seleção e a
projeção, mas incluem também a renomeação e a atribuição.
▪ Binárias: tomam duas relações como entrada. Incluem o produto cartesiano e a
junção, a união, a interseção, a diferença e a divisão.
A seguir, vamos descrever as principais operações da álgebra relacional. Primeiramente
vejamos as duas principais operações unárias, a seleção e a projeção:
▪ Seleção (σ): seleciona tuplas que satisfazem um determinado predicado. Esta
operação, portanto, retorna um conjunto de tuplas (ou linhas) que cumprem
determinada condição nos valores dos atributos.
A sintaxe é σ(Relação).
EXEMPLIFICANDO!!!
Tomemos como exemplo uma tabela SERVIDOR que apresenta informações de
matricula, nome e salário dos servidores de um órgão público.
Agora suponha que você queira selecionar apenas os servidores que ganhem menos que
13 mil por mês. Como você quer filtrar registros, então poderá usar a operação de
SELEÇÃO da seguinte forma σsalario(Relação).
EXEMPLIFICANDO!!!
Vamos supor que não tenhamos interesse em divulgar os salários dos servidores, mas que
tenha sido solicitado a lista de todos os servidores. Poderemos realizar esta consulta com
base em uma operação de projeção: Пmatricula, nome (Servidor):
SERVIDOR Пmatricula, nome (SERVIDOR)
matricula nome salario matricula nome
134512 João Aprovado 13.002,03 134512 João Aprovado
251218 Maria Concursada 5.519,61 251218 Maria Concursada
124578 Paulo Passou 13.002,03 124578 Paulo Passou
131820 Glória Nomeada 5.519,61 131820 Glória Nomeada
112035 Eduardo Posse 13.002,03 112035 Eduardo Posse
Observe que a operação de projeção retorna somente os dados referentes as colunas
escolhidas, reduzindo, assim, a quantidade de dados que precisam ser analisados.
Outras duas operações unárias que podem ser utilizadas são as operações de renomeação e
a de atribuição. Essas operações são utilizadas para facilitar a construção das consultas mais
complexas que envolvam várias operações.
▪ Renomeação (ρ): usada para alterar o nome de uma relação ou de um atributo.
É útil para melhorar a compreensão ou evitar conflitos de nomes.
A sintaxe é ρ(a1, a2, ..., an) (R) ou ρ(R) ou ρ (a1, a2, ..., an)(R), sendo R o nome
original da relação, N o novo nome para a relação e (a1, a2, ..., an) os novos nomes
para os atributos.
▪ Atribuição ou designação (←): usada para armazenar o resultado de uma
expressão relacional em uma nova relação. É útil para criar relações temporárias
que podem ser usadas em operações subsequentes.
A sintaxe é RelaçãoResultante ← Relação.
DICA DO PROFESSOR!!!
Dentre as operações unárias, foque principalmente nas de seleção e projeção, pois são as
mais cobradas em questões. Um bizu é que a seLeção filtra Linhas para não confundir com
a projeção que filtra colunas.
Já as operações de renomeação e atribuição não são muito cobradas em provas, mas pelo
menos as suas definições não são difíceis de entender, então vale saber que existem e
conhecer seus conceitos e símbolos.
_________________________________________
50
Vamos abordar agora as operações binárias:
▪ Produto cartesiano ou produto cruzado (X): combina todos os pares de linhas
de duas relações de entrada, independente de eles terem correspondência. Dito
de outra forma, cada linha da primeira relação é combinada com cada linha da
segunda relação. O resultado conterá todos os atributos que compõem cada uma das
relações que fazem parte da operação, mesmo que repetidos.
A sintaxe é Relação1 X Relação 2.
EXEMPLIFICANDO!!!
Vejamos a operaçãode produto cartesiano Servidor X Cargo:
SERVIDOR CARGO
matricula nome salario nome_cargo salario
134512 João Aprovado 13.002,03 Auditor 13.002,03
251218 Maria Concursada 5.519,61 Agente 5.519,61
124578 Paulo Passou 13.002,03
A operação de produto cartesiano faz um cruzamento das duas tabelas, retornando todas
as linhas da primeira tabela relacionadas com todas as linhas da segunda tabela. No
exemplo, são criadas duas linhas para cada servidor, pois eles serão relacionados com os
dois cargos existentes na segunda tabela. Logo, o resultado é:
matricula nome salario nome_cargo salario
134512 João Aprovado 13.002,03 Auditor 13.002,03
134512 João Aprovado 13.002,03 Agente 5.519,61
251218 Maria Concursada 5.519,61 Auditor 13.002,03
251218 Maria Concursada 5.519,61 Agente 5.519,61
124578 Paulo Passou 13.002,03 Auditor 13.002,03
124578 Paulo Passou 13.002,03 Agente 5.519,61
Note que não importa se há alguma relação entre os registros. Por exemplo, “João
Aprovado” foi relacionado tanto com o cargo de “Auditor” como com o cargo de “Agente”,
mesmo que o salário dele seja de “Auditor”. Da mesma forma todos os outros.
▪ Junção (⋈): combina os pares de linhas de duas relações com base em alguma
condição de correspondência entre os atributos das relações, retornando apenas
as linhas que atendem a condição. Se a condição não for informada, haverá o
relacionamento por meio de atributos comuns entre as tabelas (junção natural). O
resultado não conterá atributos repetidos.
A sintaxe é Relação1 ⋈ Relação 2.
_________________________________________
51
EXEMPLIFICANDO!!!
Agora vejamos como fica a operação de junção entre Servidor ⋈ Cargo:
SERVIDOR CARGO
matricula nome salario nome_cargo salario
134512 João Aprovado 13.002,03 Auditor 13.002,03
251218 Maria Concursada 5.519,61 Agente 5.519,61
124578 Paulo Passou 13.002,03
A operação de junção seleciona linhas das duas tabelas, fazendo uma relação entre os com
base em uma condição. Como não definida nenhuma condição específica, então será
utilizado o atributo comum “salario” para fazer a correspondência entre as linhas.
No exemplo, é criada uma linha para cada servidor associando-o ao cargo. O resultado é:
matricula nome salario nome_cargo
134512 João Aprovado 13.002,03 Auditor
251218 Maria Concursada 5.519,61 Agente
124578 Paulo Passou 13.002,03 Auditor
Note que importa a correspondência. Assim, “João Aprovado” e “Paulo Passou” foram
associados ao cargo de “Auditor”, pois possuem salário “13.002,03”. Já “Maria Concursada”
foi associada ao cargo de “Agente” por conta do salário “5.519,61”.
Através da álgebra relacional é possível implementar as operações bem conhecidas dos
conjuntos como a União, Intersecção e Diferença. Preliminarmente, é importante destacar
que estas operações são realizadas sobre duas relações com a mesma estrutura, isto é,
com a mesma quantidade de atributos e cujos atributos possuem o mesmo domínio.
▪ União (Ս): seleciona a união de tuplas das duas relações de entrada, isto é, as tuplas
que estão na primeira relação, na segunda relação, ou em ambas.
A sintaxe é Relação1 Ս Relação 2.
EXEMPLIFICANDO!!!
Consideremos duas tabelas, uma com dados dos Auditores e outra com dados dos Agentes:
AUDITORES AGENTES
matricula nome salario matricula nome salario
134512 João Aprovado 13.002,03 251218 Maria Concursada 5.519,61
124578 Paulo Passou 13.002,03 131820 Glória Nomeada 5.519,61
112035 Eduardo Posse 13.002,03
A operação de união AUDITORES Ս AGENTES terá como retorno uma tabela com
todas as tuplas presentes na primeira tabela, na segunda tabela ou em ambas.
matricula nome salario
134512 João Aprovado 13.002,03
124578 Paulo Passou 13.002,03
112035 Eduardo Posse 13.002,03
251218 Maria Concursada 5.519,61
131820 Glória Nomeada 5.519,61
Linhas da 1ª relação
Linhas da 2ª relação
+
_________________________________________
52
▪ Intersecção (Ո): seleciona a intersecção de tuplas das duas relações de entrada, isto
é, as tuplas que aparecem tanto na primeira relação quanto na segunda.
A sintaxe é Relação1 Ո Relação 2.
▪ Diferença ou Subtração (-): seleciona as tuplas que aparecem na primeira
relação, mas não estão na segunda.
A sintaxe é Relação1 - Relação 2.
EXEMPLIFICANDO!!!
Tomemos como base as tabelas a seguir:
AUDITORES CHFES
matricula nome salario matricula nome salario
134512 João Aprovado 13.002,03 124578 Paulo Passou 13.002,03
124578 Paulo Passou 13.002,03 131820 Glória Nomeada 5.519,61
112035 Eduardo Posse 13.002,03 112035 Eduardo Posse 13.002,03
Se quisermos selecionar somente os Auditores da primeira tabela que possuem chefia
podemos fazer a operação de Interseção (AUDITORES Ո CHEFES) entre as duas tabelas:
matricula nome salario
124578 Paulo Passou 13.002,03
112035 Eduardo Posse 13.002,03
Caso contrário, se quisermos obter somente os Auditores da primeira tabela que não
possuem chefia, é possível utilizar a operação Diferença (AUDITORES - CHEFES):
matricula nome salario
134512 João Aprovado 13.002,03
As operações de união, intersecção e diferença podem ser representadas em diagramas:
União
A Ս B
Intersecção
A Ո B
Diferença
A - B
Linhas que estão em ambas
Linha somente na 1ª tabela
_________________________________________
53
Uma outra operação útil é a divisão, que é usada em alguns tipos especiais de consulta.
▪ Divisão (÷): seleciona as tuplas de uma relação que possuem correspondência
com todas as tuplas de outra relação. Um detalhe importante é que a comparação
ocorrerá com base em atributos comuns de ambas as relações, mas o resultado irá
apresentar os atributos que existem somente na primeira relação.
EXEMPLIFICANDO!!!
Vamos usar um exemplo com uma tabela que apresenta quais as certificações um Servidor
possui e uma outra tabela que mostra as certificações requeridas para se candidatar a um
projeto específico:
CERTIFICACOES_SERVIDOR CERTIFICACOES_PROJETO
matricula nome certificacao certificacao
134512 João Aprovado PMP PMP
134512 João Aprovado Java Java
134512 João Aprovado ITIL
124578 Paulo Passou PMP
124578 Paulo Passou Java
112035 Eduardo Posse PMP
112035 Eduardo Posse ITIL
Ao realizar a operação CERTIFICACOES_SERVIDOR ÷ CERTIFICAOES_PROJETO,
o resultado será:
matricula nome
134512 João Aprovado
124578 Paulo Passou
A operação buscou os registros da primeira tabela que contenham todas as certificações da
segunda tabela, isto é, que possuem as certificações PMP e Java.
▪ “João” retornou no resultado, pois possui as certificações PMP e Java. Possui
também a ITIL, mas essa não é relevante para a operação, pois ela não é exigida pela
segunda tabela.
▪ “Paulo” veio foi retornado pois possui exatamente as certificações PMP e Java.
▪ “Eduardo” não retornou, pois possui a certificação PMP, mas não possui a
certificação Java. Ou seja, ele não tem as duas exigidas.
Note que somente aparecem os atributos que aparecem na primeira relação, mas não na
segunda. Por isso, somente são apresentados os atributos matricula e nome. O atributo
certificação é usado para realizar a operação, mas não é incluído no resultado.
ATENÇÃO!!!
Dentre essas operações, vale ressaltar que são consideradas primitivas (ou básicas), as
operações de seleção, projeção, produto cartesiano, união e diferença, além da
renomeação. Isso significa que elas são as operações básicas e não podem ser definidas em
termos de outras. As demais são derivadas (ou compostas), isto é, que podem ser definidas
em termos de operações primitivas.
_________________________________________
54
As operações da álgebra relacional são esquematizadas no quadro a seguir.
Operações da álgebra relacional
Seleção (σ) Filtra tuplasque satisfazem um predicado.
Projeção (П)
Filtra atributos especificados de todas as linhas da relação de entrada,
removendo as tuplas duplicadas da saída.
Renomeação (ρ) Altera o nome de uma tabela ou atributo.
Produto
cartesiano (X)
Combina todos os pares de linhas de duas relações de entrada,
independente de eles terem correspondência.
União (Ս) Filtra tuplas que estão na primeira relação, na segunda, ou em ambas.
Diferença (-) Filtra tuplas que aparecem na primeira relação, mas não na segunda.
Junção (⋈)
Combina pares de linhas de duas relações com base em alguma condição
de correspondência entre os atributos
Intersecção (Ո) Filtra tuplas que aparecem na primeira relação e também na segunda.
Divisão (÷)
Filtra tuplas de uma relação que possuem correspondência com todas
as tuplas de outra relação.
Atribuição (←) Armazena o resultado de uma operação em uma relação temporária.
Esquema 9 – Operações com relações (álgebra relacional).
APROFUNDANDO!!!
Em álgebra relacional, dizemos que duas expressões ou operações são equivalentes se elas
produzem o mesmo resultado ainda que sejam escritas ou executadas de maneiras
diferentes. O símbolo ≡ é utilizado para equivalência.
Um exemplo bem simples é o da conhecida propriedade da comutatividade na matemática.
Assim, Servidor ⋈ Cargo ≡ Cargo ⋈ Servidor, isto é, essas duas operações são equivalentes.
32- (CESPE / CEBRASPE - 2024 – FINEP - Analista) A respeito de modelagem
relacional para combinar informações de duas relações quaisquer, é correto o uso de
a) produto cartesiano.
b) diagrama de esquema.
c) chave primária.
d) chave estrangeira.
e) superchave.
Resolução:
O produto cartesiano é a operação que combina todos os pares de linhas de duas
relações de entrada, independente de eles terem correspondência.
Gabarito: Letra A.
P
R
IM
IT
IV
A
S
D
E
R
IV
A
D
A
S
U
N
Á
R
IA
S
UNÁRIA
B
IN
Á
R
IA
S
_________________________________________
55
33- (VUNESP - 2024 - Prefeitura de São Bernardo do Campo - Analista de
Tecnologia da Informação e Comunicações) Considere a seguinte tabela de um banco
de dados relacional:
Produto (ID, Nome, Fabricante, Peso)
A consulta da álgebra relacional para obter o nome dos produtos e o peso, para itens com
peso superior a 100 gramas é (suponha que o peso está expresso em gramas):
a) πNome, Peso > 100 (Produto)
b) πNome, Peso (σPeso > 100 (Produto))
c) πNome (Produto) (σPeso (Produto) > 100)
d) σNome, Peso > 100 (Produto)
e) σNome, Peso (πPeso > 100 (Produto))
Resolução:
A consulta deseja obter somente alguns dos atributos (nome e peso), logo teremos uma
projeção (π). Também deseja filtrar produtos com base em uma condição (peso > 100), logo
teremos uma seleção (σ). Vamos montar essa consulta em dois passos:
1. Filtragem de linhas com seleção: a operação de seleção é usada para filtragem de linhas,
como a condição é Peso > 100, então teremos σPeso > 100 (Produto). Pronto, essa operação
irá retornar apenas os produtos com peso maior que 100.
2. Filtragem de colunas com projeção: depois de filtradas as linhas, queremos apenas os
atributos nome e peso, portanto devemos fazer uma projeção sobre a operação anterior. A
expressão fica então πNome, Peso (σPeso > 100 (Produto)).
Quanto aos itens, podemos incrementar que:
a) Incorreto: πNome, Peso > 100 (Produto) não aplica a operação de seleção. Além disso tenta
colocar uma condição (>100) na operação de projeção, o que não é permitido.
b) Correto: πNome, Peso (σPeso > 100 (Produto)) faz exatamente o solicitado no item.
c) Incorreto: πNome (Produto) (σPeso (Produto) > 100) apresenta uma sintaxe totalmente
equivocada para a operação de seleção.
d) Incorreto: σNome, Peso > 100 (Produto) não aplica a operação de projeção. Além disso, tenta
filtrar atributos na operação de seleção, o que não é correto.
e) Incorreto: σNome, Peso (πPeso > 100 (Produto)) inverte a seleção com a projeção. É a projeção
(π) que seleciona os atributos e a seleção (σ) que filtra as linhas com base em condições.
Gabarito: Letra B.
_________________________________________
56
34- (FGV - 2018 - MPE-AL - Analista do Ministério Público - Administrador de
Banco de dados) No contexto da otimização de consultas para bancos de dados, a Álgebra
Relacional tem um papel importante, especialmente na construção das query trees para a
representação de planos de execução. As operações primitivas da AR são definidas como as
operações que não podem ser expressas por meio das demais operações. Assinale a opção
que apresenta a lista que contém as cinco operações primitivas da AR.
a) Diferença, divisão, projeção, seleção e união.
b) Diferença, produto, projeção, seleção e união.
c) Interseção, produto, projeção, seleção e união.
d) Divisão, interseção, junção, seleção e união.
e) Junção, produto, projeção, seleção e união.
Resolução:
São consideradas primitivas (ou básicas), as operações de seleção, projeção, produto
cartesiano, união e diferença, além da renomeação, conforme esquema a seguir:
As operações da álgebra relacional são esquematizadas no quadro a seguir.
Operações da álgebra relacional
Seleção (σ) Filtra tuplas que satisfazem um predicado.
Projeção (П)
Filtra atributos especificados de todas as linhas da relação de entrada,
removendo as tuplas duplicadas da saída.
Renomeação (ρ) Altera o nome de uma tabela ou atributo.
Produto
cartesiano (X)
Combina todos os pares de linhas de duas relações de entrada,
independente de eles terem correspondência.
União (Ս) Filtra tuplas que estão na primeira relação, na segunda, ou em ambas.
Diferença (-) Filtra tuplas que aparecem na primeira relação, mas não na segunda.
Junção (⋈)
Combina pares de linhas de duas relações com base em alguma condição
de correspondência entre os atributos
Intersecção (Ո) Filtra tuplas que aparecem na primeira relação e também na segunda.
Divisão (÷)
Filtra tuplas de uma relação que possuem correspondência com todas
as tuplas de outra relação.
Atribuição (←) Armazena o resultado de uma operação em uma relação temporária.
Gabarito: Letra B.
P
R
IM
IT
IV
A
S
D
E
R
IV
A
D
A
S
U
N
Á
R
IA
S
UNÁRIA
B
IN
Á
R
IA
S
_________________________________________
57
1.10 Normalização
Um dos objetivos da abordagem de banco de dados é reduzir a redundância dos dados,
evitando assim que dados duplicados sejam armazenados sem necessidade. Um dos modos
de controlar a redundância é aplicar a normalização das tabelas.
A normalização de dados pode ser considerada um processo de analisar os esquemas de
relação dados com base em suas dependências funcionais e chaves primárias para conseguir
as propriedades desejadas e a (1) minimização de redundância e (2) a minimização de
anomalias de inserção, exclusão e atualização.
Para normalizar o banco de dados, deve-se examinar as colunas (atributos) de uma entidade
e as relações entre entidades (tabelas), com o objetivo de se evitar anomalias observadas na
inclusão, exclusão e alteração de registros. Para adequar o banco de dados, é necessário
avaliar com base em cinco regras (seis com a de boyce-codd), que recebem o nome de
formas normais. Essas correspondem a um conjunto de regras de simplificação e
adequação de tabelas.
A forma normal de uma relação refere-se à condição de forma normal mais alta a que
ela atende e, portanto, indica o grau ao qual ela foi normalizada.
Vamos estudar a seguir as formas normais.
1.10.1 As formas normais
Primeira Forma Normal (1FN)
Uma tabela está na Primeira Forma Normal (1FN) se, e somente se, todos os valores
das colunas (todos os atributos) forem atômicos. Em outras palavras, uma tabela para
estar na 1FN não pode possuir atributos multivalorados nem compostos.
▪ Compostos: podem ser divididos em partes menores, que representam atributos
mais básicos.O valor é a concatenação de seus componentes atributos simples.
Podem formar hierarquia. Ex.: endereço completo com rua, número e cep.
▪ Multivalorado: possui um conjunto de valores para a mesma entidade. Um
atributo multivalorado pode possuir um limite mínimo e máximo para restringir
o número de valores permitidos. Ex.: telefone que aceita mais de um número.
Vale ressaltar que a 1FN é considerada parte da definição formal de uma relação no
modelo relacional básico. Assim, só é considerado de fato um banco de dados
relacional se as tabelas estiverem ao menos na primeira forma normal.
Uma das consequências de um modelo não estar na 1FN é a existência de tabelas
aninhadas. Como uma tabela que não está na 1FN pode conter atributos compostos e
multivalorados, então esses atributos podem ser considerados verdadeiras tabelas dentro
da tabela principal. Por exemplo, um atributo composto endereço formado por cidade,
bairro, rua, número e cep pode ser facilmente compreendido como uma tabela aninhada
formada por vários atributos atômicos.
_________________________________________
58
EXEMPLIFICANDO!!!
Para os estudos das formas normais vamos utilizar exemplos de tabelas que não se
encontram nas formas normais estudadas e como elas podem ser transformadas para se
adaptar as regras.
Assim, vamos tomar como exemplo a Tabela DEPARTAMENTO a seguir que não está
em nenhuma forma normal, pois sequer está na 1FN.
DEPARTAMENTO
Nome_departamento Número_Departamento CPF_Gerente Localizacoes_Departamento
Pesquisa 5 33344555587 Santo André, Itu, São Paulo
Administração 4 98765432168 Mauá
Matriz 1 88866555576 São Paulo
A chave primária da tabela DEPARTAMENTO é Número_Departamento.
Note que o atributo Localizacoes_Departamento é multivalorado, pois possui uma lista
de valores para a mesma tupla. Perceba, por exemplo, que a primeira linha possui locais
diversos como “Santo André”, “Itu” e “São Paulo”. Assim, está ferindo a 1FN, pois como
vimos, para uma tabela está na 1FN, não pode ter atributos compostos nem multivalorados.
Para deixar essa tabela na 1FN, temos então que definir somente atributos atômicos.
Podemos nesse caso simplesmente desmembrar os atributos multivalorados de
Localizacoes_Departamento em mais de uma linha, repetindo as demais informações.
Dessa forma teremos:
DEPARTAMENTO
Nome_departamento Número_Departamento CPF_Gerente Localizacoes_Departamento
Pesquisa 5 33344555587 Santo André
Pesquisa 5 33344555587 Itu
Pesquisa 5 33344555587 São Paulo
Administração 4 98765432168 Mauá
Matriz 1 88866555576 São Paulo
Perceba que agora todas as colunas contêm apenas valores atômicos e, portanto, essa tabela
está na 1FN.
Um conceito relevante para o entendimento das próximas formas normais é o de
dependência funcional (DF), que é um relacionamento entre dois ou mais atributos de
forma que o valor de um atributo identifique o valor para cada um dos outros atributos, ou
seja, um atributo está relacionado a outro. A dependência funcional pode ser ilustrada por
→. Assim, em A → B, temos que “A determina B” ou “B é dependente (funcionalmente)
de A”, isto é, o valor de B pode ser descoberto sabendo o valor de A.
Por exemplo, CPF → Nome, significa que a partir do CPF de alguém, é possível encontrar
o nome dessa pessoa.
_________________________________________
59
Segunda Forma Normal (2FN)
Uma relação está na Segunda Forma Normal (2FN) se, e somente se, estiver na 1FN e
cada atributo não-chave for dependente da chave primária (ou candidata) inteira, isto
é, cada atributo não-chave não poderá ser dependente de apenas parte da chave.
Trata-se de uma dependência funcional total.
Chamo a atenção que não basta a dependência total para que uma tabela esteja na 2FN, pois
ela deve estar antes de tudo na 1FN. Além disso, caso a chave primária da tabela seja
formada por apenas um atributo, estando a tabela na 1FN, estará automaticamente na 2FN.
EXEMPLIFICANDO!!!
Vamos utilizar a Tabela FUNC_PROJ que já está na 1FN. Nestes exemplos, DF significa
Dependência Funcional.
A chave primária desta tabela é formada por {Cpf, Projnumero}.
Note, que embora essa tabela esteja na 1FN, os atributos Projnome e Projlocal dependem
apenas de Projnumero, isto é, apenas de parte da chave primária. Do mesmo modo, temos
o atributo Fnome que depende apenas do Cpf.
Para deixar essa tabela na 2FN, temos que fazer com que todos os atributos não chave
dependam da chave inteira. Para este caso, teremos que separar os atributos em três tabelas:
Agora, todos os atributos não chave dependem das chaves inteiras das respectivas tabelas.
Note que nesse caso, a tabela FP1 possui como chave os atributos {Cpf, Projnumero},
sendo que o atributo Horas depende da totalidade dessa chave. Do mesmo modo, na tabela
FP2, o atributo Fnome depende da totalidade da chave {Cpf} e na tabela FP3, os atributos
Projnome e Projlocal dependem da totalidade da chave Projnumero.
Ressalto que as tabelas FP2 e FP3 possuem somente um atributo como chave, logo, como
estão na 1FN, também estão na 2FN.
Essas tabelas estão na 2FN, pois todos os atributos não chave dependem totalmente de uma
chave primária (ou candidata).
_________________________________________
60
Terceira Forma Normal (3FN)
Uma relação está na Terceira Forma Normal (3FN) se estiver na 2FN e cada atributo
não chave não possuir dependência transitiva, para cada chave candidata. Todos os
atributos não-chave da tabela devem ser independentes uns dos outros, ao mesmo tempo
que devem ser dependentes exclusivamente da chave primária (ou candidata).
EXEMPLIFICANDO!!!
Vamos agora utilizar a tabela FUNC_DEP que já está na 2FN (perceba que aqui não há
dúvida, pois, a chave primária é formada por um único atributo {Cpf}.
Note que nesta tabela, temos uma dependência transitiva entre alguns atributos, pois
Dnome e Cpf_gerente dependem do atributo não chave Dnumero, que, por sua vez,
depende da chave {Cpf}. Esquematicamente temos (→ indica determina):
Se Cpf → Dnumero
E Dnumero → Dnome
Logo, Cpf → Dnome
Para passar para a 3FN, podemos dividir a tabela em duas outras:
Agora, todos os atributos não chave dependem exclusivamente das chaves de cada tabela,
sem dependências transitivas. Note que nesse caso, a tabela DF1 possui a chave {Cpf} e
todos os atributos dependem exclusivamente desta chave. O mesmo ocorre para a tabela
DF2, em que os atributos Dnome e Cpf_gerente dependem diretamente de Dnumero.
Essas tabelas estão na 3FN, pois todos os atributos não chave dependem exclusivamente
de uma chave primária.
ATENÇÃO!!!
É comum as definições das formas normais em questões se referirem apenas a chave
primária. Isso ocorre, pois muitas vezes nos livros e fontes sobre o tema, é a chave usada
como base de explicação. Contudo, lembre-se de que a chave primária é uma escolha dentre
as candidatas possíveis, então o que vale para a primária, vale para a candidata. De todo
modo, não elimine um item apenas por ele citar somente a chave primária, pois vai encontrar
várias questões dadas como corretas afirmando que “na 2FN, cada atributo não chave deve
depender da totalidade da chave primária” ou “na 3FN, os atributos devem depender
exclusivamente da chave primária”. Isso é aceitável assim como se fizer referência explícita
a chave candidata também, ou somente a chave.
_________________________________________
61
As formas normais 1FN, 2FN e 3FN foram as definidas originalmente por Edgar F. Codd,
sendo as mais importantes para resolver as questões de prova. Contudo, hoje existem outras
formas normais aceitas como a FNBC, a 4FN e 5FN.
Forma Normal de Boyce-Codd (FNBC)
Uma tabela está na Forma Normal de Boyce-Codd (FNBC ou BCNF) se, e somente se,
estiver na 3FN e todo determinante é chave candidata. Dessa forma, não há
dependênciasentre atributos não chave. É considerada uma variação forte da 3FN.
EXEMPLIFICANDO!!!
Vamos ver o seguinte exemplo de passagem para a forma normal de boyce codd. Veja a
tabela Lotes1A a seguir:
Suponha que tenhamos milhares de lotes na relação, mas que eles sejam de apenas duas
cidades: Ribeirão Preto e Analândia. Suponha também que os tamanhos de lote em Ribeirão
Preto sejam de apenas 0,5, 0,6, 0,7, 0,8, 0,9 e 1,0 hectare, enquanto os tamanhos de lotes em
Analânda sejam restritos a 1,1, 1,2, ..., 1,9 e 2,0 hectares. Isso significa que Area determina
Nome_cidade. Como Area não é uma chave candidata, então esta tabela não está na FNBC.
Ao passar para a forma normal de boyce-codd, separamos a tabela LOTES1A em duas para
que agora a área, que é um determinante, seja chave de uma tabela.
Agora, temos somente chaves como determinantes. Esquematicamente:
Em LOTES1AX:
Propriedade_num → Area
Propriedade_num → Num_lote
Em LOTES1AY:
Area → Nome_cidade
_________________________________________
62
Quarta Forma Normal (4FN)
Uma tabela está na Quarta Forma Normal (4FN) se, e somente se, está na 3FN e não
possui dependência multivalorada.
▪ Dependência multivalorada: dependência entre conjuntos de atributos.
EXEMPLIFICANDO!!!
Vamos ver o seguinte exemplo de passagem para quarta forma normal. Veja a tabela
Revendas a seguir preenchida com dados de representantes, clientes e produtos:
REVENDAS
Representante Cliente Produto
1 Martins Sá e Filhos Louça
2 Martins Sá e Filhos Talheres
3 Martins DMI, Lda Louça
4 Martins DMI, Lda Talheres
5 Castro Sá e Filhos Cintos
6 Castro Sá e Filhos Meias
7 Castro Sá e Filhos Lenços
8 Castro YSL Cintos
9 Castro YSL Meias
10 Castro YSL Lenços
Conforme a figura acima, temos uma tabela relacionando representante, cliente e produto.
Um representante pode vender para vários clientes e vários produtos. Isso gera uma
grande redundância nas informações. Para evitar essa repetição de informações, devemos
dividir a tabela:
REPRESENTANTE_CLIENTE REPRESENTANTE_PRODUTO
Representante Cliente Representante Produto
Martins Sá e Filhos Martins Louça
Martins DMI, Lda Martins Talheres
Castro Sá e Filhos Castro Cintos
Castro YSL Castro Meias
Castro Lenços
Agora, não há dependências entre conjuntos de atributos. Logo, as duas tabelas estão na
quarta forma normal.
_________________________________________
63
Quinta Forma Normal (5FN)
Uma tabela está na Quinta forma normal (5FN) se, e somente se, está na 4FN e não
possui dependência de junção. Na 5FN, o conteúdo de um registro não pode ser
reconstruído (junção) a partir de outros registros menores, extraídos do registro
principal.
▪ Dependência de junção: dependência entre conjuntos de atributos, com mais
de dois atributos.
EXEMPLIFICANDO!!!
Suponha que houve uma divisão de uma tabela em duas tabelas menores, da seguinte forma:
Se, por algum motivo, eu tiver que reconstruir a tabela Revendas sem ter todos os seus
dados, isso não será possível somente com os dados das tabelas menores, pois não há
representação de que vendas foram realizados a que clientes. Logo, há uma dependência de
junção.
Para resolver esse problema, eu preciso de uma terceira tabela para conseguir reconstruir
a tabela maior. Assim, eu precisarei de uma tabela auxiliar que me apresente que produtos
foram vendidos a que clientes.
Agora sim, como base nessas três tabelas menores, eu consigo reconstruir a tabela maior.
_________________________________________
64
Identificando as formas normais
Pessoal, muitas são as questões literais acerca das características das formas normais.
Contudo, algumas questões pedem para que você identifique a forma normal de uma tabela.
Para auxiliar nesse processo, vou apresentar a seguir alguns exemplos de como realizar
essa identificação.
EXEMPLIFICANDO!!!
Dada a tabela a seguir e sabendo que sua chave primária é composta por OAB_Advogado e
ID_Cliente, vamos avaliar sua forma normal:
OAB_Advogado ID_Cliente Valor_Da_Causa Percentual_De_Honorário Valor_Total_Honorário
12345-SC 1 25000 30 7500
97845-SP 2 120000 20 24000
3469-SP 3 1450000 10 145000
Para avaliar em que forma normal essa tabela está, vamos analisar uma a uma das formas
normais, isto é, da primeira à quinta para verificar se ela descumpre alguma. Se ela
descumprir uma específica, então, a tabela está na forma normal imediatamente anterior.
Vamos lá então:
1ª Forma Normal: a tabela possui somente atributos atômicos, isto é, não possui nenhum
atributo multivalorado ou composto. Logo, está na 1FN.
2ª Forma Normal: dada a chave composta {OAB_Advogado, ID_Cliente}, nenhum dos
atributos não chave depende de apenas parte dessa chave, isto é, não há dependência parcial.
O valor da causa, o percentual de honorário e o valor total do honorário dependem de ambos
os atributos da chave, não sendo relacionado a somente um deles. Isto é, eles não são
atributos que dependem apenas do advogado e nem apenas do cliente, mas da junção desses
dois em um processo.
3ª Forma Normal: o fato de possuir um campo de cálculo fere a 3FN, pois teremos a
existência de um atributo que não depende exclusivamente da chave primária da tabela.
Nesse caso, Valor_Total_Honorário depende dos atributos Valor_da_Causa e
Percentual_do_Honorário, que não são chaves.
Dessa forma, ficamos com, no máximo, a Segunda Forma Normal para esta relação.
_________________________________________
65
EXEMPLIFICANDO!!!
Dada a tabela a seguir e sabendo que sua chave primária é composta por Aluno e Disciplina,
vamos avaliar sua forma normal:
Aluno Disciplina Professor
Carlos Química Ana
Carlos Física Antônio
Marta Química Ana
Marta Português Maria
João Português Manoel
Vamos analisar cada uma das formas normais:
1ª Forma Normal: a tabela possui somente atributos atômicos, isto é, não possui nenhum
atributo multivalorado ou composto. Logo, está na 1FN.
2ª Forma Normal: somente existe um atributo não chave: o atributo Professor. Este
atributo depende de todos os atributos da chave, isto é, de Aluno e de Disciplina. Logo, eu
não tenho dependência parcial e, portanto, a tabela está na 2FN.
3ª Forma Normal: se eu só tenho um atributo não chave, não é possível ter uma
dependência transitiva. O atributo Professor depende diretamente da chave {Aluno,
Disciplina}. Logo, a tabela está na 3FN.
FNBC: todo determinante deve ser chave, então vejamos quem são os determinantes da
tabela:
{Aluno, Disciplina} -> Professor
Professor -> Disciplina.
Logo, há um determinante que não é chave da tabela, pois Professor determina a Disciplina.
Logo, esta tabela não está na FNBC.
Dessa forma, ficamos com, no máximo, a Terceira Forma Normal para esta relação.
EXEMPLIFICANDO!!!
A tabela a seguir não está nem na primeira forma normal. Observe-a:
Código_cliente Nome Telefone Endereço
CD001 José
9563-6352
9847-2501
Rua Seis, 85
Morumbi
12536-965
CD002 Maria 3265-8596
Rua Onze, 64
Moema
65985-963
CD003 Jânio
8545-8956
9598-6301
Praça Ramos
Liberdade
68858-633
Perceba que “Telefone” é multivalorado, pois aceita mais de um valor. Além disso, Endereço
é composto, sendo claramente representando como um conjunto de vários componentes
menores (Rua, número, cidade e CEP).
_________________________________________
66
Resumo das formas normais
O esquema a seguir consolida as principais informações acerca de cada forma normal:
Esquema 10 – Formas normais.
35- (CESPE / CEBRASPE - 2024 – CAU-BR - Analista) No que se refere a banco de
dados, julgue o próximo item.
Para que uma tabela esteja na terceira forma normal, é suficiente que ela não possua
nenhuma coluna não-chave que dependade outra coluna não-chave.
Resolução:
São dois os requisitos para uma tabela estar na terceira forma normal:
▪ Estar na 2FN.
▪ Não possuir dependências transitivas, isto é, não possui colunas não chave
dependendo de outros não chave.
Nesse caso, não é suficiente apenas o segundo requisito, por isso a assertiva está errada.
Gabarito: Errado.
•Todos os atributos são atômicos (sem atributos multivalorados ou compostos).
1FN
•Está na 1FN.
•Não possui dependência parcial. Cada atributo não-chave é dependente da
chave primária (ou candidata) inteira e não de apenas parte dela.
2FN
•Está na 2FN.
•Não possui dependência transitiva. Cada atributo não-chave depende
exclusivamente da chave primária (ou candidata) e não de atributos não-chave.
3FN
•Está na 3FN (variação forte da 3FN).
•Todo determinante é chave candidata, não hávendo dependências entre
atributos não chave.
FNBC
•Está na 3FN.
•Não possui dependência multivalorada.
4FN
•Está na 4FN.
•Não possui dependência de junção.
5FN
_________________________________________
67
36- (CESPE / CEBRASPE - 2024 – CTI - Tecnologista Júnior) A respeito da
normalização de dados no design de bancos de dados relacionais, julgue o item que se segue.
Considere a seguinte tabela ItemVenda e seus atributos.
Tabela ItemVenda
• CodVenda: chave primária
• CodProduto: chave primária
• Qtd
• PrecoProduto
Se a coluna PrecoProduto depender do valor da coluna CodProduto, que é parte da chave
primária da tabela ItemVenda, então, haverá dependência funcional total.
Resolução:
A assertiva citou uma dependência funcional parcial e não total, pois afirmou que
CodProduto depende apenas de parte da chave da tabela.
Gabarito: Errado.
37- (CESPE / CEBRASPE – MPO - 2024 - Analista de Planejamento e
Orçamento) Acerca de fundamentos dos bancos de dados relacionais, normalização,
diagrama entidade-relacionamento e linguagem SQL, julgue o item a seguir.
Nos bancos de dados relacionais, enquanto a segunda forma normal é baseada no conceito
de dependência transitiva, a terceira forma normal baseia-se no conceito de dependência
funcional total.
Resolução:
A assertiva inverteu as formas normais. O correto seria: Nos bancos de dados relacionais,
enquanto a segunda terceira forma normal é baseada no conceito de dependência transitiva,
a terceira segunda forma normal baseia-se no conceito de dependência funcional total.
Gabarito: Errado.
38- (CESPE / CEBRASPE - 2023 – FUB - Analista de Tecnologia da Informação)
Acerca de bancos de dados relacionais, julgue o item seguinte.
As tabelas que estejam na primeira forma normal (1FN) e que possuam apenas uma coluna
como chave primária também estão na segunda forma normal (2FN).
Resolução:
Exatamente. Se a chave é simples (única coluna), então não há como se falar em dependência
parcial, e, por consequência, não é possível violar a 2FN. Somente é possível identificar
dependência parcial caso haja uma chave composta (mais de uma coluna).
Gabarito: Certo.
_________________________________________
68
39- (FGV - 2024 – TJ-MS - Técnico de Nível Superior) A normalização de dados é o
processo de analisar os esquemas de relações com base nas dependências funcionais de seus
atributos e chaves primárias, envolvendo uma série de Formas Normais (FN). Observe o
esquema da tabela “Pedido”, a seguir.
A tabela "Pedido" possui chave primária composta (ID_PEDIDO, ID_CLIENTE),
atributos com valores atômicos e dependência parcial de coluna não chave
(NOME_CLIENTE) com parte da chave primária (ID_CLIENTE).
Com base nisso, “Pedido” está normalizada na FN:
a) 1FN;
b) 2FN;
c) 3FN;
d) 4FN;
e) 5FN.
Resolução:
Com base nas informações dadas, vamos avaliar as formas normais para essa tabela:
1ª Forma Normal: a descrição da questão foi clara em citar que os atributos possuem
“valores atômicos”. Logo, como não há atributos compostos ou multivalorados, a tabela está
na primeira forma normal.
2ª Forma Normal: a própria questão citou que há dependência parcial da coluna
NOME_CLIENTE para parte da chave ID_CLIENTE. Assim, havendo dependência de
um atributo não chave em relação a apenas parte da chave, isto é, dependência parcial, essa
tabela viola a segunda forma normal.
Dessa forma, ficamos com, no máximo, a Primeira Forma Normal para esta relação.
Gabarito: Letra A.
40- (FGV - 2023 – SEFAZ-MT - Fiscal de Tributos Estaduais) A normalização das
estruturas de dados é uma etapa importante do processo de modelagem relacional para
eliminar distorções ou anomalias no modelo.
Diz-se que uma tabela está na segunda forma normal, de acordo com as regras de
normalização, se ela está na primeira forma normal e
a) as linhas da tabela são unívocas, sem chaves compostas e todos os seus atributos são
atômicos.
b) as linhas não contêm itens repetitivos, atributos com valores nulos e nem
multidimensionais.
_________________________________________
69
c) cada uma das colunas não pertencentes à chave primária não for dependente parcialmente
dessa chave.
d) contém apenas chaves externas e conecta-se a outras tabelas por múltiplas junções.
e) as colunas não pertencentes à chave primária ficam determinadas transitivamente por
esta.
Resolução:
Vamos analisar cada um dos itens:
a) Incorreto: as linhas serem unívocas é uma característica do próprio modelo relacional.
As chaves podem ser simples ou compostas. Até aqui não temos relação com nenhuma
forma normal. Já a exigência de atributos atômicos é da primeira forma normal.
b) Incorreto: as linhas não conterem itens repetitivos para todos os seus atributos e a
possibilidade de aceitar valores nulos são características do próprio modelo relacional, não
fazendo parte da definição de nenhuma forma normal.
c) Correto: cada uma das colunas não pertencentes à chave primária não for dependente
parcialmente dessa chave. Essa é a definição da segunda forma normal, em que as colunas
não chave devem depender da totalidade da chave e não apenas de parte dela.
d) Incorreto: a possibilidade de uma tabela possui chaves externas que permitam junções
não está relacionada a nenhuma forma normal.
e) Incorreto: as colunas não pertencentes à chave primária não ficam determinadas
transitivamente por esta. É a terceira forma normal que garante a inexistência de
dependências transitivas entre atributos não chave.
Gabarito: Letra C.
41- (FCC - 2023 – TRT 12ª Região - Analista Judiciário) Uma tabela está na segunda
forma normal (2FN) se e somente se
a) não contém atributos multivalorados, mas contém tabelas aninhadas e atributos
candidatos que dependem de somente uma parte da chave primária.
b) contém atributos multivalorados, mas não contém tabelas aninhadas e nem atributos
candidatos que dependem de somente uma parte da chave primária.
c) contém tabelas aninhadas, mas não contém atributos multivalorados e nem atributos não
chave que dependem de somente uma parte da chave primária.
d) não contém tabelas aninhadas e nem atributos multivalorados.
e) não contém tabelas aninhadas nem atributos multivalorados e todos seus atributos não
chave são dependentes da totalidade da chave primária.
_________________________________________
70
Resolução:
Vamos analisar a qual forma normal se refere cada um dos itens:
a) Incorreto: se contém tabelas aninhadas nem está na primeira forma normal. Se não
está na primeira, não pode estar na segunda. Além disso, atributos que dependem somente
de parte da chave violam a regra da segunda.
b) Incorreto: se contém atributos multivalorados nem está na primeira forma normal.
Se não está na primeira, não pode estar na segunda.
c) Incorreto: se contém tabelas aninhadas nem está na primeira forma normal. Se não
está na primeira, não pode estar na segunda. Além disso, atributos que dependem somente
de parte da chave violam a regra da segunda.d) Incorreto: não contém tabelas aninhadas e nem atributos multivalorados. Isso só
garante que esteja na primeira, mas não garante que esteja na segunda, pois além de estar
na primeira precisa também não ter dependência parcial para estar na segunda.
e) Correto: não contém tabelas aninhadas nem atributos multivalorados, logo está na
primeira forma normal, e todos seus atributos não chave são dependentes da totalidade da
chave primária, estando também na segunda forma normal.
Gabarito: Letra E.
_________________________________________
71
1.10.2 TEMA AVANÇADO: análise de dependências e formas normais
Um tema mais avançado, mas que é abordado vez por outra é o de análise de dependências
funcionais, bem como a repercussão dessa análise na definição de uma forma normal.
DICA DO PROFESSOR!!!
A Fundação Getúlio Vargas é, principalmente, a banca que costuma trazer questões sobre
esses temas. Sendo assim, vou trazer uma discussão sobre isso, mas se você não estiver
estudando para concurso dessa banca, sugiro deixar esse tópico de lado.
Uma dependência funcional é um relacionamento entre dois ou mais atributos de forma
que o valor de um atributo identifique o valor para cada um dos outros atributos, ou seja,
um atributo está relacionado a outro. A dependência funcional pode ser ilustrada por →.
Assim, em A → B, temos que “A determina B” ou “B é dependente (funcionalmente) de
A”, isto é, o valor de B pode ser descoberto sabendo o valor de A.
EXEMPLIFICANDO!!!
Em uma tabela com os atributos CPF, nome e salário, temos as seguintes dependências
funcionais:
CPF → nome; (a partir do CPF podemos facilmente descobrir o nome).
CPF → salário; (a partir do CPF podemos facilmente descobrir o salário).
CPF → nome, salário; (a partir do CPF podemos facilmente descobrir o nome e o salário).
Por outro lado:
salario → nome não é uma dependência válida. (não podemos descobrir o nome apenas com
o valor do salário, pois inclusive podemos ter vários nomes para um mesmo salário).
Sabendo-se o que é uma dependência funcional, temos que saber como identificar suas
influências nas principais formas normais, isto é, da 1FN a FNBC. Vejamos então:
▪ Primeira Forma Normal (1FN): não é baseada em dependência funcional. Essa
forma normal é baseada na presença somente de atributos atômicos, então devem
ser analisados os atributos em separado e não a relação entre eles.
_________________________________________
72
▪ Segunda Forma Normal (2FN): não podemos ter dependências parciais. Se A,
B forem a chave composta de uma tabela, então não podemos ter nenhum atributo
não chave que dependa somente de A ou somente de B.
EXEMPLIFICANDO!!!
Dada a seguinte estrutura de tabela, cuja chave seja {nro-pedido, nro-peça}:
pedido (nro-pedido, data, nro-peça, descrição, qtdade_comprada, preço_cotado)
E as seguintes dependências funcionais:
nro-pedido → data
nro-peça → descrição
{nro-pedido, nro-peça} → {qtdade_comprada, preço_cotado}
Perceba que, nesse exemplo, temos atributos que dependem apenas de parte da
chave. Data depende apenas do nro-pedido e descrição apenas do nro-peça. Assim,
essa relação não está na 2FN.
A solução para resolver isso é separar as partes da chave em tabelas diferentes:
pedido (nro-pedido, data)
peça (nro_peça, descrição)
pedido_peça (nro_pedido, nro_peça, qtdade_comprada, preço_cotado)
▪ Terceira Forma Normal (3FN): não podemos ter dependências transitivas. Não
podemos então ter A → B, B → C e A → C, desde que C não seja chave candidata
ou subconjunto de qualquer chave.
EXEMPLIFICANDO!!!
Dada a seguinte estrutura de tabelas, que tem como chave primária SSN (Social
Security Number):
emp_dept (enome, ssn, datanasc, endereco, dnumero, dnome, degerssn
E as seguintes dependências funcionais:
ssn → {enome, datanasc, endereco, dnumero}
dnumero → {dnome, dgerssn}
CONTINUA...
_________________________________________
73
CONTINUAÇÃO...
Perceba que temos uma dependência transitiva, pois dnumero não é chave, mas
determina dnome e dgerssn. Como dnumero depende de ssn, então dnome e dgerssn
também dependem de ssn, mas indiretamente.
A solução para resolver isso é remover da tabela os atributos que dependem de um
determinante não chave. Assim:
ED1 (enome, ssn, datanasc, endereco, dnumero)
ED2 (dnumero, dnome, dgerssn)
▪ Forma Normal de Boyce-Codd: todo determinante deve ser chave. Para cada
dependência funcional X → A, X é uma superchave.
EXEMPLIFICANDO!!!
Dada a estrutura de tabela, sendo num_propriedade a chave primária e
{municipio_nome, num_lote} uma chave candidata.
LOTES1A (num_propriedade, município_nome, num_lote, area)
Supondo que há milhares de lotes, mas apenas nos municípios de Uberlândia e
Araguari, sendo que:
– em Uberlândia só existem lotes com 100, 200 e 300 m2
– em Araguari só existem lotes com 150, 250 e 350 m2
Nesse caso, temos uma dependência em que area → municipio_nome, pois sabendo a
área, podemos descobrir do município. Temos um determinante que não é chave.
Para resolver isso, precisamos colocar esse determinante como chave, logo,
desmembrar a tabela:
LOTES1AX (num_propriedade, area, num_lote)
LOTES1AY (area, municipio_nome)
DICA DO PROFESSOR!!!
A questão costuma listar um conjunto de dependências funcionais e perguntar se essas
dependências estão respeitando determinada forma normal ou pedir para você definir uma
estrutura de tabela que respeite uma forma normal, então fique atento as regras que define
cada das FNs.
_________________________________________
74
42- (FGV - 2024 – CGE-PB - Auditor de Contas Públicas) Considere as tabelas
relacionais T1 e T2, de acordo com as colunas e as instâncias abaixo descritas. Na execução
dos comandos SQL, assuma que o mecanismo do banco de dados considera valores NULL
como valores desconhecidos (unknown).
Tabela T1
Tabela T2
Tomando como base somente as instâncias das tabelas T1 e T2, anteriormente
apresentadas, considere o conjunto de dependências funcionais que, possivelmente,
poderiam ser verificadas.
Dessa lista enumerada, o conjunto completo das únicas dependências funcionais que
poderiam ser corretamente depreendidas é:
a) 1, 2;
b) 1, 3;
c) 1, 2, 5;
d) 1, 2, 7, 8;
e) 1, 3, 7, 8.
Resolução:
Uma dependência funcional é um relacionamento entre dois ou mais atributos de forma
que o valor de um atributo identifique o valor para cada um dos outros atributos, ou seja,
um atributo está relacionado a outro. A dependência funcional pode ser ilustrada por →.
Assim, em A → B, temos que “A determina B” ou “B é dependente (funcionalmente) de
A”, isto é, o valor de B pode ser descoberto sabendo o valor de A.
_________________________________________
75
A regra básica é que um mesmo valor do determinante sempre deve levar a um mesmo
valor do determinado. Dito isto, vamos avaliar cada uma das dependências:
(1) Correto: P -> N. Em T1, para cada valor de P, existe um único valor de N. Por exemplo,
se te digo o valor de P = 1, você sabe exatamente que N é 10. Se eu te der qualquer valor
de P, você não terá dúvidas sobre o valor de N.
(2) Incorreto: N -> P. Em T1, para cada valor de N, não existe um único valor de P. Por
exemplo, se eu te digo que N=10, você não sabe se P é 1 ou 4.
(3) Correto: E -> Q. Em T2, para cada valor de E, existe um único valor de Q. Por exemplo,
se te digo o valor de E = 1, você sabe exatamente que Q é 10. Se eu te der qualquer valor
de E, você não terá dúvidas sobre o valor de Q.
(4) Incorreto: E -> P. Em T2, nem todo valor de E leva a um valor válido de P. Por
exemplo, para E=4, temos que P=NULL, ou seja, não sabemos qual o valor de P para E=4.
(5) Incorreto: Q -> P. Em T2, para cada valor de Q, não existe um único valor de P. Por
exemplo, se eu te digo que Q=10, você nãoatenção também aos
seguintes temas:
▪ 1.10.2 Análise de dependências funcionais e as formas normais
▪ 1.10.3 Axiomas de dependências funcionais
CESGRANRIO
A banca CESGRANRIO também “ama” normalização e as formas normais, então se estuda
para essa banca, atente-se bem para esse tópico.
VUNESP
A banca VUNESP costuma fazer uma abordagem bem teórico/conceitual dos temas dessa
aula. Então vale ter uma atenção redobrada com as definições. Também apresenta várias
questões sobre as operações de álgebra relacional, inclusive trazendo exemplos de
operações para serem analisados. Assim, o estudo para essa banca, além de seguir as
diretivas gerais, deve também ter uma atenção especial ao seguinte tópico:
▪ 1.9 Álgebra relacional
_________________________________________
6
GLOSSÁRIO DE TERMOS
Álgebra relacional: conjunto de operações realizadas que podem ser realizadas nas
relações (tabelas), tomando uma ou duas relações como entrada e retornando uma relação
como saída.
Aplicação, aplicativo ou software: programa de computador com objetivo de
desempenhar tarefas práticas, em geral ligadas ao processamento de dados.
Aridade ou grau: número de colunas em uma tabela.
Atomicidade: propriedade das transações que garante que uma transação seja executada
ou por completo ou de forma alguma.
Atributo: coluna ou campo de uma tabela.
Becape ou backup: cópia de segurança dos dados de um dispositivo de armazenamento.
Booleano: tipo de dado que possui apenas dois valores: VERDADEIRO ou FALSO.
Cardinalidade: número de entidades que outra entidade pode se associar via
relacionamento.
Campo de indexação: campo (coluna ou atributo) utilizado para criar um índice.
Catálogo ou dicionário de dados: local do SGBD onde ficam os metadados. Possui
informações sobre a estrutura de cada arquivo, o tipo e o formato de armazenamento de
cada item de dados e diversas restrições sobre os dados.
Consulta ad hoc: criada na hora, no momento em que surge a necessidade. Não é salva no
SGBD.
Dependência funcional: relacionamento entre dois ou mais atributos de forma que o valor
de um atributo identifique o valor para cada um dos outros atributos.
Determinante (atributo): atributo que determina outro, isto é, cujo valor do outro é
relacionado a ele.
Domínio: tipo de dados válido para uma coluna. Valores possíveis.
Índice: estrutura de acesso auxiliar que permite agilizar a recuperação de registros. Oferece
caminho de acesso secundário.
Integridade: capacidade de garantir que a informação não foi alterada sem autorização.
Modelo de dados: descrição dos tipos de informações que estão armazenadas em um banco
de dados.
Nulo ou Null: valor especial que representa "falta de informação ou informação
inaplicável".
Ponteiro: é um tipo de dado cujo valor se refere diretamente a um outro valor. É um
apontador ou referência para um dado armazenado em outro lugar.
Relação: sinônimo de tabela. Bloco de montagem básico do modelo relacional.
_________________________________________
7
RelVar ou variável de relação: cabeçalho de uma tabela, formado pelos pares domínio e
nome.
Restrição de integridade: regras usadas para garantir a exatidão e a consistência dos
dados.
Transação: programa em execução ou processo que inclui um ou mais acessos ou operações
de banco de dados.
Transparente para o usuário: usuário não precisa conhecer os detalhes ou funcionamento
interno.
Tupla: linha ou registro de uma tabela.
Visão ou view: tabela virtual derivada de outras tabelas. Maneira alternativa de
visualização dos dados. Consulta pré-definida ou armazenada, executada sempre que
referenciada.
Visão materalizada ou materialized view: visão armazenada.
_________________________________________
8
1. MODELO RELACIONAL
1.1 Conceitos do modelo relacional
O modelo relacional atraiu bastante a atenção devido a sua simplicidade e base matemática.
Pode ser considerado o primeiro modelo a ser descrito formalmente.
O modelo relacional usa o conceito de relação matemática como bloco de montagem
básico e se fundamenta na teoria dos conjuntos e lógica de predicado de primeira
ordem. Um banco de dados relacional utiliza as relações para representar tanto os
dados quanto os relacionamentos entre estes dados. Informalmente, uma relação é
semelhante a uma tabela de valores, em que cada linha na tabela representa uma coleção
de valores de dados relacionados ou, até certo ponto, a um arquivo plano de registros,
porque cada registro tem uma simples estrutura linear ou plana.
O modelo relacional requer que o banco de dados seja percebido pelos usuários como
tabelas, embora os dados possam estar armazenados fisicamente em outras estruturas
(índices, listas, sequências, etc.). Todo o conteúdo de informação do banco de dados é
representado de um e somente um modo, ou seja, como valores explícitos em posições de
colunas em linhas de tabelas. Esse é o chamado Princípio da Informação.
Para C.J. Date, o modelo relacional é descrito (informalmente) com base em três aspectos:
▪ Aspecto estrutural: bancos de dados percebidos pelos usuários como tabelas.
▪ Aspecto de integridade: as tabelas satisfazem a restrições de integridade
para garantir a exatidão e consistência dos dados, refletindo corretamente a
realidade modelada e protegendo o banco de dados contra danos acidentais.
▪ Aspecto manipulador: os operadores disponíveis para que o usuário possa
manipular as tabelas são operadores que derivam tabelas a partir de outras.
EXEMPLIFICANDO!!!
Vejamos um exemplo de uma relação (ou tabela) com os dados do cadastro de clientes:
Código do cliente Nome do cliente CPF Endereço
134512 João Aprovado dos Santos 123.123.123-12 Rua A, nº 123
251218 Maria Concursada Fernandes 456.456.456-45 Rua B, nº 456
Note que todos os dados são representados por meio de uma estrutura tabular (uma relação
ou tabela), isto é, segue-se o Princípio da Informação.
Podemos observar a presença dos 3 aspectos discutidos por C. J. Date:
▪ Estrutural: você percebe os dados como uma tabela, mas estes dados podem estar armazenados
fisicamente em outras estruturas.
▪ De integridade: podemos ter uma regra que só permita o cadastro de um cliente se for inserido
um CPF composto somente por números e seguindo o padrão XXX.XXX.XXX-XX.
▪ Manipulador: podemos fazer uma operação nesta tabela para selecionar, por exemplo, somente
os clientes que moram na Rua A.
_________________________________________
9
A arquitetura ANSI/SPARC em três níveis considera que os bancos de dados relacionais
consistem de três componentes:
▪ Uma coleção de estruturas de dados, formalmente chamadas de relações, ou
informalmente tabelas, compondo o nível conceitual;
▪ Uma coleção dos operadores, a álgebra e o cálculo relacionais, que constituem a base
da linguagem SQL;
▪ Uma coleção de restrições da integridade, definindo o conjunto consistente de
estados de base de dados e de alterações de estados.
O autor C.J. Date amplia essa divisão, definindo que de maneira mais formal, o modelo
relacional consiste em cinco componentes:
▪ Uma coleção ilimitada de tipos escalares (incluindo em particular o tipo booleano ou
valor verdade).
▪ Um gerador de tipo de relação e uma interpretação pretendida para esses tipos de
relações gerados.
▪ Recursos para definição de RelVars (variáveis de relações) desses tipos de relações
gerados. Uma relvar (variável relacional) é um conjunto de pares ordenados de
domínio e nome que serve como um cabeçalho para uma relação.
▪ Um operador de atribuição relacional para atribuição de valores de relações a essas
RelVars.
▪ Uma coleção ilimitada de operadores relacionais genéricos (“a álgebra relacional”)
para derivar valores de relações a partir de outros valores de relações.
Muita informação??? Não se preocupe, veja um esquema para facilitar sua vida!sabe se P é 2 ou NULL.
(6) Incorreto: Q -> E. Em T2, para cada valor de Q, não existe um único valor de E. Por
exemplo, se eu te digo que Q=10, você não sabe se E é 1 ou 4.
(7) Incorreto: P -> E. Em T2, temos um valor NULL para P que está associado a um valor
4 de E. Isso não garante a dependência funcional, pois o valor E=4 não depende
funcionalmente de nenhum valor de P.
(8) Incorreto: P -> Q. Em T2, temos um valor NULL para P que está associado a um valor
10 de Q. Isso não garante a dependência funcional, pois o valor Q=10 não depende
funcionalmente de nenhum valor de P.
Logo são válidas somente as dependências P -> N e E -> Q.
Gabarito: Letra B.
43- (FGV - 2023 – TJ-SE - Analista Judiciário) Considere uma tabela de um banco
relacional com quatro colunas: X, Y, Z e W. Na modelagem dos dados, foram detectadas as
seguintes dependências funcionais para essa tabela.
X → Y
X → Z
Z → X
Y → Z
X → W
A lista das colunas que devem necessariamente ser definidas com a propriedade unique, com
colunas isoladas ou em conjunto, é:
a) X e Y, em conjunto, e W, separadamente;
b) X, Y, Z, W, separadamente;
_________________________________________
76
c) X, Y, Z, separadamente;
d) X, isoladamente, e ainda Y, Z, em conjunto;
e) X, isoladamente.
Resolução:
A questão indiretamente cobra a forma normal de boyce-codd, segundo a qual, todos os
determinantes devem ser chaves primárias ou candidatas. Nesse caso, ao usar a propriedade
unique garantimos a não repetição dos valores. Também será necessário declarar os
atributos como não nulos, mas a questão não entra nesse mérito.
O fato é que queremos identificar os atributos que devem ser declarados como únicos. Pela
forma normal de boyce-codd, são todos os determinantes.
X determina Y, Z e W (X → Y e X → Z e X → W)
Z determina X (Z → X)
Y determina Z (Y → Z).
Logo, sabemos que esses três atributos separadamente são determinantes, então devem
ser marcados com unique isoladamente. Eles serão chaves candidatas simples.
Para agrupar os determinantes em conjuntos, eles precisariam determinar o mesmo
conjunto de atributos, o que não ocorre no caso da questão. Por exemplo, se ao tivéssemos
Y → X (ao invés de Y → Z), então tanto Z quanto Y determinariam apenas X, então
poderíamos agrupar Z, Y em um conjunto de atributos, isto é, eles seriam uma chave
candidata composta.
Gabarito: Letra C.
44- (FGV - 2018 - AL-RO - Analista Legislativo - Banco de Dados) Considere uma
tabela relacional R com atributos A, B, C, D, e as seguintes dependências funcionais.
A → B
B → C
A → D
B → A
Estabelecendo-se que os atributos sublinhados identificam chaves, primárias ou candidatas,
o esquema correto para que se obtenha um projeto normalizado até a forma normal Boyce-
Codd, é
a) R (A, B, C, D)
b) R (A, B, C, D)
c) R (A, B, C, D)
d) R1 (A, C, D)
R2 (A, B)
_________________________________________
77
e) R1 (A, B, D)
R2 (B, C)
Resolução:
Uma tabela está na Forma Normal de Boyce-Codd (FNBC ou BCNF) se, e somente se,
estiver na 3FN e todo determinante é chave candidata. Dessa forma, não há
dependências entre atributos não chave. É considerada uma variação forte da 3FN.
Logo, dadas as dependências funcionais:
A → B
B → C
A → D
B → A
Temos que A e B são determinantes e, portanto, devem ser chaves da tabela. Logo,
a) Correto: R (A, B, C, D) A e B são determinantes e chaves. Nesse caso, A e B serão chaves
candidatas diferentes e não uma única chave composta. Essa possibilidade é dada pela
própria questão ao informar que os atributos sublinhados identificam chaves, primárias ou
candidatas. É por isso que essa forma atende ao solicitado, considerando-se A e B duas
chaves distintas.
b) Incorreto: R (A, B, C, D) B é um determinante e, portanto, deveria ser chave.
c) Incorreto: (A, B, C, D) A é um determinante e, portanto, deveria ser chave.
d) Incorreto: R1 (A, C, D)
R2 (A, B) B é um determinante e, portanto, deveria ser chave.
e) Incorreto: R1 (A, B, D)
R2 (B, C) B é determinante de C e A e não somente de C.
Gabarito: Letra A.
_________________________________________
78
1.10.3 TEMA AVANÇADO: axiomas das dependências funcionais
Um assunto que costuma ser cobrado pouco, mas que pode aparecer na sua prova, é o de
axiomas ou regras de inferência das dependências funcionais.
DICA DO PROFESSOR!!!
A Fundação Getúlio Vargas é, principalmente, a banca que costuma trazer questões sobre
esses temas. Sendo assim, vou trazer uma discussão sobre isso, mas se você não estiver
estudando para concurso dessa banca, sugiro deixar esse tópico de lado.
Vamos verificar quais são as regras de inferência ou axiomas das dependências funcionais.
As três regras básicas, chamadas Axiomas de Armstrong, são:
▪ Reflexibilidade: se X contém Y, então X → Y. (dependência funcional trivial)
o Exemplo:
Se X é tipo_embarcacao, modelo e Y é tipo_embarcacao,
Então tipo_embarcacao, modelo → tipo_embarcacao.
▪ Expansibilidade ou aumentativa: se X → Y, então XZ → YZ para qualquer Z.
o Exemplo:
Se CPF → endereço,
Então CPF, nome → endereço, nome.
▪ Transitividade: se X → Y, e Y → Z então X → Z.
o Exemplo:
Se CPF → código-cidade e código-cidade → nome-cidade
Então CPF → nome-cidade.
Como consequências desses axiomas, temos as seguintes regras adicionais:
▪ União ao aditiva: se X → Y, X → Z então X → YZ.
o Exemplo:
Se CPF → nome e CPF → endereco
Então CPF → nome, endereco
_________________________________________
79
▪ Decomposição ou separação: Se X → YZ, então X → Y e X → Z.
o Exemplo:
Se CPF → nome, endereço
Então CPF → nome e CPF → endereço
Podemos citar ainda outras regras básicas ou axiomas:
▪ Pseudo-Transitividade: se X → Y e YZ → W, então XZ → W.
o Exemplo:
Se CPF → código-funcionário e código-funcionário, mês → salário-
funcionário
Então CPF, mês → salário-funcionário.
▪ Acumulação: Se X → Y, então XZ → Y.
o Exemplo:
Se CPF → endereco,
Então CPF, nome → endereco.
▪ Unicidade: Se a: X → Y e b: X →Y; a=b.
Em resumo:
Axioma Descrição
Reflexibilidade Se X contém Y, então X → Y.
Expansibilidade ou aumentativa Se X → Y, então XZ → YZ para qualquer Z.
Transitividade Se X → Y, e Y → Z então X → Z.
União ao aditiva Se X → Y, X → Z então X → YZ.
Decomposição ou separação Se X → YZ, então X → Y e X → Z.
Pseudo-Transitividade X → Y e YZ → W, então XZ → W
Acumulação Se X → Y, então XZ → Y
Unicidade Se a: X → Y e b: X →Y; a=b
Esquema 11 – Axiomas de dependências funcionais.
_________________________________________
80
45- (FGV - 2023 – TJ-SE - Analista Judiciário) A normalização de esquemas de bancos
de dados é feita a partir das dependências funcionais existentes entre as colunas de uma
tabela. Além disso, é possível combinar dependências e derivar novas dependências a partir
de axiomas preestabelecidos. Considerando uma tabela hipotética, com colunas X, Y e Z, o
axioma da transitividade é definido como segue:
a) Se X → Y e X →Z então Z → XY;
b) Se X → Y e Y → Z então X → Z;
c) Se X → Y então XZ → YZ;
d) Se X → Y então X XY;
e) Se XY → Z então X → Z.
Resolução:
Vejamos a que axioma se refere cada item:
a) Incorreto: Se X → Y e X →Z então Z → XY não é um axioma válido.
b) Correto: Se X → Y e Y → Z então X → Z é o axioma da transitividade.
c) Incorreto: Se X → Y então XZ → YZ é o axioma da expansibilidade ou aumentativo.
d) Incorreto: Se X → Y então X → XY é o axioma da reflexibilidade.
e) Incorreto: Se XY → Z então X → Z não é um axioma válido.
Gabarito: Letra B.
46- (FGV - 2022 – TCU – Auditor Federal de Controle Externo) Para a questão a
seguir, considere uma tabela relacional R, com atributos W, X, Y, Z, e o conjunto de
dependências funcionais identificadas para esses atributos.
X → Y
X → Z
Z → XZ → W
Analise o conjunto de dependências funcionais inferidas abaixo a partir do conjunto de
atributos e dependências funcionais presentes na tabela R, como descrita anteriormente.
(1) X → Y Z W
(2) X → W
(3) X W → Y W
(4) X Y Z W → X Y
(5) Y → Z
_________________________________________
81
À luz dos axiomas da teoria de projeto de bancos de dados aplicáveis nesse caso, é correto
concluir que, dentre essas dependências inferidas:
a) somente 2 é válida;
b) somente 1, 2 e 5 são válidas;
c) somente 1, 2, 3 e 4 são válidas;
d) somente 2, 3, 4 e 5 são válidas;
e) todas são válidas.
Resolução:
Os axiomas para derivar as dependências funcionais são:
Axioma Descrição
Reflexibilidade Se X contém Y, então X → Y.
Expansibilidade ou aumentativa Se X → Y, então XZ → YZ para qualquer Z.
Transitividade Se X → Y, e Y → Z então X → Z.
União ao aditiva Se X → Y, X → Z então X → YZ.
Decomposição ou separação Se X → YZ, então X → Y e X → Z.
Pseudo-Transitividade X → Y e YZ → W, então XZ → W
Acumulação Se X → Y, então XZ → Y
Unicidade Se a: X → Y e b: X →Y; a=b
Logo, dadas
X → Y
X → Z
Z → X
Z → W
Vamos analisar os itens:
(1) Correto: X → Y Z W. Como X → Z e Z → W, pela transitividade, X → W.
Como X → Y, X → Z e X → W (descoberta acima), pela união, X → Y Z W.
(2) Correto: X → W. Como X → Z e Z → W, pela transitividade, X → W.
(3) Correto: X W → Y W. Como X → Y, pela expansibilidade X W → Y W.
(4) Correto: X Y Z W → X Y. Axioma da reflexibilidade, pois X Y Z W contém X Y.
(5) Incorreto: Y → Z. Não é possível fazer essa derivação por nenhum axioma ou
combinações entre eles.
Gabarito: Letra C.
_________________________________________
82
1.10.4 TEMA AVANÇADO: definições formais para as formas normais
Galera, um tema avançado em provas, mas que pode cair em algumas questões é o que trata
dos modelos ou descrições matemáticas para as formas normais.
DICA DO PROFESSOR!!!
A Fundação Getúlio Vargas é, principalmente, a banca que costuma trazer questões sobre
esses temas. Nesse caso, eu sugiro que se você for fazer prova dessa banca, então dê uma
olhada nas descrições matemáticas. Eu não vou explicar o seu funcionamento, pois isso é
totalmente improdutivo e isso não cai nesse nível, mas vou citar as descrições.
A seguir apresento as descrições matemáticas ou formais para as formas normais:
▪ Primeira Forma Normal (1FN): não possui uma definição formal ou matemática
específica. Sabemos que o domínio dos atributos deve incluir apenas valores atômicos.
▪ Segunda Forma Normal (2FN): um esquema de relação R está na segunda forma
normal (2FN) se cada atributo não principal A em R não for parcialmente dependente
de qualquer chave de R.
▪ Terceira Forma Normal (3FN): um esquema de relação R está na terceira forma
normal (3FN) se toda vez que uma dependência funcional não trivial X → A se
mantiver em R, ou (a) X for uma superchave de R ou (b) A for um atributo principal
de R.
▪ Forma Normal de Boyce Codd (FNBC): um esquema de relação R está na FNBC se
toda vez que uma dependência funcional não trivial X → A se mantiver em R, então
X é uma superchave de R.
▪ Quarta Forma Normal (4FN): Um esquema de relação R está na 4FN com relação
a um conjunto de dependências F (que inclui dependências funcionais e dependências
multivaloradas) se, para cada dependência multivalorada não trivial X --> Y em F, X
é uma superchave para R.
▪ Quinta Forma Normal (5FN): Um esquema de relação R está na quinta forma
normal (5FN) com relação a um conjunto F de dependências funcionais,
multivaloradas e de junção se, para cada, dependência de junção não trivial DJ (R1,
R2, ..., Rn) em F (ou seja, implicada por F), cada Ri é uma superchave de R.
ATENÇÃO!!!
Coisa de louco né? Pois é. Por isso falo que não vale a pena entender isso. Seriam páginas
para explicar isso e, bem provável, que ainda assim você não entendesse. O bom é que não
precisa entender, nas poucas vezes que isso cai, é de forma literal.
_________________________________________
83
47- (FGV - 2013 - AL-MT - Analista de Sistemas - Banco de Dados) Dependências
funcionais podem ser combinadas de modo que novas dependências sejam derivadas a partir
de um conjunto inicial de dependências. Essas regras de derivação são conhecidas como
Axiomas de Armstrong. Assim, a partir das dependências funcionais
Leia o fragmento a seguir:
“Um esquema de relação S está na _____ forma normal com relação a um conjunto de
dependências F (que inclui dependências funcionais e dependências multivaloradas) se, para
cada dependência multivalorada não trivial X -> -> Y em F, X é uma superchave para R.”
Assinale a alternativa cujo item completa corretamente a lacuna do fragmento acima.
a) primeira
b) segunda
c) terceira
d) quarta
e) Quinta
Resolução:
A definição é da quarta forma normal.
A seguir apresento as descrições matemáticas ou formais para as formas normais:
▪ Primeira Forma Normal (1FN): não possui uma definição formal ou matemática
específica. Sabemos que o domínio dos atributos deve incluir apenas valores atômicos.
▪ Segunda Forma Normal (2FN): um esquema de relação R está na segunda forma
normal (2FN) se cada atributo não principal A em R não for parcialmente dependente
de qualquer chave de R.
▪ Terceira Forma Normal (3FN): um esquema de relação R está na terceira forma
normal (3FN) se toda vez que uma dependência funcional não trivial X → A se
mantiver em R, ou (a) X for uma superchave de R ou (b) A for um atributo principal
de R.
▪ Forma Normal de Boyce Codd (FNBC): um esquema de relação R está na FNBC se
toda vez que uma dependência funcional não trivial X → A se mantiver em R, então
X é uma superchave de R.
▪ Quarta Forma Normal (4FN): Um esquema de relação R está na 4FN com relação
a um conjunto de dependências F (que inclui dependências funcionais e dependências
multivaloradas) se, para cada dependência multivalorada não trivial X --> Y em F, X
é uma superchave para R.
▪ Quinta Forma Normal (5FN): Um esquema de relação R está na quinta forma
normal (5FN) com relação a um conjunto F de dependências funcionais,
multivaloradas e de junção se, para cada, dependência de junção não trivial DJ (R1,
R2, ..., Rn) em F (ou seja, implicada por F), cada Ri é uma superchave de R.
Gabarito: Letra D.
_________________________________________
84
2. ESQUEMAS DE AULA
Modelos relacional: conceitos básicos
Doze (treze) regras de Codd para os bancos de dados relacionais
Modelo
Relacional
Conceitos
Conjuntos de relações ou tabelas que
representam dados e relacionamentos.
Relação matemática é o bloco de montagem.
Base teórica na teoria de conjunto e lógica
de predicado de primeira ordem.
Princípio da
Informação
Todo o conteúdo de informação é representado
como valores explícitos em posições de
colunas em linhas de tabelas.
Aspectos de descrição
Aspecto estrutural: dados percebidos pelos
usuários como tabelas.
Aspecto de integridade: tabelas satisfazem a
restrições de integridade.
Aspecto manipulador: os operadores
disponíveis para que o usuário possa
manipular essas tabelas derivam tabelas a
partir de outras.
D
o
ze
(
tr
ez
e)
r
eg
ra
s
d
e
C
o
d
d
p
ar
a
B
an
co
s
R
el
ac
io
n
ai
s Regra 0 - Regra fundamental ou regra base
Regra 1 - A regra da informação ou Princípio da Informação
Regra 2 - A regra de acesso garantido
Regra 3 - Tratamento sistemático de valores nulos
Regra 4 - Catálogo on-line baseado no modelo relacional
Regra 5 - Sublinguagem Ampla de Dados
Regra 6 - Atualização de visões
Regra 7 - Inserção, Atualização, e Exclusão de alto nível
Regra 8 - Independência Física de dados
Regra 9 - Independência Lógica de Dados
Regra 10 - Independência de Integridade
Regra 11 - Independência de Distribuição
Regra 12 - A não-transposição das regras
_________________________________________85
Tabela (relação)
Visão (view)
Índice
Visão
Tabela virtual
Armazena apenas a consulta
(não copia os dados)
Em regra, não atualizáveis
Visão materializada
Tabela física auxiliar
Armazena o resultado da
consulta (cópia dos dados)
Em regra, atualizáveis
Ín
d
ic
es
Estruturas de acesso auxiliar.
Utilizados para agilizar a recuperação de registros
Oferecem caminhos de acesso secundários
Usam ponteiros para a localização dos dados.
Não devem ser criados de maneira ilimitada e sem cuidados.
Tabela (relação) – representa dados e relacionamentos.
Coluna (atributo ou campo) - ajuda a
interpretar o significado dos valores
das linhas.
Linha (tupla ou registro) -
coleção de valores de dados
relacionados.
Grau (aridade) - número
de colunas de uma relação.
Domínio - tipo de dado que
descreve os tipos de valores que
podem aparecer em cada coluna.
_________________________________________
86
Chaves
Relacionamentos
Um para um
(1:1)
Cada registro de uma
tabela se relaciona a um
único registro de outra
tabela.
1. Uma tabela mesclada.
2. Duas tabelas, uma com
a chave estrangeira.
3. Três tabelas, com uma
tabela de ligação
referenciando as originais.
Um para muitos
(1:N)
Cada registro de uma
tabela pode ser relacionar
com mais de um registro
de outra, no entanto cada
registro da segundaestá
relacionado a apenas um
registro da primeira.
Chave estrangeira no
lado muitos.
Muitos para
muitos (N:M)
Cada registro em uma
tabela pode estar
relacionado a múltiplos
registros em outra tabela
e vice-versa
Tabela de ligação com
chaves estrangeiras para
cada tabela original.
C
h
a
v
e
c
a
n
d
id
a
ta
Superchave
Conjunto de um ou
mais atributos que,
coletivamente, permitem
identificar de forma
exclusiva uma tupla.
Chave
Superchave com a
propriedade adicional de
que a remoção de
qualquer dos atributos
a faz deixar de ser
chave.
Chave primária
Chave candidata que é
escolhida pelo designer
de banco de dados
como o principal meio de
identificar tuplas.
Cada uma das
chaves possíveis em
uma relação.
Chave estrangeira
Associa registros
referenciando a chave
primária ou candidata de
outra relação.
_________________________________________
87
Restrições de integridade
Operações de álgebra relacional
Operações da álgebra relacional
Seleção (σ) Filtra tuplas que satisfazem um predicado.
Projeção (П)
Filtra atributos especificados de todas as linhas da relação de entrada,
removendo as tuplas duplicadas da saída.
Renomeação (ρ) Altera o nome de uma tabela ou atributo.
Produto
cartesiano (X)
Combina todos os pares de linhas de duas relações de entrada,
independente de eles terem correspondência.
União (Ս) Filtra tuplas que estão na primeira relação, na segunda, ou em ambas.
Diferença (-) Filtra tuplas que aparecem na primeira relação, mas não na segunda.
Junção (⋈)
Combina pares de linhas de duas relações com base em alguma condição
de correspondência entre os atributos
Intersecção (Ո) Filtra tuplas que aparecem na primeira relação e também na segunda.
Divisão (÷)
Filtra tuplas de uma relação que possuem correspondência com todas
as tuplas de outra relação.
Atribuição (←) Armazena o resultado de uma operação em uma relação temporária.
• Regras do próprio modelo, incluindo as características das
relações.
Restrições inerentes no modelo de dados (ou
restrições implícitas)
• Expressas no esquema de banco de dados e na linguagem de
definição de dados. Incluem:
• Restrições de domínio
• Restrições de nulidade ou de vazios
• Restrição de unicidade ou exclusividade
• Restrições de chave
• Restrição de integridade de entidade
• Restrição de integridade referencial
Restrições baseadas em esquema (ou
restrições explícitas)
• Expressas e impostas pelos programas de aplicação.
Restrições baseadas em aplicação (ou
restrições semânticas ou regras de negócios)
P
R
IM
IT
IV
A
S
D
E
R
IV
A
D
A
S
U
N
Á
R
IA
S
UNÁRIA
B
IN
Á
R
IA
S
_________________________________________
88
Formas normais
Axiomas das dependências funcionais
Axioma Descrição
Reflexibilidade Se X contém Y, então X → Y.
Expansibilidade ou aumentativa Se X → Y, então XZ → YZ para qualquer Z.
Transitividade Se X → Y, e Y → Z então X → Z.
União ao aditiva Se X → Y, X → Z então X → YZ.
Decomposição ou separação Se X → YZ, então X → Y e X → Z.
Pseudo-Transitividade X → Y e YZ → W, então XZ → W
Acumulação Se X → Y, então XZ → Y
Unicidade Se a: X → Y e b: X →Y; a=b
•Todos os atributos são atômicos (sem atributos multivalorados ou compostos).
1FN
•Está na 1FN.
•Não possui dependência parcial. Cada atributo não-chave é dependente da
chave primária (ou candidata) inteira e não de apenas parte dela.
2FN
•Está na 2FN.
•Não possui dependência transitiva. Cada atributo não-chave depende
exclusivamente da chave primária (ou candidata) e não de atributos não-chave.
3FN
•Está na 3FN (variação forte da 3FN).
•Todo determinante é chave candidata, não hávendo dependências entre
atributos não chave.
FNBC
•Está na 3FN.
•Não possui dependência multivalorada.
4FN
•Está na 4FN.
•Não possui dependência de junção.
5FN
_________________________________________
89
3. MAPA MENTAL
_________________________________________
90
4. REFERÊNCIAS
BATTISTI, Julio. O Modelo Relacional de Dados. Disponível em:
https://juliobattisti.com.br/artigos/office/modelorelacional_p2.asp. Acesso em: 14 nov.
2017.
DATE, Christopher J. Introdução a sistemas de bancos de dados. Rio de Janeiro:
Elsevier Brasil, 2003.
ELMASRI, Ramez; NAVATHE, Shamkant B. Sistema de Banco de Dados. 7ed. São
Paulo: Pearson Addison Wesley, 2019.
LINHA DE CÓDIGO. Índices MySQL: Otimização de consultas. Disponível em:
. Acesso em: 09 nov. 2020.
OLIVEIRA, Leornado; SENNA, Carlos. Refinamento de Esquemas e Formas Normais.
Disponível em: .
Acesso em: 29 out. 2021.
SYLBERCHATZ, Abraham; KORTH, Henry F.; SUDARSHAN, S. Database System
Concepts. 6th. New York: McGraw-Hill, 2011.
SOFTBLUE. Curso de SQL Completo Gratuito. Disponível em:
.
https://juliobattisti.com.br/artigos/office/modelorelacional_p2.asp
http://www.linhadecodigo.com.br/artigo/3620/indices-mysql-otimizacao-de-consultas.aspx
http://www.linhadecodigo.com.br/artigo/3620/indices-mysql-otimizacao-de-consultas.aspx
https://www.ic.unicamp.br/~geovane/mo410-091/Ch19-Resumo.pdf
https://www.softblue.com.br/site/curso/id/3/CURSO+DE+SQL+COMPLETO+BASICO+AO+AVANCADO+ON+LINE+BD03+GRATIS
https://www.softblue.com.br/site/curso/id/3/CURSO+DE+SQL+COMPLETO+BASICO+AO+AVANCADO+ON+LINE+BD03+GRATISEsquema 1 - Modelo relacional: conceitos básicos.
Modelo
Relacional
Conceitos
Conjuntos de relações ou tabelas que
representam dados e relacionamentos.
Relação matemática é o bloco de montagem.
Base teórica na teoria de conjunto e lógica
de predicado de primeira ordem.
Princípio da
Informação
Todo o conteúdo de informação é representado
como valores explícitos em posições de
colunas em linhas de tabelas.
Aspectos de descrição
Aspecto estrutural: dados percebidos pelos
usuários como tabelas.
Aspecto de integridade: tabelas satisfazem a
restrições de integridade.
Aspecto manipulador: os operadores
disponíveis para que o usuário possa
manipular essas tabelas derivam tabelas a
partir de outras.
_________________________________________
10
1- (CESPE - 2018 - Polícia Federal - Perito Criminal Federal) Acerca de banco de
dados, julgue o seguinte item.
Situação hipotética: Ao analisar um computador, Marcos encontrou inúmeros emails,
vídeos e textos advindos, em sua maioria, de comentários em redes sociais. Descobriu
também que havia relação entre vários vídeos e textos encontrados em um diretório
específico. Assertiva: Nessa situação, tendo como referência somente essas informações,
Marcos poderá inferir que se trata de um grande banco de dados relacional, visto que um
diretório é equivalente a uma tabela e cada arquivo de texto é equivalente a uma tupla; além
disso, como cada arquivo possui um código único, poderá deduzir que esse código é a chave
primária que identifica o arquivo de forma unívoca.
Resolução:
Caros, um banco de dados relacional não é formado por documentos, mas sim por um
conjunto de tabelas. O Princípio da Informação aborda justamente isso, afirmando que
todos os dados devem ser organizados em tabelas (ainda que armazenados em estruturas
diferentes) e, portanto, todo o conteúdo de informação do banco de dados é representado
de um e somente um modo, ou seja, como valores explícitos em posições de colunas em
linhas de tabelas. Assim, como esse banco não é percebido pelo usuário como um conjunto
de tabelas, mas sim como um conjunto de documentos e outras mídias, não se trata de um
banco relacional.
Gabarito: Errado.
2- (CESPE - 2015 - TCU - Auditor Federal de Controle Externo - Conhecimentos
Gerais) Acerca de bancos de dados relacionais, julgue os itens subsequentes.
Os bancos de dados relacionais são constituídos de três componentes: uma coleção de
estrutura de dados (relações ou tabelas), uma coleção de operadores (linguagem SQL) e uma
coleção de restrições de integridade (conjunto consistente de estados de base de dados e de
alterações de estados).
Resolução:
A arquitetura ANSI/SPARC em três níveis considera que os Bancos de dados relacionais
consistem de três componentes:
❖ Uma coleção de estruturas de dados, formalmente chamadas de relações, ou
informalmente tabelas, compondo o nível conceitual;
❖ Uma coleção dos operadores, a álgebra e o cálculo relacionais, que constituem a
base da linguagem SQL;
❖ Uma coleção de restrições da integridade, definindo o conjunto consistente de
estados de base de dados e de alterações de estados.
Gabarito: Certo.
_________________________________________
11
1.2 Doze (Treze) Regras de Codd
As Doze Regras de Codd são um conjunto de treze regras (é isso mesmo! Elas são
enumeradas de zero a doze) propostas por Edgar F. Codd e usadas para definir o que é
necessário para que um sistema de gerenciamento de banco de dados seja
considerado relacional.
DICA DO PROFESSOR!!!
As questões sobre esse tema são bem literais. Logo, sugiro que não se preocupe em entender
essas regras profundamente. Basta ter uma noção de que elas existem e de como funcionam.
Algumas questões as cobram de maneira indireta, sem citar que são as regras de Codd, mas
que você consegue resolver facilmente se tiver noção dessas regras.
Vejamos essas regras:
▪ Regra 0 - Regra fundamental ou regra base: um SGBD relacional deve gerenciar
seus dados usando exclusivamente capacidades relacionais, isto é, não devem ter
extensões para tratar conceitos e estruturas de outros modelos de dados.
▪ Regra 1 - A regra da informação ou Princípio da Informação: todas as informações
no banco de dados necessitam estar representadas de apenas uma forma, nomeados por
valores em posições de colunas dentro de registros de tabelas.
▪ Regra 2 - A regra de acesso garantido: deve-se garantir que todos os valores de
uma tabela possam ser acessados por meio de uma combinação de nome de tabela,
valor de chave primária e nome de coluna.
▪ Regra 3 - Tratamento sistemático de valores nulos: o SGBD deve permitir que
cada campo possa permanecer nulo (ou vazio). Especificamente, ele deve suportar
uma representação de "falta de informação e informações inaplicáveis" que é sistemática,
diferente de todos os valores regulares (por exemplo, "diferente de zero ou qualquer
outro número", no caso de valores numéricos), e independente de tipo de dados. É
também implícito que tais representações devem ser manipuladas pelo SGBD de
maneira sistemática.
▪ Regra 4 - Catálogo on-line baseado no modelo relacional: os metadados devem
ser armazenados e gerenciados como dados comuns, ou seja, em tabelas no interior
do Banco de Dados. Esses dados devem estar disponíveis aos usuários autorizados,
utilizando a linguagem de consulta padrão do Banco de Dados.
_________________________________________
12
▪ Regra 5 - Sublinguagem Ampla de Dados: deve suportar uma linguagem
declarativa bem definida com suporte para definição de dados, definição de visões,
manipulação de dados (interativa ou por programa), restrições de integridade,
autorização e gerenciamento de transações (iniciar, enviar e desfazer).
▪ Regra 6 - Atualização de visões: todas as visões que são teoricamente atualizáveis
devem ser atualizáveis pelo sistema.
▪ Regra 7 - Inserção, Atualização, e Exclusão de alto nível: o sistema necessita
fornecer suporte à configuração do nível de operações para inserir, atualizar e excluir.
Isto significa que os dados podem ser recuperados a partir de um banco de dados
relacional em conjuntos de dados construídos a partir de várias linhas e/ou várias
tabelas. Esta regra afirma que as operações de inserção, atualização, e exclusão devem
ser apoiadas para qualquer conjunto recuperável e não apenas para uma única linha em
uma única tabela.
▪ Regra 8 - Independência Física de dados: aplicativos e recursos ad hoc não são
afetados logicamente quando os métodos de acesso ou as estruturas de
armazenamento físico são alterados.
▪ Regra 9 - Independência Lógica de Dados: aplicativos e recursos ad hoc não são
afetados logicamente quando de alterações de estruturas de tabela que preservem
os valores originais da tabela (alteração da ordem ou inserção de colunas). Alterações
nas relações e nas Visualizações causam pouco ou nenhum impacto nas aplicações.
▪ Regra 10 - Independência de Integridade: todas as restrições de integridade
necessitam ser especificadas separadamente dos programas de aplicação e
armazenadas no catálogo. É necessário que seja possível mudar estas restrições sem que
necessariamente tenha-se de modificar as aplicações.
▪ Regra 11 - Independência de Distribuição: a distribuição de partes do SGBD em
várias localidades deve ser transparente para os usuários do mesmo, isto é, os usuários
não devem ser afetados pela localização dos dados.
▪ Regra 12 - A não-transposição das regras: se o SGBD dá suporte a acesso de baixo
nível aos dados, não deve haver um modo de negligenciar as regras de integridade
do mesmo.
_________________________________________
13
Em resumo, as regras são:
Esquema 2 – Doze (treze) regras de Codd para os bancos de dados relacionais.
3- (CESPE / CEBRASPE – 2024 - MPO - Analista de Planejamento e
Orçamento) No quese refere à representação de dados numéricos e aos conceitos de bancos
de dados relacionais, julgue o item seguinte.
Uma das regras de Codd para bancos de dados relacionais é a independência física de dados,
em que aplicativos e recursos ad hoc não são afetados logicamente quando os métodos de
acesso ou as estruturas de armazenamento físico são alterados.
Resolução:
Questão literal sobre a Regra 8 - Independência Física de dados, que afirma que
aplicativos e recursos ad hoc não são afetados logicamente quando os métodos de
acesso ou as estruturas de armazenamento físico são alterados.
Imagine um sistema de banco de dados de uma biblioteca digital que armazena informações
sobre livros, autores e usuários. Suponha que você decide reorganizar os arquivos físicos
que armazenam os dados dos livros, mudando para um sistema de armazenamento em
nuvem. Logo, a forma como os dados são armazenados (esquema interno) foi modificada.
Contudo, a estrutura do banco de dados (tabelas, relacionamentos) permanecerá a mesma e
os programas de aplicação irão continuar funcionando sem necessidade de alteração. Essa
situação ilustra a independência física de dados,
Gabarito: Certo.
D
o
ze
(
tr
ez
e)
r
eg
ra
s
d
e
C
o
d
d
p
ar
a
B
an
co
s
R
el
ac
io
n
ai
s Regra 0 - Regra fundamental ou regra base
Regra 1 - A regra da informação ou Princípio da Informação
Regra 2 - A regra de acesso garantido
Regra 3 - Tratamento sistemático de valores nulos
Regra 4 - Catálogo on-line baseado no modelo relacional
Regra 5 - Sublinguagem Ampla de Dados
Regra 6 - Atualização de visões
Regra 7 - Inserção, Atualização, e Exclusão de alto nível
Regra 8 - Independência Física de dados
Regra 9 - Independência Lógica de Dados
Regra 10 - Independência de Integridade
Regra 11 - Independência de Distribuição
Regra 12 - A não-transposição das regras
_________________________________________
14
4- (FCC - 2019 - TRF - 4ª REGIÃO - Analista Judiciário - Infraestrutura em
Tecnologia da Informação) Dentre as regras de Codd que caracterizam Bancos de Dados
Relacionais, a regra da Independência de Integridade estipula que as várias formas de
integridade relacional de banco de dados
a) precisam ser definidas na linguagem relacional e armazenadas dentro do catálogo do
sistema ou dicionário de dados, e ser totalmente independentes da lógica dos aplicativos.
b) podem ser representadas em tabelas relacionais específicas que se relacionam com as
tabelas de cada aplicativo. Quando um aplicativo mudar, a regra de independência muda
automaticamente.
c) precisam ser definidas na linguagem de cada aplicativo e armazenadas como tabelas
relacionais dentro do banco de cada aplicativo, pois somente desta forma, ao mudar o
aplicativo, as regras de integridade mudarão também, automaticamente.
d) podem ser definidas em linguagem natural ou em Shell script e armazenadas no
dicionário de dados ou dentro do catálogo do sistema; contudo, não há como garantir que
elas sejam totalmente independentes da lógica dos aplicativos na totalidade das situações.
e) devem ser escritas em linguagem hierárquica ou de rede pois, desta forma, tanto a
hierarquia das tabelas quanto os links entre elas, como ocorre nos bancos em rede,
conduzirão às mudanças automáticas das integridades ao se mudar algum aplicativo.
Resolução:
A Regra 10 - Independência de Integridade afirma que todas as restrições de
integridade necessitam ser especificadas separadamente dos programas de aplicação
e armazenadas no catálogo. É necessário que seja possível mudar estas restrições sem que
necessariamente tenha-se de modificar as aplicações.
Assim,
a) Correto: perfeitamente. As formas de integridade devem ser independentes da lógica da
aplicação.
b) Incorreto: as regras não devem mudar com a alteração dos aplicativos.
c) Incorreto: as regras não devem mudar com a alteração dos aplicativos.
d) Incorreto: as restrições devem ser escritas em linguagem relacional e devem apresentar
independência lógica com os aplicativos.
e) Incorreto: as restrições devem ser escritas em linguagem relacional e devem apresentar
independência lógica com os aplicativos.
Gabarito: Letra A.
_________________________________________
15
5- (CESPE - 2019 – SEFAZ-RS – Auditor Fiscal da Receita Estadual) Uma das
regras de Cood para o modelo relacional consiste
a) na dependência de dados físicos (mudança na memória e no método de acesso).
b) na independência de distribuição.
c) na presença de uma linguagem de programação no SGBD que promova interface com o
banco de dados, com a segurança e a atualização de dados.
d) na subversão das regras de integridade ou restrições quando utilizada uma linguagem de
baixo nível.
e) no não tratamento das atualizações de visões de dados.
Resolução:
As Regras de Codd para o modelo relacional são:
Dito isto, vejamos os itens:
a) Incorreto: na independência de dados físicos (mudança na memória e no método de
acesso).
b) Correto: na independência de distribuição.
c) Incorreto: na presença de uma linguagem de programação ampla de dados no SGBD
que promova interface com o banco de dados, com a segurança e a atualização de dados.
A regra 5 de Codd prevê a existência de uma linguagem ampla de dados. Contudo, não é
uma linguagem de programação, mas sim uma linguagem declarativa para operações em
bancos de dados. Uma linguagem de programação possui foco diferente, sendo utilizada
para construção de softwares e sistemas.
d) Incorreto: na não subversão das regras de integridade ou restrições quando utilizada
uma linguagem de baixo nível.
e) Incorreto: no não tratamento das atualizações de visões de dados.
Gabarito: Letra B.
D
o
ze
(
tr
ez
e)
r
eg
ra
s
d
e
C
o
d
d
p
ar
a
B
an
co
s
R
el
ac
io
n
ai
s Regra 0 - Regra fundamental ou regra base
Regra 1 - A regra da informação ou Princípio da Informação
Regra 2 - A regra de acesso garantido
Regra 3 - Tratamento sistemático de valores nulos
Regra 4 - Catálogo on-line baseado no modelo relacional
Regra 5 - Sublinguagem Ampla de Dados
Regra 6 - Atualização de visões
Regra 7 - Inserção, Atualização, e Exclusão de alto nível
Regra 8 - Independência Física de dados
Regra 9 - Independência Lógica de Dados
Regra 10 - Independência de Integridade
Regra 11 - Independência de Distribuição
Regra 12 - A não-transposição das regras
_________________________________________
16
1.3 Tabelas (relações)
As tabelas (relações) são a estrutura chave do modelo relacional. Elas representam os
dados e os relacionamentos entre esses dados. Cada tabela possui um nome único.
Em uma tabela, cada linha (tupla ou registro) representa uma coleção de valores de
dados relacionados. Uma linha representa um fato que normalmente corresponde a uma
entidade ou relacionamento do mundo real.
Uma tabela é organizada em colunas (atributos ou campos), que servem para ajudar a
interpretar o significado dos valores em cada linha. O número de colunas de uma
relação representa o grau (ou aridade) da relação.
O tipo de dado que descreve os tipos de valores que podem aparecer em cada coluna é
representada por um domínio de valores possíveis. É importante destacar que um domínio
é um conjunto de valores atômicos, ou seja, é indivisível. Temos aqui a chamada restrição
de integridade de domínio, que garante que os valores respeitem o domínio especificado.
Uma tabela pode ser representada de forma tabular (como em planilhas), em um diagrama
(ex. diagrama entidade-relacionamento), ou por meio de um esquema de relação, composto
pelo nome da relação e pela lista de atributos da seguinte forma R(A1, A2,..., An).
Representação Tabular Diagrama Esquema
Moto (placa, cor, modelo)
EXEMPLIFICANDO!!!
A tabela “Clientes” representa os dados referentes aos clientes de uma loja fictícia. “Clientes”
é um nome único para esta tabela.Código do cliente Nome do cliente CPF Endereço
134512 João Aprovado 123.123.123-12 Rua A, nº 123
251218 Maria Concursada 456.456.456-45 Rua B, nº 456
Esta tabela está estruturada em quatro colunas (código do cliente, nome do cliente, cpf e
endereço). Estas colunas (ou atributos) ajudam a entender os significados dos valores das
tabelas, assim, podemos perceber que os clientes são identificados por um código, pelo seu
nome, cpf e tem seu endereço cadastrado. Com base no número de colunas, podemos
perceber que o grau (ou aridade) desta tabela é quatro.
As linhas (ou tuplas) da tabela demonstram coleções de dados relacionados, por exemplo,
todos os dados da primeira linha são relacionados ao cliente João Aprovado dos Santos.
Podemos citar, por exemplo, que o domínio para o cpf é um conjunto de números com onze
dígitos e para o nome dos clientes é um conjunto de caracteres.
O esquema dessa relação é Clientes (Código do Cliente, Nome do Cliente, CPF e Endereço).
_________________________________________
17
O esquema a seguir resume a estrutura de uma tabela:
Esquema 3 – Tabela (relação).
Agora que já vimos os componentes básicos de uma tabela, vamos estudar algumas
características importantes sobre as relações.
▪ Ordenação de tuplas em uma relação: uma relação é definida como um conjunto
de tuplas. Matematicamente, os elementos de um conjunto não possuem nenhuma
ordem em particular, isto é, uma relação não é sensível à ordenação de tuplas.
▪ Ordem dos valores dentro de uma tupla: uma tupla é uma lista ordenada de
valores, de modo que a ordem dos valores em uma tupla – e, portanto, dos atributos
em um esquema de relação – é importante. (Há uma divergência, pois C.J. Date
considera que a tupla é um conjunto, também não importando os valores).
Em resumo,
o A ordem das linhas não é relevante.
o A ordem das colunas é relevante, a não ser que a correspondência entre
elas e seus valores seja mantida.
▪ Valores e NULLs nas tuplas: cada valor em uma tupla é um valor atômico, isto é,
não é divisível em componentes dentro da estrutura do modelo relacional. Um
conceito importante é o dos valores NULL (nulo), usados para representar os
valores de atributos que podem ser desconhecidos ou não se aplicam a uma tupla.
▪ Interpretação (significado) de uma relação: o esquema da relação pode ser
interpretado como uma declaração ou um tipo de afirmação (ou asserção) e cada
tupla pode ser interpretada como um fato ou instância particular da afirmação.
Tabela (relação) – representa dados e relacionamentos.
Coluna (atributo ou campo) - ajuda a
interpretar o significado dos valores
das linhas.
Linha (tupla ou registro) -
coleção de valores de dados
relacionados.
Grau (aridade) - número
de colunas de uma relação.
Domínio - tipo de dado que
descreve os tipos de valores que
podem aparecer em cada coluna.
_________________________________________
18
ATENÇÃO!!!
Sobre a questão da ordenação das colunas, temos uma polêmica. Quanto a ordenação das
linhas, está tudo tranquilo, pois não há preocupação com a ordem. Contudo, quando estamos
tratando das colunas, temos duas possibilidades:
▪ Para a maioria dos autores, uma tupla é uma lista ordenada de valores, logo a
ordem dos valores é importante.
▪ C.J. Date, contudo, diverge desse raciocínio ao definir uma tupla como um conjunto
de valores. Sendo assim, a ordem dos valores também não é importante.
E agora professor, o que faço? Primeiro vamos entender a visão geral da importância da
ordenação das colunas. Um modo mais claro de verificar a importância da ordem das
colunas é quando estamos usando a linguagem SQL para realizar inserções de dados na
tabela. Podemos usar a seguinte sintaxe:
INSERT INTO tabela VALUES (valor1, valor2, valor3, ...)
Este comando irá inserir os valores segundo a ordem das colunas na tabela. Caso não haja
correspondência entre os valores passados e os tipos dos campos, haverá falhas na inserção.
Por isso a ordem das colunas é importante. Logicamente, existem comandos mais
específicos para definir quais as colunas selecionar, mas esse exemplo mostra que a ordem
das colunas tem impacto nas operações realizadas no banco.
Logo, percebemos que a ordem é importante, pois precisamos segui-la ou declará-la. Esse
seria o raciocínio para levar para a prova. Contudo, se a questão cobrar a visão do Date e
não tiver outra opção mais correta ou menos errada, então marque a que afirma que a ordem
das colunas não importa.
Vejamos umas questões como exemplo:
(CESPE - 2014 - TJ-SE - Analista Judiciário - Banco de Dados) No modelo relacional,
sob o ponto de vista do usuário, a ordem em que as linhas estão armazenadas nas tabelas é
insignificante.
Gabarito: Certo. (Quanto às linhas não há dúvida, a ordem não importa).
(CESPE - 2017 - TCE-PE - Auditor de Controle Externo - Auditoria de Contas
Públicas) Em uma relação, os nomes das colunas são únicos, as linhas são distintas entre
si, e a ordem da disposição das linhas e colunas é irrelevante para o banco de dados.
Gabarito: Errado. (Visão da maioria dos autores sobre a ordenação das colunas ser
relevante)
(CESPE – 2018 – TCM-BA - - Auditor Estadual de Controle Externo)
c) Os componentes de uma tupla são ordenados da esquerda para a direita.
Gabarito: Errado. (Visão de Date, dando como errada a importância da ordenação)
_________________________________________
19
6- (CESPE / CEBRASPE – MPE-TO - 2024 - Analista Ministerial) A respeito de
modelagem relacional, modelagem dimensional e normalização das estruturas de dados,
julgue o item que se segue.
No modelo relacional de dados, o termo relação é usado para fazer referência a uma tabela,
enquanto o termo tupla é utilizado para se referir a uma linha da tabela.
Resolução:
Perfeitamente. O termo formal para tabela é relação e o termo formal para linha é tupla.
Gabarito: Certo.
7- (CESPE / CEBRASPE - 2023 – MPE-RO - Analista) Na modelagem de dados, o
objeto que representa uma entidade do mundo real e contém atributos para descrever suas
características é
a) a função.
b) a chave estrangeira.
c) o procedimento.
d) a visão.
e) a tabela.
Resolução:
A estrutura base do modelo relacional é a tabela. É na estrutura de tabela que são
armazenados dados que representam as entidades, as suas características e os
relacionamentos entre essas entidades. Embora a questão não faça referência explícita ao
modelo relacional. A única estrutura dentre os itens com a finalidade solicitada é a tabela.
Gabarito: Letra E.
Tabela (relação) – representa dados e relacionamentos.
Coluna (atributo ou campo) - ajuda a
interpretar o significado dos valores
das linhas.
Linha (tupla ou registro) -
coleção de valores de dados
relacionados.
Grau (aridade) - número
de colunas de uma relação.
Domínio - tipo de dado que
descreve os tipos de valores que
podem aparecer em cada coluna.
_________________________________________
20
8- (VUNESP - 2024 – Prefeitura de Santo André - Analista de Tecnologia da
Informação) Considerando o modelo relacional de bancos de dados relacionais, é possível
que não se conheça ou que não exista o valor de um determinado atributo de um registro
de uma relação. Nesse caso, recomenda-se que seja atribuído um valor especial a esse
atributo, denominado valor
a) nulo.
b) temporário.
c) de junção.
d) parcial.
e) de seleção.
Resolução:
Um valor NULL (nulo) é usado para representar um valor de atributos que pode ser
desconhecidos ou não se aplica a uma tupla. Por exemplo, em uma tabela Funcionarios,
se um funcionário ainda estiver empregado, o campo DataDemissao terá o valor NULL ou
se o telefone de um funcionário não for conhecido, o campo Telefone pode ser NULL.
Gabarito: Letra A.
9- (VUNESP - 2023 – DPE-SP - Agente de Defensoria Pública) Um dos conceitos
importantesna modelagem de um banco de dados relacional consiste na especificação do
domínio de um atributo de um conjunto de entidades, que significa especificar o
a) tempo máximo a ser utilizado no armazenamento de cada valor do atributo.
b) conjunto de valores válidos e aceitos para esse atributo.
c) número máximo de entidades permitido em cada caso.
d) número máximo de vezes que os valores dos atributos podem ser alterados.
e) tipo de mídia que deve ser utilizado para o armazenamento de cada atributo.
Resolução:
O domínio de um atributo representa os tipos de valores que são aceitos em um atributo.
Por exemplo, o domínio para um atributo CPF pode ser um conjunto de números com onze
dígitos e para um atributo NOME pode ser um conjunto de caracteres.
Gabarito: Letra B.
_________________________________________
21
10- (CESPE / CEBRASPE - 2021 - Polícia Federal - Escrivão de Polícia Federal)
No que diz respeito a modelagem conceitual, julgue o item que se segue.
Se uma tabela de banco de dados tiver 205 atributos, então isso significa que ela tem 205
registros.
Resolução:
O número de atributos (colunas) não possui relação com o número de registros (linhas).
Cada linha (tupla ou registro) representa uma coleção de valores de dados
relacionados, enquanto as colunas (atributos ou campos) servem para ajudar a
interpretar o significado dos valores em cada linha.
Gabarito: Errado.
11- (CESPE - 2018 - TCM-BA - Auditor Estadual de Controle Externo)
Considerando os conceitos de banco de dados relacionais, assinale a opção correta a respeito
das propriedades de uma tupla.
a) A tupla tem o mesmo significado e as mesmas propriedades de uma tabela.
b) Os componentes de uma tupla são ordenados da esquerda para a direita.
c) Cada tupla contém exatamente um valor para cada um de seus atributos.
d) Um subconjunto de uma tupla não é considerado uma tupla.
e) Uma tupla nunca é vazia, seu grau pode variar de 1 até n.
Resolução:
Vamos analisar cada um dos itens:
a) Incorreto: uma tabela é um conjunto de tuplas e atributos. As tuplas são as linhas das
tabelas. Logo, são conceitos diferentes.
b) Incorreto: pessoal, este item é polêmico, pois uma tupla é uma lista ordenada de valores
e, assim, este item deveria ser correto. Porém, Date contrapõe essa definição, afirmando que
uma tupla também é um conjunto de valores e, portanto, a ordem dos componentes não
importa.
c) Correto: Cada tupla contém exatamente um valor para cada um de seus atributos. Esse
valor deve ser do tipo apropriado.
d) Incorreto: Um subconjunto de uma tupla não é considerado uma tupla.
e) Incorreto: Uma tupla nunca é pode ser vazia, seu grau pode variar de 1 0 até n.
Gabarito: Letra C.
_________________________________________
22
1.4 Visões (views)
A tabela é a estrutura fundamental do modelo relacional, mas pode conter uma grande
quantidade de dados que nem sempre são necessários ou que não podem ser visualizadas
por um conjunto de usuários. Para fornecer apenas os dados necessários e/ou relevantes a
determinados usuários, utilizam-se as views (ou visões).
Uma visão (ou view) é uma tabela virtual derivada de outras tabelas, que podem ser
tabelas base ou outras visões previamente definidas. Uma visão fornece uma maneira
alternativa de visualização dos dados de uma ou mais tabelas. Tecnicamente, uma visão
é uma consulta predefinida ou armazenada que é executada sempre que referenciada,
permitindo que não seja necessário reescrever a consulta constantemente.
Uma visão não necessariamente existe em forma física; por isso é considerada uma
tabela virtual, ao contrário das tabelas da base, cujas tuplas sempre estão armazenadas
fisicamente no banco de dados. Isso limita as possíveis operações de atualização que podem
ser aplicadas às visões, mas não oferece quaisquer limitações sobre a consulta de uma visão.
Por isso, em regra, as visões são não atualizáveis.
No entanto, em alguns sistemas de bancos de dados existem as visões materializadas (ou
armazenadas) que armazenam o resultado da consulta em uma tabela auxiliar, isto é,
fazem uma cópia dos dados e os armazenam fisicamente. Os sistemas de bancos de dados
garantem que a atualização dessas visões quando ocorrer alterações em suas tabelas base.
Em regra, essas visões são atualizáveis.
Podemos destacar as seguintes vantagens de se utilizar visões:
▪ Economizar tempo com retrabalho.
▪ Velocidade de acesso às informações.
▪ Mascarar a complexidade do banco de dados.
▪ Simplificar o gerenciamento de permissões de usuários.
▪ Organizar dados a serem exportados para outros aplicativos.
É importante destacar que todas as operações que podem ser realizadas em tabelas, também
podem ser realizadas em visões.
Vamos fixar os conceitos de visão e visão materializada com um esquema!
Esquema 4 – Visão (view) e visão materializada (materialized view).
Visão
Tabela virtual
Armazena apenas a consulta
(não copia os dados)
Em regra, não atualizáveis
Visão materializada
Tabela física auxiliar
Armazena o resultado da
consulta (cópia dos dados)
Em regra, atualizáveis
_________________________________________
23
ESCLARECENDO!!!
Como uma View pode aumentar a velocidade de acesso às informações, visto que será
sempre executada a consulta?
Muito cuidado, pois uma View aumenta a velocidade do ACESSO as informações do ponto
de vista do usuário, pois ao invés de ter que definir uma consulta, basta acessá-la. Portanto,
não irá requerer tempo e esforço para montar a consulta, otimizando o tempo necessário
para visualizar os dados.
EXEMPLIFICANDO!!!
Tomemos como exemplo a relação Servidor a seguir:
matricula nome salario
134512 João Aprovado dos Santos 13.002,03
251218 Maria Concursada Fernandes 5.519,61
124578 Paulo Passou Batista 13.002,03
131820 Glória Nomeada Rodrigues 5.519,61
112035 Eduardo Posse Pordeus 13.002,03
Perceba que essa tabela informa o salário dos servidores. Suponha que o pessoal do setor
de comunicação desse órgão utilize informações básicas sobre os servidores. Se, por algum
motivo, não for interessante que o pessoal desse setor possua acesso ao salário, pode então
ser criada uma visão somente com as informações do interesse desse grupo de usuários.
Dessa forma, pode ser criada uma visão (view) que apresenta somente a matrícula e nome
dos funcionários. A partir daí, o acesso a esta visão pode ser fornecido ao pessoal da
comunicação e a o acesso direto a tabela Servidor pode ser retirado.
O fato é que agora o pessoal da comunicação pode ter acesso à visão ao invés da tabela,
visualizando apenas as informações que precisam. Ao selecionar a visão, será apresentado:
matricula nome
134512 João Aprovado dos Santos
251218 Maria Concursada Fernandes
124578 Paulo Passou Batista
131820 Glória Nomeada Rodrigues
112035 Eduardo Posse Pordeus
Se for usada uma visão comum, então sempre que o pessoal da comunicação acessar a visão,
será executada a consulta na tabela original e o resultado será apresentado.
Se for usada uma visão materializada, então o resultado será armazenado em uma tabela
auxiliar, ou seja, será criada uma tabela com uma cópia dos dados e quando o pessoal da
comunicação for acessar, então a consulta será nos dados da tabela auxiliar.
_________________________________________
24
12- (CESPE / CEBRASPE - 2024 - ANAC - Especialista em Regulação de Aviação
Civil) Acerca de bancos de dados relacionais, julgue o item que se segue.
Em um banco de dados relacional, a estratégia de implementação de uma view denominada
materialização da view implica criar fisicamente uma tabela temporária a partir da primeira
consulta a essa view e mantê-la ativa por um determinado período, considerando que
poderão seguir-se outras consultas.
Resolução:
A visão materializada serve justamente para o propósito descrito na assertiva,pois ela
armazena a tabela decorrente da consulta.
Ao criar uma view materializada, o SGBD executa a consulta definida e armazena o
resultado em uma nova tabela. Essa nova tabela poderá então utilizada para responder a
consultas posteriores.
Gabarito: Certo.
13- (CESPE / CEBRASPE - 2024 – CTI - Tecnologista Júnior) Considerando as
linguagens e os fundamentos de bancos de dados relacionais, julgue o item subsequente.
Uma VIEW é uma representação virtual de dados que se comporta como uma tabela,
formada a partir de uma consulta em tabelas relacionadas.
Resolução:
Uma visão (ou view) é uma tabela virtual derivada de outras tabelas, que podem ser
tabelas base ou outras visões previamente definidas. Uma visão é uma consulta
predefinida ou armazenada que é executada sempre que referenciada, permitindo que não
seja necessário reescrever a consulta constantemente.
Gabarito: Certo.
14- (CESPE / CEBRASPE - 2023 – FUB - Analista de Tecnologia da Informação)
Acerca de bancos de dados relacionais, julgue o item seguinte.
Uma visão representa um conjunto de informações de uma ou mais tabelas, em uma
representação específica, ocupando espaço físico no banco de dados.
Resolução:
Uma visão não necessariamente ocupa espaço físico no banco, por isso é considerada
uma tabela virtual. Uma visão é uma consulta predefinida ou armazenada que é
executada sempre que referenciada, permitindo que não seja necessário reescrever a
consulta constantemente.
Até existem as visões materializadas que criam cópias dos resultados das consultas em
tabelas auxiliares e, nesse caso, ocupam espaço de armazenamento. Contudo, a questão não
fez referência a esse tipo de visão, logo está errada.
Gabarito: Errado.
_________________________________________
25
15- (FCC - 2018 - DPE-AM - Analista em Gestão Especializado de Defensoria -
Analista de Banco de Dados) Visões constituem um tipo de estrutura possível de ser
criada em um banco de dados relacional e apresentam como característica:
a) Permitir a consulta apenas a tabelas que possuam somente atributos do tipo numérico
armazenados.
b) Possuir o armazenamento somente do comando de criação de sua estrutura, sendo os
dados consultados a partir de tabelas com dados fisicamente armazenados.
c) Não comportar a visualização de atributos do tipo booleano.
d) Exibir apenas as chaves primária e estrangeira das tabelas especificadas em sua estrutura.
e) Ser consultadas um número restrito de vezes, conforme seja o sistema gerenciador de
banco de dados utilizado.
Resolução:
Uma visão (ou view) é uma única tabela que é derivada de outras tabelas, que podem
ser tabelas de base ou mesmo outras visões previamente definidas. Podemos ainda entender
uma visão como uma maneira alternativa de visualização dos dados de uma ou mais
tabelas.
Vamos analisar cada uma das alternativas:
a) Incorreto: não há restrição ao tipo de dados que pode ser consultado.
b) Correto: Possuir o armazenamento somente do comando de criação de sua estrutura,
sendo os dados consultados a partir de tabelas com dados fisicamente armazenados.
c) Incorreto: não há restrição ao tipo de dados que pode ser consultado.
d) Incorreto: a visão exibe as informações que foram selecionadas na sua criação e não
apenas as chaves primária e estrangeira.
e) Incorreto: não há restrição ao número de consultas para uma visão.
Gabarito: Letra B.
_________________________________________
26
1.5 Índice (index)
Vamos supor que seja necessário realizar uma consulta em uma tabela de vendas de uma
grande multinacional com mais de um milhão de tuplas. Uma consulta que precise percorrer
linha por linha procurando um registro pode não ser a forma mais eficiente e, para isso,
foram criados os índices.
De maneira geral, um índice funciona com base no mesmo princípio aplicado aos índices de
livros ou desta aula. Se você está interessado em ler somente um determinado tópico, você
verifica no índice a localização específica deste tópico e vai até elas para ler o conteúdo que
deseja. Do mesmo modo, através de um índice adequado, o sistema de banco de dados pode
percorrer primeiro o índice para descobrir onde obter os dados e, em seguida, acessar
diretamente aos locais para obter os dados necessários.
Os índices são estruturas de acesso auxiliares associados a tabelas, que são utilizados
para agilizar a recuperação de registros em resposta a certas condições de pesquisa.
As estruturas de índice são arquivos adicionais no disco que oferecem caminhos de
acesso secundários, os quais oferecem formas alternativas de acessar os registros sem
afetar o posicionamento físico no arquivo de dados primário no disco.
Os índices permitem o acesso eficiente aos registros com base nos campos de indexação
que são usados para construir o índice. Basicamente, qualquer atributo de uma tabela pode
servir para criar um índice, e múltiplos índices em diferentes atributos podem ser
construídos na mesma tabela.
Um índice permite que o conjunto das linhas de uma tabela que satisfazem determinado
critério seja localizado rapidamente, através de ponteiros associados.
Apesar da importância dos índices para auxiliar na consulta, este não devem ser criados
de maneira ilimitada e sem nenhum cuidado, pois eles apresentam algumas
desvantagens:
▪ Piora a performance em escritas de dados no banco de dados: toda vez que uma
informação chave for modificada (inserida, alterada, deletada) obrigará a escrita no
índice. E o índice pode ser interpretado como uma tabela adicional escondida no
banco de dados. E se a informação modificada está presente em várias chaves (vários
índices), todos eles deverão ser alterados (em inclusão e remoção, todos sempre são
afetados, ainda que seja possível otimizar para a remoção, sob pena de encarecer o
custo de leitura). A alteração do índice implica em acesso de leitura e escrita nele,
apesar de ser uma operação eficiente se comparada com o acesso direto à tabela, não
deixa de ter um custo adicional.
▪ Aumenta o consumo de espaço para armazenamento do banco de dados
(memória e disco): é claro que esta tabela adicional de chaves de índice vai ocupar
um espaço extra também. Costuma ser um espaço menor que a tabela de dados
original, mas existe um custo extra. Se houver muitos índices é possível que o espaço
seja até maior que a tabela original. Com muito índice fica difícil colocar tudo na
memória.
_________________________________________
27
▪ Aumenta a necessidade de manutenção interna no banco de dados: isto é um
pouco dependente da implementação, mas é comum que páginas de chaves sejam
abandonadas conforme elas vão sendo alteradas. Além disto o administrador de
banco de dados pode ter mais elementos com que se preocupar.
▪ Pode diminuir a performance de consultas: não há garantias que todas as
consultas serão mais rápidas com o uso de índices. Como há uma operação adicional
para acesso ao índice antes do acesso aos dados principais, é possível que a soma do
tempo gasto nas operações seja maior que o acesso só ao dado principal mesmo que
o acesso no principal sem índice seja teoricamente menos eficiente. Isto é mais
comum quando o volume de dados é pequeno, mas isto também é verdade em casos
de consultas complexas ou onde uma grande porção dos dados da tabela serão
retornados em qualquer ordem.
APROFUNDANDO!!!
Vamos entender como funciona uma consulta em uma tabela sem e com o uso de índice:
Quando temos uma tabela e executamos uma consulta sobre ela (operação SELECT em
SQL), o SGBD chama a ação “TABLE SCAN”. Essa ação consiste em percorrer toda a
tabela, avaliando cada registro. Caso o registro atenda às condições definidas no filtro, ele
é incluído no conjunto de retorno, senão, é apenas desconsiderado.
A figura a seguir ilustra uma pesquisa desse tipo, filtrando pelo campo “Código”, ondeseu
valor seja “3”.
Imagina realizar essa busca em uma tabela com milhares ou milhões de linhas, será muito
dispendioso!
Para melhorar essas consultas, utilizamos ÍNDICES, objetos do banco de dados que
facilitam a organização e consulta de uma tabela, “indexando-a” por uma de suas colunas.
Quando criamos um índice em uma coluna, o gerenciador do banco ordena a tabela por essa
coluna e a partir de então os filtros (sobre essa coluna) são feitos através de uma busca
binária.
Na busca binária, a tabela sofre divisões sucessivas até que o registro desejado seja
localizado. Inicialmente a tabela é “dividida” na metade, onde os registros com os menores
valores no campo indexado ficam na parte superior, e os registros com os maiores valores
ficam na parte inferior. O gerenciador verifica então em que parte está contido o valor
pesquisado, se na primeira metade ou na segunda. Isso é facilmente feito comparando o
valor pesquisado com o do registro intermediário. Se o valor pesquisado for maior que o do
registro intermediário, o registro desejado encontra-se na segunda metade, caso contrário,
encontra-se na primeira metade.
CONTINUA...
_________________________________________
28
CONTINUAÇÃO...
Na figura a seguir temos uma ilustração desse processo:
Por exemplo, se pesquisássemos pelo registro de Código = 3, seria avaliado se esse valor é
maior ou menor que 5. Como o valor é menor, indica que o registro procurado se encontra
na primeira metade.
Em seguida, o processo é repetido apenas na metade em que se encontra o registro
pesquisado, dividindo-a na metade e avaliando novamente em que parte se encontra o que
se deseja.
Note que na operação sem o índice, todos os registros seriam lidos e com a utilização de
índices, na primeira divisão já se descarta metade dos registros da tabela. É aí onde está o
segredo da otimização e da agilidade na consulta.
Para fixar o que é o índice!!!
Esquema 5 – Índices.
Ín
d
ic
es
Estruturas de acesso auxiliar.
Utilizados para agilizar a recuperação de registros
Oferecem caminhos de acesso secundários
Usam ponteiros para a localização dos dados.
Não devem ser criados de maneira ilimitada e sem cuidados.
_________________________________________
29
16- (VUNESP - 2024 – Prefeitura de São Bernardo do Campo - Analista de
Tecnologia da Informação e Comunicações) Considerando os bancos de dados
relacionais, uma estrutura utilizada é representada pela criação de índices, a partir de
campos de tabelas, sendo correto afirmar que a finalidade básica da criação de índices em
bases de dados é
a) armazenar dados referentes ao dicionário de dados das tabelas.
b) agilizar o processo de obtenção dos resultados de consultas feitas à base de dados.
c) especificar o número máximo de registros que poderão ser armazenados em uma tabela.
d) transformar todas as tabelas do banco de dados para a terceira forma normal.
e) gerar endereços a serem disponibilizados para acesso às tabelas por meio da Internet.
Resolução:
Vamos analisar cada um dos itens:
a) Incorreto: os índices não armazenam o dicionário de dados.
b) Correto: os índices são estruturas de acesso auxiliares associados a tabelas, que são
utilizados para agilizar a recuperação de registros em resposta a certas condições de
pesquisa.
c) Incorreto: em tese, não existe uma definição do limite máximo de registros.
d) Incorreto: a transformação em formas normais é objetivo do processo de normalização.
e) Incorreto: os índices não são utilizados para gerar endereços para recursos via internet.
Gabarito: Letra B.
17- (CESPE / CEBRASPE - 2023 – MPE-RO - Analista) Em um banco de dados
relacional, o índice
a) garante a consistência dos dados, evitando conflitos e duplicidades.
b) é responsável por controlar o acesso e a autenticação dos usuários, garantindo a
segurança dos dados.
c) permite a criação de relacionamentos entre tabelas, garantindo a integridade referencial.
d) permite a organização física dos registros, melhorando o desempenho das consultas.
e) facilita a modelagem conceitual, definindo os atributos e as entidades do sistema.
Resolução:
Vejamos a que se refere cada um dos itens:
a) Incorreto: uma restrição de integridade garante a consistência dos dados, evitando
conflitos e duplicidades.
b) Incorreto: o SGBD é responsável por controlar o acesso e a autenticação dos usuários,
garantindo a segurança dos dados.
_________________________________________
30
c) Incorreto: a chave estrangeira permite a criação de relacionamentos entre tabelas,
garantindo a integridade referencial.
d) Correto: um índice permite a organização física dos registros, melhorando o
desempenho das consultas. Os índices oferecem caminhos de acesso alternativos que
agilizam a recuperação de registros.
e) Incorreto: o diagrama entidade-relacionamento facilita a modelagem conceitual,
definindo os atributos e as entidades do sistema.
Gabarito: Letra D.
18- (CESGRANRIO - 2023 – BB - Escriturário) Um banco de dados (BD) persiste
dados de forma organizada e controlada. Em adição, um BD deve prover recursos para
permitir que consultas que necessitem de velocidade (baixo tempo de resposta) no acesso
aos dados possam ter um bom desempenho.
Um dos recursos que um profissional de tecnologia da informação tem à disposição para
configurar um BD, de modo a melhorar o desempenho de consultas selecionadas, é a criação
de
a) regras de integridade
b) visões não materializadas
c) índices
d) sequências
e) gatilhos
Resolução:
Os índices permitem consultas com melhor desempenho.
Gabarito: Letra C.
Ín
d
ic
es
Estruturas de acesso auxiliar.
Utilizados para agilizar a recuperação de registros
Oferecem caminhos de acesso secundários
Usam ponteiros para a localização dos dados.
Não devem ser criados de maneira ilimitada e sem cuidados.
_________________________________________
31
19- (CESPE - 2013 - TCE-RO - Auditor de Controle Externo - Tecnologia da
Informação) Para aperfeiçoamento das consultas em tabelas, em relação ao tempo de
atualização e de consulta dos registros, deve-se criar o maior número de índices possível,
independentemente do uso da tabela.
Resolução:
Os índices são estruturas de acesso auxiliares associados a tabelas, que são utilizados
para agilizar a recuperação de registros em resposta a certas condições de pesquisa.
As estruturas de índice são arquivos adicionais no disco que oferecem caminhos de
acesso secundários, os quais oferecem formas alternativas de acessar os registros sem
afetar o posicionamento físico no arquivo de dados primário no disco.
Apesar da importância dos índices para auxiliar na consulta, este não devem ser criados
de maneira ilimitada e sem nenhum cuidado, pois eles apresentam algumas
desvantagens:
▪ Piora a performance em escritas de dados no banco de dados: Toda vez que
uma informação chave for modificada (inserida, alterada, deletada) obrigará a escrita
no índice. E o índice pode ser interpretado como uma tabela adicional escondida no
banco de dados. E se a informação modificada está presente em várias chaves (vários
índices), todos eles deverão ser alterados (em inclusão e remoção, todos sempre são
afetados, ainda que seja possível otimizar para a remoção, sob pena de encarecer o
custo de leitura). A alteração do índice implica em acesso de leitura e escrita nele,
apesar de ser uma operação eficiente se comparada com o acesso direto à tabela, não
deixa de ter um custo adicional.
▪ Aumenta o consumo de espaço para armazenamento do banco de dados
(memória e disco): É claro que esta tabela adicional de chaves de índice vai ocupar
um espaço extra também. Costuma ser um espaço menor que a tabela de dados
original, mas existe um custo extra. Se houver muitos índices é possível que o espaço
seja até maior que a tabela original.Com muito índice fica difícil colocar tudo na
memória.
▪ Aumenta a necessidade de manutenção interna no banco de dados: Isto é um
pouco dependente da implementação, mas é comum que páginas de chaves sejam
abandonadas conforme elas vão sendo alteradas. Além disto o DBA pode ter mais
elementos com que se preocupar.
▪ Pode diminuir a performance de consultas: Não há garantias que todas as
consultas serão mais rápidas com o uso de índices. Como há uma operação adicional
para acesso ao índice antes do acesso ao dados principal, é possível que a soma do
tempo gasto nas operações seja maior que o acesso só ao dado principal mesmo que
o acesso no principal sem índice seja teoricamente menos eficiente. Isto é mais
comum quando o volume de dados é pequeno, mas isto também é verdade em casos
de consultas complexas ou onde uma grande porção dos dados da tabela serão
retornados em qualquer ordem.
Gabarito: Errado.
_________________________________________
32
1.6 Chaves
Uma tabela (ou relação) é constituída de linhas que representam dados relacionados. Essas
linhas devem ser distintas, ou seja, não devem existir duas linhas com os mesmos valores
para todos os seus atributos. Em um banco de dados relacional, as chaves são usadas para
essa distinção. Veremos a seguir, os principais conceitos relacionados as chaves.
Uma superchave é um conjunto de um ou mais atributos que, coletivamente, nos
permitem identificar de forma exclusiva uma tupla na relação. De outro modo, uma
superchave especifica uma restrição de exclusividade de que duas tuplas não podem ter
os mesmos valores para todos os seus atributos.
É importante destacar que cada relação tem pelo menos uma superchave padrão: o conjunto
de todos os seus atributos. Outra consideração importante é que uma superchave pode ter
atributos redundantes ou desnecessários para a identificação única de uma tupla.
Uma chave, por sua vez, é uma superchave com a propriedade adicional de que a
remoção de qualquer dos atributos a faz deixar de ser chave. Assim, uma chave é um
conjunto de um ou mais atributos que, coletivamente, nos permitem identificar de forma
exclusiva uma tupla na relação, sendo que a remoção de qualquer dos seus atributos a faz
deixar de identificar unicamente a tupla na relação.
Em resumo, uma chave apresenta duas propriedades:
▪ Duas tuplas distintas não podem ter valores idênticos para os atributos na chave;
▪ É uma superchave mínima, ou seja, uma superchave da qual não podemos remover
nenhum atributo sem acabar com a restrição de exclusividade.
Em geral, uma relação pode ter mais de uma chave. Nesse caso, cada uma dessas chaves
possíveis é denominada chave candidata. É possível que diversos conjuntos distintos e
atributos possam servir como uma chave candidata, porém, devemos ter em mente que uma
chave candidata é uma superchave mínima e, portanto, não deve conter atributos
desnecessários. Assim, se um atributo matrícula é uma chave candidata, o conjunto formado
por matrícula e nome não é chave candidata, embora seja uma superchave.
Devemos usar o termo chave primária (primary key) para designar uma chave candidata
que é escolhida pelo designer de banco de dados como o principal meio de identificar
tuplas em uma relação. As demais são chamadas chaves secundárias ou chaves únicas.
ESCLARECENDO!!!
Pessoal, chamo a atenção para o fato de que todos esses conceitos de chaves que foram
apresentados possuem a propriedade da unicidade em comum, ou seja, a propriedade de
distinguir as tuplas de uma tabela. Sendo assim, se a questão fizer a seguinte afirmação:
Uma _________ é um atributo ou conjunto de atributos que permite identificar uma tupla.
O espaço pode ser preenchido por superchave, chave, chave primária, chave candidata,
chave secundária ou chave única. Em qualquer das hipóteses, essa afirmação será correta.
Elas diferem por outras características e não pela capacidade de distinguir uma tupla.
_________________________________________
33
EXEMPLIFICANDO!!!
Para clarificar o entendimento dos diversos conceitos de chave, vejamos o seguinte
exemplo tomando como base a tabela Servidor a seguir.
matricula cpf nome salario
134512 65465465454 João Aprovado 13.002,03
251218 12312312312 Maria Concursada 5.519,61
124578 45645645645 Paulo Passou 13.002,03
131820 78978978978 Glória Nomeada 5.519,61
112035 32132132132 Eduardo Posse 13.002,03
O atributo matricula do servidor é suficiente para distinguir uma tupla de outra. Assim,
matricula é uma superchave. O atributo de salario do servidor, por outro lado, não é
uma superchave, porque vários servidores podem ter o mesmo salario. Outras superchaves
possíveis podem ser {cpf}, {matricula, cpf}, {matricula, nome}, {cpf, nome} ou mesmo o
conjunto formado por todos os atributos da tabela {matricula, cpf, nome, salario}. Dessa
forma, podemos ter superchave com atributos ambíguos ou em excesso.
No exemplo, considerando a propriedade de ser superchave mínima, chegamos as chaves.
Na tabela, podemos ter a chave matrícula ou a chave cpf, pois ambos os atributos
identificam unicamente as tuplas e como são simples não podem ser removidos. Assim,
matricula ou cpf são chaves candidatas da relação. Diferente é o caso de {matrícula,
nome}, pois apesar de servir para identificar exclusivamente as linhas da tabela, podemos
retirar o atributo nome e, ainda assim, a restrição de exclusividade será mantida.
O designer do banco pode optar, por exemplo, pela escolha de matricula para ser a chave
primária desta relação. Neste caso, cpf será chave secundária ou chave única.
A escolha da chave primária dentre as chaves candidatas possíveis é um pouco arbitrária,
porém devem-se tomar uma série de cuidados:
▪ Normalmente é melhor escolher uma chave com um único atributo ou
pequeno número de atributos.
▪ A chave primária deve ser escolhida de tal forma que seus valores de atributo
nunca sejam, ou muito raramente, mudados.
▪ Os atributos das tuplas da chave devem possuir valores válidos, ou seja, não
devem permitir valor NULL. Este cuidado na verdade é uma restrição, a
chamada restrição de integridade da entidade.
ESCLARECENDO!!!
As chaves podem ser naturais (natural key), quando formadas por atributos com
significado no mundo real, como o número de CPF, ou artificiais (surrogate key), quando
formadas por atributos gerados exclusivamente para identificar os registros no banco, mas
não possuem significado fora dali, como um ID numérico incrementado automaticamente.
_________________________________________
34
Agora vamos entender o conceito de chave estrangeira.
Uma chave estrangeira (foreign key) é um atributo ou conjunto de atributos em uma
tabela que cria uma ligação lógica com a chave primária (ou candidata) de outra
tabela, permitindo a associação de registros entre elas. A tabela com a chave estrangeira é
chamada de referenciadora, e a tabela com a chave referenciada é chamada de
referenciada. Uma tabela pode se referir a ela mesma, formando um autorrelacionamento.
A chave estrangeira assegura a consistência entre tabelas, garantindo que cada valor de
chave estrangeira corresponda a um valor existente na tabela referenciada. Isso é conhecido
como restrição de integridade referencial, que exige que uma tupla na tabela
referenciadora sempre corresponda a uma tupla existente na tabela referenciada.
ATENÇÃO!!!
A chave estrangeira aceita valores nulos. É possível que para algum registro, não haja
valor de chave estrangeira preenchido, caso aquele registro não seja relacionado a outro
registro. Contudo, se existir um valor de chave estrangeira, esse valor deve existir na
tabela referenciada para manter a restrição de integridade referencial.
EXEMPLIFICANDO!!!
Vejamos as tabelas Servidor e Departamento a seguir.
SERVIDOR DEPARTAMENTO
matricula nome salario codigo nome_departamento