Alunos: Elliot Portugal
Ezequiel Junior
Guilherme Napolitano
William Silva
Álgebra Relacional
1) Quantos e Quais são os grupos nos quais a
álgebra relacional está dividida? Identifique quais operações pertencem a cada
um deles.
R: As operações da álgebra relacional são
normalmente divididas em dois grupos. O primeiro
deles inclui um
conjunto de operações da teoria de conjuntos. As operações são UNION,INTERSECTION,
DIFFERENCE e CARTESIAN PRODUCT. O segundo grupo consiste de
operações
desenvolvidas especificamente para bases de dados relacionais, tais como:
SELECT, PROJECT e
JOIN entre outras.
2)
Explique a Operação SELECT e PROJECT. Quando usar, Para que usar, Como usar,
diferenças, etc.
R: Operações SELECT e PROJECT:
O Operador SELECT: A
operação SELECT é usada para selecionar um subconjunto de tuplas de uma relação.
Estas tuplas devem satisfazer uma condição de seleção. Por exemplo, a seleção
de um subconjunto de tuplas da relação EMPREGADOS que trabalham para o
departamento 4 ou que tenham salário maior que 3000. Cada uma dessas condições
é especificada individualmente usando a operação SELECT como segue:
NDEP = 4
(EMPREGADO)
SALÁRIO > 3000
(EMPREGADO)
Em geral, a
operação SELECT é denotada por:
<condição de
seleção> (<nome da relação>)
onde o símbolo é
usado para denotar o operador SELECT, e a condição de seleção é uma
expressão Booleana
especificada sobre atributos da relação especificada. A relação resultante da
operação SELECT tem os mesmos atributos da relação especificada em <nome da
relação>. A expressão Booleana especificada em <condição de seleção> é
construída a partir de cláusulas da forma:
<nome de
atributo> <operador de comparação> <valor constante>, ou
<nome de
atributo> <operador de comparação> <nome de atributo>
O Operador PROJECT
Pensando na relação
como uma tabela, então o operador SELECT seleciona algumas
linhas da tabela
enquanto descarta outras. O operador PROJECT, por outro lado,
seleciona certas
colunas da tabela e descarta outras. Se existir o interesse sobre
certos atributos da
relação pode-se usar o PROJECT para “projetar” a relação sobre
esses atributos.
Por exemplo, suponha a necessidade de listar, para cada empregado,
os atributos PNOME,
SNOME e SALÁRIO; então pode-se usar o PROJECT como
segue:
SNOME, PNOME,
SALÁRIO (EMPREGADO)
A relação
resultante é mostrada na figura 7.1b. A forma geral do operador PROJECT é:
<lista de
atributos> (<nome da relação>)
onde é o símbolo
usado para representar o operador PROJECT e <lista de atributos> é uma
lista de atributos
da relação especificada por <nome da relação>. A relação resultante tem
apenas os atributos
especificados em <lista de atributos> e aparecem na mesma ordem que
aparecem na lista.
Assim, o grau é igual ao número de atributos em <lista de atributos>.
3) Explique a Operação UNION, INTERSECTION
e DIFFERENCE. Quando usar, Para que usar, Como usar, etc.
R: Existem várias operações da teoria de
conjuntos que são utilizadas para agrupar elementos de
dois conjuntos,
entre elas estão: UNION, INTERSECTION e DEFFERENCE. Estas operações
são binárias; isto
é, elas necessitam de dois conjuntos. Quando essas operações são
adaptadas para a
base de dados relacional deve-se assegurar que essas operações resultem
sempre em relações
válidas.Pode-se definir as três operações UNION, INTERSECTION e DIFFERENCE
sobre duasrelações que sejam união compatível R e S:
· UNION ¾ O
resultado da operação, denotado por R È S, é uma relação que inclui
todas as tuplas de
R e todas as tuplas de S. Tuplas duplicadas são eliminadas.
· INTERSECTION ¾ O
resultado desta operação, denotado por R Ç S, é a relação
que inclui todas as
tuplas que são comuns a R e S.
· DIFFERENCE ¾ O
resultado desta operação, denotado por R - S, é a relação que
inclui todas as
tuplas de R, mas que não estão em S.
4) Explique a Operação CARTESIAN PRODUCT.
Quando usar, Para que usar, Como usar, etc.
R: A operação CARTESIAN PRODUCT, denotada por
c, é também uma operação de conjunto
binária, mas as
relações sobre as quais são aplicadas não necessitam ser união compatível.
Esta operação é
usada para combinar tuplas de duas relações tal que tuplas relacionadas possam
ser identificadas.O CARTESIAN PRODUCT cria tuplas com atributos combinados de
duas relações. Pode-seentão selecionar apenas as tuplas que estejam
relacionadas especificando uma condição deseleção apropriada, como foi feita no
exemplo. Devido à seqüência: CARTESIAN PRODUCT
seguido de SELECT,
ser muito comum para se identificar tuplas relacionadas de duas relações,
uma operação
especial JOIN foi criada para especificar esta seqüência como uma única
operação. Assim, a
operação CARTESIAN PRODUCT é raramente utilizada isoladamente.
5) Explique as Operações de junção (JOIN) e
divisão (DIVISION). Quando usar, Para que usar, Como usar, etc.
R: A Operação JOIN
A operação JOIN,
denotada por x, é usada para combinar tuplas relacionadas de relações em
uma única tupla.
Esta operação é muito importante para quaisquer bases de dados relacionais,
pois permite
processar relacionamentos entre relações. Para ilustrar a operação JOIN,
suponha
que se deseja
recuperar os nomes dos gerentes de cada departamento. Para obter-se o nome
dos gerentes, é
necessário combinar cada tupla de departamento com tuplas de empregados
cujo valor NSS seja
igual ao valor de SNNGER na tupla departamento. Isto é feito usando a
operação JOIN,
então projeta-se o resultado sobre aqueles atributos necessários:
55
DEPT_GER¬DEPARTAMENTO
xSNNGER=NSS EMPREGADO
RESULT¬pDNOME,
SNOME, PNOME (DEPT_GER)
A
Operação DIVISION
A operação DIVISION
é útil para um tipo especial de consulta que ocorre freqüentemente em
aplicações de base
de dados. Esta requisição pode ser ilustrada pela seguinte consulta:
“Recupere os nomes
dos empregados que trabalham em todos os projetos em que ‘John
Smith’ trabalha.
Para expressar esta consulta usando DIVISION deve-se fazer o seguinte:
primeiro recuperar
a lista de números de projetos em que ‘John Smith’ trabalha em uma relação
intermediária
SMITH_PNOS:
SMITH¬s PNOME =
‘John’ AND SNOME = ‘Smith’ (EMPREGADO)
SMITH_PNOS¬p PNRO
(TRABALHA_EM * NSSEMP = NSS SMITH)
Depois, criar uma
relação que inclua tuplas da forma <PNRO, NSSEMP> que lista todos os
empregados, cujo
número do segura social é NSSEMP, que trabalham num determinado
projeto PNRO:
NSS_PNRO¬p PNRO,
NSSEMP (TRABALHA_EM)
Finalmente, aplicar
a operação DIVISION para as relações obtidas a fim de obter os números
dos seguros sociais
desejados:
NSS_DESEJADO
(NSS)¬NSS_PNRO ¸ SIMTH_PNOS
RESULT¬p PNOME,
SNOME (NSS_DESEJADO * EMPREGADO)
6)
Explique as Operações de AGREGAÇÃO. Quando usar, Para que usar, Como usar, etc.
R: O primeiro tipo de consulta que não pode
ser expressa na álgebra relacional é conhecido como
funções agregadas
sobre coleções de valores da base de dados. Por exemplo, pode-se
querer recuperar a
média ou total salarial de todos os empregados ou o número de tuplas de
empregados. As
funções normalmente aplicadas para coleções de valores numéricos são:
SUM, AVERAGE,
MAXIMUM e MINIMUM. A função de contagem de tuplas é normalmente
chamada COUNT. Cada
uma destas funções pode ser aplicada a todas as tuplas de uma
relação.
Álgebra Relacional -
Exercícios
Seleção
1) Mostre o
conteúdo da relação departamentos.
R: Signa(σ)(departamento)
2) Mostre os empregados que trabalham no departamento 4.
R: Sigma(σ)=4 (Departamento)
3) Mostre a(s) localização(ões) do departamento de pesquisa (5).
R: Signa(σ) = 5 (Locais_depto)
4) Mostre o(s) projeto(s) do departamento 4.
R: Signa(σ) = 4 (Projetos)
5) Mostre as informações de relação trabalha_em cujo número do projeto igual a 3.
σ) = 3 (Trabalha_em)Projeção
1) Mostre o número e o nome dos dependentes.
R:PI( π)nssemp,
nomedep(Dependente)
2) Mostre o nome e a localização dos projetos
R: PI( π)pnome, plocalização(Projetos)
3) Mostre o nome e
o código do gerente dos departamentos.
R: PI( π)DNOME, SNNGER
(Departamento)
4) Mostre o nome e a data de nascimento dos empregados.
R: PI( π)PNOME, DATANASC (Empregado)
5) Mostre o nome e o salário dos empregados.
R: PI( π)PNOME, SALÁRIO (Empregado)
Seleção + Projeção
1) Mostre o código, nome e o salário dos empregados que ganham mais de
2500.
R: PI( π)PNOME, NSS,
SALARIO(Signa(σ)SALARIO>2500(EMPREGADO))
2) Mostre o nome e a localização dos projetos do departamento 5.
R: PI( π)PNOME, PLOCALIZAÇÃO(Signa(σ)DNUM=5(PROJETO))
3) Mostre o número do empregado e o número do projeto cujas horas são maiores que 10.
R: PI( π)NSSEMP, PNRO (G_horas >
10 (Trabalham_em))
4) Mostre o nome e o sexo do dependente cujo número do empregado é igual a 123456789.
R: PI( π)NOMEDEPENDENTE, SEXO
(GNSSEMP=123456789(DEPENDENTE)
5) Mostre o nome, relação e a data do aniversário dos dependentes cujo número do empregado é
igual a 333445555.
R: PI( π)NOMEDEPENDENTE, DATANIV,
RELAÇÃO (GNSSEMP = 333445555 (DEPENDENTE)
Junção
1) Mostre o nome e o salário do empregado e o nome e a relação dos seus
dependentes.
R: PI( π)PNOME, SALARIO,
NOMEDEPENDENTE, RELAÇÃO (EMPREGADOҲNSS=NSSEMP DEPENDENTE)
2) Mostre o nome do
departamento e o nome e o salário do empregado que é o seu gerente.
R: PI( π)D.DNOME,E.PNOME,E.SALARIO(EMPREGADO.E
Ҳ E.NSS=DSSNGER DEPARTAMENTO.D)
3) Mostre o nome do departamento e a sua localização.
R: PI( π)DNOME, L.LOCALIZAÇÃO (DEPARTAMENTO D X DNUMERO = LNÚMERO LOCAIS – DEMO L)
4) Mostre o nome do
projeto, sua localização e o departamento ao qual pertence.
R: PI( π)DNOME, PLOCALIZAÇÃO, DNOME (PROJETO X DNUMERO = NUMERO DEPARTAMENTO)
5) Mostre o nome do
empregado e o nome do projeto nos quais eles trabalharam.
R: PI( π)DNOME, P.PNOME (EMPREGADO
E X NSSEMP TRABALHAEMT ) X TPNRO = P.PNÚMERO
PROJETO P)
Agregação
1) Mostre a quantidade de empregados do sexo masculino e a quantidade de
empregados do sexo feminino.
R: SEXO (ƒ) CAUNT
NSS(EMPREGADO)
2) Mostre a
quantidade de dependentes do sexo masculino e a quantidade de dependentes do
sexo feminino do empregado cujo número é 123456789.
R: SEXO (ƒ) CAUNT
NSSEMP(Signa(σ) NSSEMP=123456789(DEPENDENTE))
3) Mostre o nome e o salário do empregado e a quantidade de dependentes que possui.
R: PI( π)DNOME, SALARIO, (ƒ) COUNT
NOMEDEPENTE (EMPREGADO X NSS=NSSEMP DEPENDENTE)
4) Mostre a despesa total de cada departamento com os salários dos empregados.
R: DNOME (ƒ) SUM SALARIO (EMPREGADO X NDEP = DNÚMERO DEPARTAMENTO)
5) Mostre a soma total das horas empregadas em cada projeto.
R: PNRO (ƒ) SUM
HORAS (TRABALHA_EM) PNOME (ƒ) SUM HORA( TRABALHA_EM X PNRO = PNUMERO PROJETO)
Normalização
1)Quais são as
diretrizes informais para o projeto de esquema de relações? Explique
resumidamente cada uma.R: Semântica de atributos: verificar se o atributo
caracteriza (pertence) mesmo aquela entidade.
Informação redundante
ou anomalias de atribuição: verificar se os atributos geram redundância e,
portanto desperdício de espaço.
Valor null em
tuplas: uma relação degenerada (tabelão) pode causar valores null, o que
prejudica a interpretação dos dados.
Não permissão de
tuplas espúrias: tabelas degeneradas, quando relacionadas podem gerar
informações/ dados errôneos (tupla espúrias)
2)Quais são as
métricas de qualidade informal para projeto de esquemas de relações? Explique resumidamente
cada uma delas.
R: São quatro métricas (Semântica de Atributos, Informação redundante ou
anomalias de atribuição, valor null em tuplas e não permissão de tuplas
espúrias).
3)O que é e para
que serve o conceito de dependência funcional? Quais são os tipos de
dependência? Explique-os
R: dependência
funcional: Dependências Funcionais são restrições ao conjunto de relações
válidas. Elas permitem expressar determinados fatos em banco de dados relativos
ao empreendimento que se deseja modelar. Anteriormente foi definido o conceito
de superchave. Para existir o destino (dependência –>chave estrangeira) tem
que existir a origem (chave primaria). O atributo deve realmente caracterizar a
relação.
4)O que é e para
que serve normalização de dados relacionais? Quando será utilizada a
normalização na maioria das vezes?
R: Eliminar
redundâncias e inconsistências de um banco de dados, com reorganização mínima
dos dados, é o processo pelo qual transformamos um BD fora do padrão do m-rel,
num BD normalizado (dentro do padrão m-rel). Normalmente é usado em BD antigos ou criado
por pessoa não técnica.
5)O que são e
quantas são as formas formais de relação? Explique-as resumidamente. Para
manter eficiência e a simplicidade de processamento em certos casos podemos
normalizar as relações até a 3ºFN por quê?
R: O objetivo da
normalização de um banco de dados é evitar os problemas que podem provocar
falhas no projeto do banco de dados, bem como eliminar a mistura de assuntos e
as correspondentes redundâncias dos dados desnecessárias. O processo de normalização
aplica uma série de regras sobre as tabelas (também chamadas de relações) de um
banco de dados, para verificar se estão corretamente projetadas.Primeira Forma
Normal: A primeira forma normal enuncia que cada atributo de uma entidade ou
relacionamento pode armazenar apenas um valor. Tabelas com atributos
multi-valorados não são consideradas em 1NF.Segunda
Forma Normal: A segunda forma normal (2NF) descreve que todo atributo deve ser
determinado unicamente pela chave primária. Se existem atributos que dependem
apenas de parte da chave, estes devem ser separados em tabelas onde a 2NF seja
obedecida.Terceira Forma Normal: A terceira forma normal (3NF) exige que a
tabela esteja em 2NF e que todos os atributos que não são chave sejam
mutuamente independentes, isto é, que não existam funções que definam um ao
outro. Portanto, sempre a chave por inteiro deve definir toda a tabela.Forma
normal Boyce/Codd (BCNF): Definição que engloba as outras formas normais, e
define que uma tabela está em BCNF se, e somente se, todo determinante
funcional for em relação a uma chave candidata. Na prática, uma tabela está em
BCNF se estiver em 3NF e não existir dependência funcional dentro da chave
primária.
6)Dê exemplos de
normalizações de uma relação.
R: FUNCIONÁRIOS =
{CODFUNC + NOME + CARGO + {PROJETO + DATAINI + DATA FIM}}
Para colocar na 1FN:
FUNCIONÁRIOS = {CODFUNC + NOME + CARGO}
FUNC_PROJ = {CODFUNC + PROJETO + DATAINI + DATA FIM}