DABD Exercicis

De Wiki de Revistes del Campus Nord
Saltar a navegación, buscar

Exercicis resolts de DABD

Contenido

Instruccions


Plantilla

==num_exercici==

*'''AUTOR''':

*'''CORRECCIÓ''':

*'''RESULTAT''':

*'''COMENTARIS''':

Ex 1

a.- 2 (files 1,3)
b.- 3 (1,2,4)
c.- 3 (1,2,3)
c.- 3 (1,3,4)
d.- 3 (1,3,4)
e.- 3 (1,2,4)
f.- 7 tuples
g.- 2000 ((3000+2000+1000)/3)
h.- NULL
i.- 0
j.- 1 (fila 4)
k.- 1 (fila 1)
l.- 0
m.- 4
n.- 0

Ex 13

B:
SELECT d.PerfilID, d.PoblacioID, dt.Any, AVG(d.Mossos)
FROM Destinacio d, Data dt
WHERE d.PoblacioID = "Barcelona" AND d.DataID = dt.Id
GROUP BY d.PerfilID, d.PoblacioID, dt.Any
ORDER BY d.PerfilID, d.PoblacioID, dt.Any

E:
SELECT c.PoblacioID, c.DataID, SUM(d.Mossos), c.Crims
FROM Destinacio d, Criminalitat c
WHERE c.PoblacioID = d.PoblacioID, c.DataID = d.DataID
GROUP BY c.PoblacioID, c.DataID
ORDER BY c.PoblacioID, c.DataID

H:
SELECT d.PerfilID, d.PoblacioID, d.DataID, SUM(d.Mossos)
FROM Destinacio d, Poblacio p
WHERE p.Nom = d.PoblacioID AND p.Comarca = "Baix Llobregat"
GROUP BY d.PerfilID, d.PoblacioID, d.DataID
ORDER BY d.PerfilID, d.PoblacioID, d.DataID

Ex 14

C:
SELECT d.EspecialitatID, d.RangID, d.DataID, SUM(d.Mossos)
FROM Destinacio d
WHERE d.PoblacioID = "Barcelona"
GROUP BY d.EspecialitatID, d.RangID, d.DataID
ORDER BY d.EspecialitatID, d.RangID, d.DataID

Ex 26

Resultats intermitjos comuns (AP1 i AP2)
selecció A: A'
- long. tupla = 10 bytes
- FS(A') = 0,1
- |A'| = 100 tuples
- R_a' = 50 tuples/pàg.
- B_a' = 2 pàgines

selecció B: B'
- long. tupla = 20 bytes
- FS(B') = 0,5555
- |B'| = 5555 tuples
- R_b' = 25 tuples/pàg.
- B_b' = 223 pàgines

selecció C: C'
- long. tupla = 20 bytes
- FS(C') = 0,0199
- |C'| = 1990 tuples
- R_c' = 25 tuples/pàg.
- B_c' = 80 pàgines

Resultats intermitjos AP1
join entre A' i B': A'B'
- long. tupla = 10 bytes
- FS(A'B') = 0,001
- |A'B'| = 555 tuples
- R_a'b' = 50 tuples/pàg.
- B_a'b' = 12 pàgines

join entre A'B' i C': A'B'C'
- long. tupla = 10 bytes
- FS(A'B'C') = 0,0001
- |A'B'C'| = 110 tuples
- R_a'b'c' = 50 tuples/pàg.
- B_a'b'c' = 3 pàgines

Resultats intermitjos AP2
join entre B' i C': B'C'
- long. tupla = 20 bytes
- FS(B'C') = 0,0001
- |B'C'| = 1105 tuples
- R_b'c' = 25 tuples/pàg.
- B_b'c' = 45 pàgines

join entre A' i B'C': A'B'C'
- long. tupla = 10 bytes
- FS(A'B'C') = 0,001
- |A'B'C'| = 110 tuples
- R_a'b'c' = 50 tuples/pàg.
- B_a'b'c' = 3 pàgines

COST AP1= 2 + 223 + 80 + 12 + 3 = 320 pàgines
COST AP2= 2 + 223 + 80 + 45 + 3 = 353 pàgines

No aseguro que estén bien...
A mi m'ha donat més o menys el mateix excepte que a FS(C') he posat q es 0,02 pq la P(c=4 AND c=7)=0 => P(c=4 OR c=7)=1/100+1/100-0=0,02
- Es cierto, habia aplicado la formula a raja tabla sin pensar que el AND daba 0... muchas gracias

Ex 27

S - N - S - N
N - S - N - N
N - N - N - N

Ex 32

T1: R(A) R(B) W(B) | R(C) W(A)

T2: R(D) W(D) | R(A)

T3: R(B) W(B) | R(C)

T4: R(E) W(E) | R(A) R(D)

Ex 33

Checkpoint a los 9 segundos:

Temps: 16 = 9 (hasta el CheckPoint) + 5 (lo que sobra de las transacciones iniciadas) + 2 (de los flushes)

Flush: 2 (uno por cada conjunto de escrituras de un valor , osea, W(A).....W(A) = 1 Flush)

Fetch: 4 (uno por el primer read de cada valor)


CheckPoint a los 15 segundos:

Temps: 16 + 2 = 18 seg (el checkpoint en si no consume tiempo)

Flush: 2

Fetch: 4

Ex 34

SELECT dt.Any, d.RangID, p.Provincia, d.PoblacioID, AVG(d.Mossos)
FROM Destinacio d, Data dt, Poblacio p, Perfil pe
WHERE dt.ID = d.DataID AND p.Nom = d.PoblacioID AND pe.ID = d.PerfilID AND pe.Sexe = "masculí" dt.Any = "2003" AND d.RangID IN ('Caporal', 'Mosso') AND p.Provincia IN ('Barcelona', 'Lleida')
GROUP BY dt.any, CUBE(d.RangID), ROLLUP(p.Provincia,d.PoblacioID)
ORDER BY dt.Any, d.RangID, p.Provincia, d.PoblacioID

Ex 40

a.- 0
b.- 2 (files 1,3)
c.- 1 (fila 5)
d.- 2000 ((1000+2000+3000)/3)

Ex 41

ID(a) A ID(b) B ID(c) C ID(d) D
2 a2 ? ? 2 c2 2 d2
? ? ? ? ? ? 1 d1


Ex 48

C:
SELECT a.IdTiempo, a.IdHospital, a.IdEnfermedad, a.IdEnfermo, a.coste
FROM Admisiones a, Enfermos e
WHERE a.IdEnfermo = e.Id AND e.edad = "30-40"
ORDER BY a.IdTiempo, a.IdHospital, a.IdEnfermedad, a.IdEnfermo

F:
SELECT t.mes, a.IdHospital, a.IdEnfermedad, a.IdEnfermo, SUM(a.coste)
FROM Admisiones a, Tiempo t, Enfermedades es
WHERE a.idTiempo = t.Id AND a.IdEnfermedad = es.Id AND es.nombre = "SIDA"
GROUP BY t.mes, a.IdHospital, a.IdEnfermedad, a.IdEnfermo
ORDER BY t.mes, a.IdHospital, a.IdEnfermedad, a.IdEnfermo

J:
SELECT t.IdHospital, t.IdTiempo, t.IdMedico, SUM(a.coste), t.gastoRecetas
FROM Admisiones a, Turnos t
WHERE t.IdHospital = a.IdHospital AND t.IdTiempo = a.IdTiempo
GROUP BY t.IdHospital, t.IdTiempo, t.IdMedico
ORDER BY t.IdHospital, t.IdTiempo, t.IdMedico

N:
SELECT a.IdHospital, a.IdTiempo, a.IdEnfermedad, a.IdEnfermo, a.coste
FROM Turnos t, Admisiones a
WHERE t.IdMedico = "12345678" AND a.IdTiempo = t.IdTiempo AND a.IdHospital = t.IdHospital
ORDER BY a.IdHospital, a.IdTiempo, a.IdEnfermedad, a.IdEnfermo

Ex 49

SELECT dt.Any, pe.Sexe, p.Provincia, d.EspecialitatID, AVG(d.Mossos)
FROM Destinacio d, Data dt, Perfil pe, Poblacio p, Rang r
WHERE d.DataID = dt.ID AND d.PerfilID = pe.ID AND d.Poblacio = p.Nom AND d.RangId = r.Nom AND r.escala = "Bàsica" AND pe.Sexe= "Femení" AND p.Provincia IN('Barcelona','Lleida') AND d.EspecialitatID IN('TEDAX','Científica')
GROUP BY pe.Sexe, ROLLUP(dt.Any, p.Provincia, d.EspecialitatID)
ORDER BY dt.Any, pe.Sexe, p.Provincia, d.EspecialitatID

Ex 60

S - S - N - S
N - N - S - N
N - N - N - N

Ex 62

1- B+ en edat, tabla EMPLEATS ... 3458 Blocks

2- Cluster en edat, tabla EMPLEATS ... 4958 Blocks

3- Hash en nom, tabla EMPLEATS ... 3376 Blocks

4- B+ en nom, tabla EMPLEATS... 3458 Blocks

5- Cluster en e.dpt, tabla EMPLEATS ... 4958 Blocks

6- Cluster en d.id , tabla DEPARTAMENTS... 452 Blocks (el unico que podremos utilizar devido a los 4500 blocks)

7- Estructura Cluster en e.dpt y d.id ... 4545 Blocks

a) 3000

b) 1500

c) 9030

Promig) 3606

blocks) 3452

Ex 64

CheckPoint a los 9 segundos: Temps: 16 + 2 + T4 (el segundo checkpoint se ignora)

Flush: 3

Fetch: 4

CheckPoint a los 15 segundos:

Temps: 17 + 3 = 20 seg

Flush: 3

Fetch: 4

Ex 66

T1: R(A) R(B) W(B)

T2: R(D) W(D) | R(C)

T3: R(B) W(B) R(A) | R(C)

T4: R(E) W(E) | R(A) W(A) R(D)

Ex 70

T1: R(A) W(A) R(B) W(B) R(D) | R(C)

T2: R(D) W(D) R(E) | R(C)

T3: R(A) R(B) R(C) W(A) | R(E) W(E)

Ex 71

PRESTECS:
SELECT p.UsrId, p.LlibreId, p.TempsId, p.dies
FROM Prestecs p
ORDER BY p.UsrId, p.LlibreId, p.TempsId

A:Roll-up(Prestecs,Usuaris.edat,Sum)
SELECT u.edat, p.LlibreId, p.TempsId, SUM(p.dies)
FROM Prestecs p, Usuaris u
WHERE p.UsrId = u.Id
GROUP BY u.edat, p.LlibreId, p.TempsId
ORDER BY u.edat, p.LlibreId, p.TempsId

B:Seleccio(A,Usuaris.Edat="0-18")
SELECT u.edat, p.LlibreId, p.TempsId, SUM(p.dies)
FROM Prestecs p, Usuaris u
WHERE p.UsrId = u.Id AND u.edat = "0-18"
GROUP BY u.edat, p.LlibreId, p.TempsId
ORDER BY u.edat, p.LlibreId, p.TempsId

C:Roll-up(B,Temps.All,Sum)
SELECT u.edat, p.LlibreId, "All", SUM(p.dies)
FROM Prestecs p, Usuaris u, Temps t
WHERE p.UsrId = u.Id AND u.edat = "0-18" AND p.TempsId = t.Id
GROUP BY u.edat, p.LlibreId
ORDER BY u.edat, p.LlibreId

D:CanviBase(C,Llibres)
SELECT p.LlibreId, SUM(p.dies)
FROM Prestecs p, Usuaris u
WHERE p.UsrId = u.Id AND u.edat = "0-18"
GROUP BY p.LlibreId
ORDER BY p.LlibreId

E: Drill-across(D,compres)
SELECT c.LlibreId, c.proveidorId, SUM(p.dies),SUM(c.preu)
FROM Prestecs p, Usuaris u, Compres c
WHERE p.UsrId = u.Id AND u.edat = "0-18" AND c.LlibreId = p.LlibreId AND c.TempsId = p.TempsId
GROUP BY c.LlibreId, c.proveirdorId
ORDER BY c.LlibreId, c.proveirdorId

F: Projeccio(E,Preu)
SELECT c.LlibreId, c.proveidorId, SUM(c.preu)
FROM Prestecs p, Usuaris u, Compres c
WHERE p.UsrId = u.Id AND u.edat = "0-18" AND c.LlibreId = p.LlibreId AND c.TempsId = p.TempsId
GROUP BY c.LlibreId, c.proveirdorId
ORDER BY c.LlibreId, c.proveirdorId

G: Roll-up(F,Llibres.Any,Avg)
SELECT l.Any, c.proveidorId, AVG(c.preu)
FROM Prestecs p, Usuaris u, Compres c, Llibres l
WHERE p.UsrId = u.Id AND u.edat = "0-18" AND c.LlibreId = p.LlibreId AND c.TempsId = p.TempsId AND c.LlibreId = l.id
GROUP BY l.Any, c.proveirdorId
ORDER BY l.Any, c.proveirdorId

Ex 73

A:-> 2

B:-> 2

C:-> 0

D:-> 1000

Ex 74

ID(a) A ID(b) B ID(c) C ID(d) D
1 a1 ? b1 ? ? ? d1
2 ? ? ? ? ? ? d2

¿Estas segur que es així? A mi em dóna  ? ? ? ? ? ? 1 d1 i  ? ? ? ? ? ? 2 d2

Aixo és el que posa la correcció del profe ( però encara no ho he comprovat). Només es comprovar-ho amb el Oracle.

Ex 76

               ABCDEF
            |  F->ED   |
          FED         ABCF
                    |  B->A  |
                 BA          BCF
                         |  C->B  |
                         CB     CF

Ex 82

C:
SELECT u.edat, p.LlibreId, t.mes, AVG(p.dies)
FROM Prestecs p, Usuaris u, Temps t
WHERE p.UsrId = u.Id AND p.TempsId = t.Id AND t.mes = "Gener"
GROUP BY u.edat, p.LlibreId, t.mes
ORDER BY u.edat, p.LlibreId, t.mes

H:
SELECT l.Any, c.TempsId, c.ProveidorId, SUM(c.preu)
FROM Llibres l, Compres c
WHERE c.LlibreId = l.Id
GROUP BY l.Any, c.TempsId, c.ProveidorId
ORDER BY l.Any, c.TempsId, c.ProveidorId

N:
SELECT c.LlibreId, c.TempsId, c.ProveidorId, c.preu, c.#unitats
FROM Prestecs p, Compres c
WHERE p.UsrId = "Jordi" AND c.LlibreId = p.LlibreId AND p.TempsId = c.TempsId
ORDER BY c.LlibreId, c.TempsId, c.ProveidorId

S:
SELECT "All", l.Any, t.mes, S(c.preu), SUM(c.#unitats)
FROM Compres c, Temps t, Llibres l
WHERE c.TempsId = t.Id AND t.Any = "2004" AND c.LlibreId = l.Id
GROUP BY l.Any, t.mes
ORDER BY l.Any, t.mes

Ex 91

N - N - S - N

N - N - N - S

S - N - N - N

Ex 95

1 - Arbol (edat) - 3304

2 - Cluster (edat) - 4804

3 - Hash (edat) - 3251

4 - Arbol (nom) - 3304

5 - Hash (nom) - 3251

6 - Cluster (e.dpt) - 4804

7 - Cluster ( d.id) - 49 (el unico que podriamos utilizar, sin indice sale mas rapido )

8 - Estructura Cluster - (e.dpt,d.id) - 4545


Costes sin indice:

tiempo: 0,4Be + 0.4(2Be+2Bd +Be + Bd) + 0.2 (0.5Be) = 10590 seg/consulta (raro no?casi 3 horas)

espacio: Be + Bd = 3030


Costes con indice Cluster en d.id :

COSTE DE SM: 27045 (porque tenemos el cluster)

tiempo : 0.4Be + 0.4COSTE DE SM + 0.2 (0.5Be) ... no podemos utilizar la estructura cluster y tampoco el HJ..

tiempo : 12318 seg/consulta

espacio 3045 (nos comemos el cluster)


___07-08 Q1___

Ex 1

a)2

b)3

c)0

d)1000

Ex 2

id a id' b id' ' c id' ' ' d
1 a1 1 b1 ? ? 1 d1
? ? ? ? 2 c2 2 d2

Ex 13

             sou,nom_dept /_\
                           |
                           |
                          |x| dept
                         /   \_
                        /    /_\ codi_dept 
               ciutat |x|      \
                     /   \      D2
       ciutat_emp, _/     \_
       dept,      /_\     /_\ ciutat_dept
        sou       /         \
                 /           \

categoria='jefe' |\ |\ pressupost=200000

                |/           |/ 
                 |            |
                 |            |
                 E            D1


PROJECTION --> /_\


SELECTION --> |\

                 |/      

JOIN --> |x|


el projection que hi ha damunt de D2 no crec q estigui bé...

Ex 14

a)Cap

b)Cluster sobre categoria

c)B+ sobre nom_empl

d)Cluster sobre sou

No estarà bé... però és que crec q falten dades.

Ex 16

  a                                     b
  Cap: 15000seg                         Cap: 75seg
  B+: 103seg                            B+: 3seg
  C: 4.5seg                             Cl: 3seg
  H: ?? Pq 100 són masses repetits?     H: 2seg

Ex 17

a)

A=k1 AND D>k2 AND (NOT C<>k3 OR NOT B=k4) AND (NOT C<>k3 OR NOT A<k5)

b)

(A=k1 OR B=k3 OR C=k5) AND (A=k1 OR D>k4 OR C=k5) AND (B<>k2 OR B=k3 OR C=k5) AND (B<>k2 OR D>k4 OR C=k5)  

Ex 35

a)1

b)1

c)2

d)1200

Ex 36

id a id' b id' ' c id' ' ' d
2 a2 ? ? 2 c2 2 d2
? ? ? ? ? ? 1 d1
Herramientas personales
Espacios de nombres
Variantes
Acciones
Navegación
FIB / ETSETB
Herramientas