12
UERJ FACULDADE DE ENGENHARIA DEPARTAMENTO DE ENGENHARIA DE SISTEMAS E COMPUTAÇÃO ENGENHARIA DE SISTEMAS B ÁLGEBRA RELACIONAL Lista de Exercícios A. Considere as seguintes relações: R 1 (A:Dom 1; B:Dom 2; C:Dom 3) R 2 (D:Dom 3; E:Dom 4) R 3 (F: Dom 4) R 4 (G:Dom 3; H:Dom 4) onde A, B, C, D, E, F, G e H representam atributos e Dom i representa os domínios de valores desses atributos. Suponha, ainda, que R 1 , R 2 , R 3 e R 4 possuam 100, 50, 25 e 10 tuplas, respectivamente. Calcule o máximo e o mínimo de tuplas na relação resultante de cada uma das seguintes expressões da Álgebra Relacional: 1. E 1 R 1 |X| R 2 (equi-join) C = D Considerando que: a operação de junção é equivalente a uma operação de seleção sobre o produto cartesiano das tabelas operandas; o número de tuplas gerado pelo produto cartesiano é igual ao produto do número de tuplas das tabelas operandas; no caso dos operandos R 1 e R 2 esse número é igual a 5.000 tuplas (100 x 50). Temos que: no máximo, a condição (C = D) será válida para todas as 5.000 tuplas do produto cartesiano; no mínimo, nenhuma tupla do produto cartesiano atenderá a condição (C = D). Logo, max(E 1 ) = 5.000 e min(E 1 ) = 0

Ar Exercicios

Embed Size (px)

Citation preview

Page 1: Ar Exercicios

UUEERRJJ

FFAACCUULLDDAADDEE DDEE EENNGGEENNHHAARRIIAA DEPARTAMENTO DE ENGENHARIA DE SISTEMAS E COMPUTAÇÃO ENGENHARIA DE SISTEMAS B

ÁÁLLGGEEBBRRAA RREELLAACCIIOONNAALL LLiissttaa ddee EExxeerrccíícciiooss

A. Considere as seguintes relações:

R1 (A:Dom1; B:Dom2; C:Dom3)

R2 (D:Dom3; E:Dom4)

R3 (F: Dom4)

R4 (G:Dom3; H:Dom4)

onde A, B, C, D, E, F, G e H representam atributos e Domi representa os domínios de valores desses atributos. Suponha, ainda, que R1, R2, R3 e R4 possuam 100, 50, 25 e

10 tuplas, respectivamente. Calcule o máximo e o mínimo de tuplas na relação resultante de cada uma das seguintes expressões da Álgebra Relacional:

1. E1 R1 |X| R2 (equi-join)

C = D

Considerando que:

a operação de junção é equivalente a uma operação de seleção sobre o produto

cartesiano das tabelas operandas;

o número de tuplas gerado pelo produto cartesiano é igual ao produto do

número de tuplas das tabelas operandas;

no caso dos operandos R1 e R2 esse número é igual a 5.000 tuplas (100 x 50).

Temos que:

no máximo, a condição (C = D) será válida para todas as 5.000 tuplas do

produto cartesiano;

no mínimo, nenhuma tupla do produto cartesiano atenderá a condição

(C = D).

Logo, max(E1) = 5.000 e min(E1) = 0

Page 2: Ar Exercicios

2. E2 E1 |X| R3 (equi-join)

E = F

Da mesma forma, considerando que:

a relação E1 possui no mínimo zero e no máximo 5.000 tuplas; e

a relação E3 possui 25 tuplas;

Temos que:

o produto cartesiano de E1 por R3 terá no máximo 125.000 tuplas

(i.e. 5000*25);

a condição de seleção (E = F) será válida no máximo para todas essas tuplas e no

mínimo para nenhuma delas.

Logo, max(E2) = 125.000 e min(E2) = 0

3. E3 R3 R4 (união)

Considerando que R3 e R4 possuem 25 e 10 tuplas, respectivamente, temos que:

o máximo de tuplas de E3 ocorrerá quando R3 e R4 forem disjuntas, isto é, quando

não possuírem tuplas em comum. Neste caso, o número de tuplas da união será igual à soma do número de tuplas nas duas relações (35);

o mínimo de tuplas de E3 ocorrerá quando R4 estiver totalmente contida em R3. Nesse caso, o número de tuplas da união será igual ao número de tuplas de R3

(25).

Logo, max(E3) = 35 e min(E3) = 25

Page 3: Ar Exercicios

4. E4 E1 ||X| R2 (left-join)

C = D

Considerando que:

a relação E1 possui no mínimo zero e no máximo 5.000 tuplas;

a relação R2 possui 50 tuplas;

o produto cartesiano de E1 por R2 terá no máximo 250.000 tuplas (i.e. 5000*50); e

a junção à esquerda inclui todas as tuplas de E1, incluindo aquelas que não satisfazem a condição de seleção (C = D);

Temos que:

o máximo de tuplas em E4 será igual 250.000, quando todas as tuplas do produto

cartesiano satisfizerem a condição (C = D);

o mínimo de tuplas em E4 será igual 5.000, quando nenhuma tupla do produto

cartesiano satisfizer a condição (C = D).

Logo, max(E4) = 250.000 e min(E4) = 5.000

5. E5 E1 |X|| R2 (right-join) C = D

Considerando que:

a relação E1 possui no mínimo zero e no máximo 5.000 tuplas;

a relação R2 possui 50 tuplas;

o produto cartesiano de E1 por R2 terá no máximo 250.000 tuplas (i.e. 5000*50); e

a junção à direita inclui todas as tuplas de R2, incluindo aquelas que não satisfazem a condição de seleção (C = D);

Temos que:

o máximo de tuplas em E5 será igual 250.000, quando todas as tuplas do produto

cartesiano satisfizerem a condição (C = D);

o mínimo de tuplas em E5 será igual 50, quando nenhuma tupla do produto

cartesiano satisfizer a condição (C = D).

Logo, max(E5) = 250.000 e min(E4) = 50

Page 4: Ar Exercicios

6. E6 R2 ÷ R4 (divisão)

Considerando que R2 e R4 possuem o mesmo número de atributos, esta operação é inválida, uma vez que a divisão requer que o primeiro operando tenha no mínimo

um atributo a mais do que o segundo operando.

7. E7 R2 ÷ R3 (divisão)

Considerando que a relação R2 possui 50 tuplas e a relação R3 possui 25 tuplas,

temos que:

o máximo de tuplas em E7 será igual 2, quando todas as tuplas de R2 formarem

um conjunto total de combinações com todas as tuplas de R3. Neste caso, o total de tuplas de E7 será igual à divisão do número de tuplas de R2 pelo número de

tuplas de R3 (i.e. 50/25).

o mínimo de tuplas em E7 será igual zero, quando não houver em R2 nenhum conjunto de tuplas que represente uma combinação total com todas as tuplas de

R3.

Logo, max(E5) = 2 e min(E4) = zero

B. Dadas duas relações R1 e R2, onde R1 contém n1 tuplas, R2 contém n2 tuplas e n2>n1>0, calcule o máximo e o mínimo de tuplas na relação resultante de cada uma

das seguintes expressões da álgebra relacional:

1. R1 R2

Considerando que:

R1 e R2 possuem n1 e n2 tuplas, respectivamente; e

n2 > n1 > 0;

Temos que:

o máximo de tuplas geradas pela operação de união ocorrerá quando R1 e R2

forem disjuntas, isto é, quando não possuírem tuplas em comum. Nesse caso, o número de tuplas será igual à soma do número de tuplas nas duas relações (n1 +

n2);

o mínimo de tuplas geradas pela operação de união ocorrerá quando R1 estiver

totalmente contida em R2. Nesse caso, o número de tuplas será igual ao número de tuplas de R2 (n2).

Logo, max(R1 R2) = n1 + n2 e min(R1 R2) = n2

Page 5: Ar Exercicios

2. R1 R2

Da mesma forma:

o máximo de tuplas geradas pela operação de interseção ocorrerá quando R1

estiver totalmente contida em R2. Nesse caso, o número de tuplas será igual ao número de tuplas de R1 (n1).

o mínimo de tuplas geradas pela operação de interseção ocorrerá quando R1 e R2 forem disjuntas, isto é, quando não possuírem tuplas em comum. Nesse caso, o

número de tuplas será igual zero.

Logo, max(R1 R2) = n1 e min(R1 R2) = zero

3. R1 X R2

Como a operação de produto cartesiano combina cada tupla do primeiro operando com todas as tuplas do segundo operando, sem quaisquer restrições, o número de

tuplas geradas por essa operação é constante e igual ao produto do número de tuplas em ambos os operandos.

Assim, max(R1 x R2) = min(R1 x R2) = n1 * n2

4. a=7 (R1)

Sabemos que R1 possui 100 tuplas. Se todas elas satisfizerem a condição de seleção

(a = 7) teremos no máximo 100 tuplas no resultado. Se nenhuma delas satisfizer essa condição, teremo no mínimo zero tuplas.

Assim, max( a=7 (R1)) = 100 e min(( a=7 (R1)) = zero

5. a [R1]

Sabemos que R1 possui 100 tuplas. Se todas elas possuírem o mesmo valor para o atributo a, teremos apenas uma tupla no resultado da operação de projeção. Por

outro lado, se cada tupla de R1 possuir um valor diferente para o atributo a, teremos

100 tuplas no resultado.

Assim, max (a [R1]) = 100 e min (a [R1]) = 1

C. Escreva uma expressão que traduza a operação de interseção em termos das operações de união e diferença.

Sabemos que:

a operação de união inclui as tuplas de ambas as relações operandas sem

duplicação;

a operação de diferença inclui todas as tuplas do primeiro operando que não estão

presentes no conjunto de tuplas do segundo operando.

Assim sendo, se subtrairmos do resultado da união as tuplas que estão em um

operando mas não estão no outro obteremos as tuplas que estão na sua interseção:

R S = (R S) – (R – S) – (S – R)

Page 6: Ar Exercicios

D. Seja o seguinte esquema de Banco de Dados Relacional:

LIVRO (Lid, Título, Editora, Assunto)

AUTOR (Aid, Nome)

AUTORIA (Lid, Aid)

EDITORA (Eid, Nome)

onde Lid, Aid e Eid representam os atributos chaves das suas respectivas relações.

Escreva as expressões em Álgebra Relacional que resolvem as seguintes consultas:

1. Nome das editoras que publicaram livros escritos, em parceria, por dois ou mais autores.

R1 Autoria

R2 Autoria

T R1.Lid [ R1.Aid ≠ R2.Aid ( R1

|X| R2 ) ]

Lid = Lid

S Editora [ T |X| Livro ]

Lid = Lid

2. Nome dos autores que nunca publicaram livros pela editora McGraw-Hill.

Códigos dos livros publicados pela editora McGraw-Hill:

R1 Lid [ Editora = “McGraw-Hill” (Livro) ]

Autores que publicaram livros pela editora McGraw-Hill:

R2 Aid [ R1 |x| Autoria ] Lid = Lid

Universo de autores:

R3 Aid [Autor]

Códigos dos autores que nunca publicaram livros pela editora McGraw-Hill:

R4 R3 – R2

Nomes desses autores:

S Nome [R4 |X| Autor ]

Aid = Aid

Page 7: Ar Exercicios

3. Nomes dos autores que só publicaram livros individualmente e sempre

na mesma editora.

Autores que publicaram livros em parceria:

R1 Autoria

R2 Autoria

R3 R1.Aid [ R1.Aid ≠ R2.Aid ( R1

|X| R2 ) ]

Lid = Lid

Autores com mais de uma publicação e seus respectivos livros:

T1 R1.Aid, R1.Lid [ R1.Lid ≠ R2.Lid (R1|X| R2) ]

Aid = Aid

Editoras dos livros publicados por esses autores:

T2 T1.Aid, Livro.Editora [ T1|X| Livro ] Lid = Lid

Autores com publicações em mais de uma editora:

R4 Aid [ Editora ≠ Editora (T2|X| T2) ]

Aid = Aid

Universo de autores:

R5 Aid [Autor]

Autores que só publicaram livros individualmente:

R6 R5 – R3

Autores que publicaram livros em apenas uma editora:

R7 R5 – R4

Autores que só publicaram livros individualmente e em apenas uma editora:

R8 R6 R7

Nomes desses autores:

S Nome [R8 |X| Autor ]

Aid = Aid

Page 8: Ar Exercicios

4. Autores que só publicaram livros numa mesma editora.

Autores com mais de uma publicação e seus respectivos livros:

R1 Autoria

R2 Autoria

T1 R1.Aid, R1.Lid [ R1.Lid ≠ R2.Lid (R1|X| R2) ]

Aid = Aid

Editoras dos livros publicados por esses autores:

T2 T1.Aid, Livro.Editora [ T1|X| Livro ] Lid = Lid

Autores com publicações em mais de uma editora:

R3 Aid [ Editora ≠ Editora (T2|X| T2) ]

Aid = Aid

Universo de autores:

R4 Aid [Autor]

Autores que publicaram livros em apenas uma editora:

R5 R4 – R3

Nomes desses autores:

S Nome [R5 |X| Autor ]

Aid = Aid

Page 9: Ar Exercicios

5. Autores que publicaram livros sobre todos os assuntos registrados no

banco de dados.

A consulta inclui o pronome indefinido todos e portanto envolve a operação de

divisão. Resta apenas determinar a forma das relações operandas que vão atuar como dividendo e divisor nessa operação.

Considerando que:

o número de atributos da relação dividendo deve ser pelo menos uma unidade

maior do que o número de atributos da relação divisora;

todo os atributos da relação divisora devem corresponder, em termos de domínio,

a um subconjunto não vazio dos atributos da relação dividendo;

o resultado da operação inclui todos os atributos da relação dividendo que não

têm correspondência na relação divisora;

temos que:

a relação dividendo deverá incluir, única e exclusivamente, dois atributos: o

primeiro deles com domínio “código de autor” e o segundo com domínio “assunto”, uma vez que o resultado da operação resume-se aos códigos dos

autores que publicaram livros sobre todos os assuntos;

a relação divisora deverá possuir apenas um atributo com domínio “assunto”

(i.e., um a menos que a relação dividendo).

Assim;

Dividendo Autoria.Aid, Livro.Assunto [ Autoria |X| Livro ] Lid = Lid

Divisor Assunto [ Livro ]

Autores que publicaram livros em todos os assuntos:

S Dividendo ÷ Divisor

Page 10: Ar Exercicios

E. Considere o seguinte esquema de BD:

PACIENTE (Nome, Doença, Tratamento)

MÉDICO (Nome, Especialidade)

Assuma que nomes identificam univocamente tanto pacientes como médicos e que

alguns médicos eventualmente podem tornar-se pacientes. Assuma também que doenças e especialidades possuem o mesmo domínio, isto é, gripe pode aparecer

como doença e como especialidade. Um médico pode ter mais de uma especialidade. Um paciente pode ter mais de uma doença e pode receber mais de um tratamento

para a mesma doença.

Expresse as consultas abaixo em expressões da Álgebra Relacional.

Nomes dos médicos acometidos de uma doença de sua especialidade.

Neste caso, o médico também é paciente e sua doença é da sua especialidade.

Logo:

Médicos que também são pacientes:

R1 Médico |X| Paciente Nome = Nome

Médicos pacientes cuja doença é a mesma da sua especialidade:

R2 Especialidade = Doença

(R1)

Solução:

S Médico.Nome [ R2 ]

Doenças que possuem um único tratamento.

Universo de doenças:

R1 Doença [ Paciente ]

Universo de doenças com mais de um tratamento:

T1 Paciente

T2 Paciente

R2 T1.Doença [ Tratamento ≠ Tratamento ( T1 |X| T2 ) ]

Doença = Doença

Universo de doenças com um único tratamento:

R5 R1 – R2

Page 11: Ar Exercicios

Nomes dos pacientes que estão sendo submetidos a todos os tratamentos para suas doenças.

F. Seja o seguinte esquema de BD:

PEÇAS (#p, nome, tipo)

CONTÉM (#p, #c)

Onde uma tupla (k, j) de CONTÉM representa o fato de que a peça de código k contém a peça de

código j. Evidentemente, #p e #c possuem o mesmo domínio.

Obtenha expressões da Álgebra Relacional que resolvam as seguintes consultas:

a) Código e nome das peças do tipo parafuso.

b) Código das peças atômicas, isto é, que não possuem componentes.

c) Nome e tipo das peças que possuem um ou mais componentes.

d) Código das peças que não são componentes de nenhuma peça.

e) Códigos das peças que possuem mais de um componente.

f) Código das peças que possuem exatamente um componente.

g) Código das peças compostas que entram na composição de outras peças.

Page 12: Ar Exercicios

G. Considere as Relações F e D que representam Funcionários e Dependentes, respectivamente,

com o seguinte esquema simplificado:

F(#f, nomef)

D(#f, nomed, par)

onde:

#f: matrícula do funcionário,

nomef: nome do funcionário,

nomed: nome do dependente, e

par: parentesco, que pode ser um dentre: 'filho', 'filha', 'esposa/o', etc.

Observe que em D, #f é uma chave-estrangeira que casa com a chave-primária #f de F.

Abaixo é mostrada uma possível instância dessas relações:

F D

#f nomef #f nomed par

01 F1 01 Alice filha

02 F2 02 Alice esposa

03 F3 02 Clara filha

04 F4 03 José filho

Para as instâncias acima obtenha:

a) F x D

b) F |x| D,

c) nomef, nomed (F |x| D )

d) σ par='filha'(D)

Obtenha expressões da álgebra relacional que respondem às seguintes consultas:

a) Nomes e parentescos de todos os dependentes?

b) Matrículas dos funcionários que possuem dependentes filhas?

c) Matrículas do funcionários que não possuem dependentes?

d) Matrículas dos funcionários que possuem algum dependente.

e) Nomes dos funcionários que possuem uma dependente chamada Alice.

f) Matrículas dos funcionários que possuem mais de um dependente?

g) Matrículas dos funcionários que possuem exatamente um dependente?

h) Matrículas dos funcionários que não têm Alice como dependente.

i) Matrículas dos funcionários que possuem uma dependente chamada Alice, juntamente com os

nomes de seus demais dependentes, quando for o caso. j) Matrículas dos funcionários que possuem exatamente um dependente.