DABD Exercicis
Exercicis resolts de DABD
Instruccions
- Autor -> Per diferenciar varies possibles solucions a un mateix problema
- Correcció -> Si l’exercici es d’algun quadrimestre anterior i ha estat corregit pel professor amb un “Bé” poseu CORREGIT. En canvi, si el professor en comptes d’un “Bé” ha posat alguna anotació, a partir de la qual heu refet l’exercici, poseu MIG CORREGIT. Pel contrari, si heu començat l’exercici de nou, poseu NO CORREGIT.
- Resultat -> Poseu el resultat de l’exercici
- Comentaris -> Qualsevol comentari sobre l’exercici : explicació de la solució, possibles paranys on es sol caure, trucs per resoldre’l, regles mnemotècniques, etc.
Plantilla
==num_exercici==
*'''AUTOR''':
*'''CORRECCIÓ''':
*'''RESULTAT''':
*'''COMENTARIS''':
Ex 1
- AUTOR: Vanessa
- CORRECCIÓ: Corregit (Oracle)
- RESULTAT:
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
- COMENTARIS: Corregit amb Oracle
Ex 13
- AUTOR: Vanessa
- CORRECCIÓ: No corregit
- RESULTAT:
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
- COMENTARIS:
Ex 14
- AUTOR: Vanessa
- CORRECCIÓ: No corregit
- RESULTAT:
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
- COMENTARIS:
Ex 26
- AUTOR: David G.G.
- CORRECCIÓ: No corregit
- RESULTAT:
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
- COMENTARIS:
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
- AUTOR: Vanessa
- CORRECCIÓ: No corregit
- RESULTAT:
S - N - S - N
N - S - N - N
N - N - N - N
- COMENTARIS:
Ex 32
- AUTOR:Tiago
- CORRECCIÓ: No corregit
- RESULTAT:
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)
- COMENTARIS:
Ex 33
- AUTOR:Tiago
- CORRECCIÓ: No corregit
- RESULTAT:
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
- COMENTARIS:
Ex 34
- AUTOR: Vanessa
- CORRECCIÓ: No corregit
- RESULTAT:
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
- COMENTARIS:
Ex 40
- AUTOR: Vanessa
- CORRECCIÓ: Corregit (Oracle)
- RESULTAT:
a.- 0
b.- 2 (files 1,3)
c.- 1 (fila 5)
d.- 2000 ((1000+2000+3000)/3)
- COMENTARIS: Corregit amb Oracle
Ex 41
- AUTOR:Simpsonmatrix
- CORRECCIÓ:Corregit (Oracle)
- RESULTAT:
| ID(a) | A | ID(b) | B | ID(c) | C | ID(d) | D |
| 2 | a2 | ? | ? | 2 | c2 | 2 | d2 |
| ? | ? | ? | ? | ? | ? | 1 | d1 |
- COMENTARIS: No oblidar-se cap dels ID. Els "?" son NULL.
Ex 48
- AUTOR: Vanessa
- CORRECCIÓ: No corregit
- RESULTAT:
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
- COMENTARIS:
Ex 49
- AUTOR: Vanessa
- CORRECCIÓ: No corregit
- RESULTAT:
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
- COMENTARIS:
Ex 60
- AUTOR: Vanessa
- CORRECCIÓ: No corregit
- RESULTAT:
S - S - N - S
N - N - S - N
N - N - N - N
- COMENTARIS:
Ex 62
- AUTOR: Tiago
- CORRECCIÓ: No corregit
- RESULTAT:
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
- COMENTARIS:
Ex 64
- AUTOR: Tiago
- CORRECCIÓ:?
- RESULTAT:
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
- COMENTARIS:
Ex 66
- AUTOR: Tiago
- CORRECCIÓ:?
- RESULTAT:
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)
- COMENTARIS:
Ex 70
- AUTOR: Tiago
- CORRECCIÓ:?
- RESULTAT:
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)
- COMENTARIS:
Ex 71
- AUTOR:Vanessa
- CORRECCIÓ: No corregit
- RESULTAT:
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
- COMENTARIS:
Ex 73
- AUTOR: Simpsonmatrix
- CORRECCIÓ: Corregit
- RESULTAT:
A:-> 2
B:-> 2
C:-> 0
D:-> 1000
- COMENTARIS:
Ex 74
- AUTOR:Simpsonmatrix
- CORRECCIÓ: Mig Corregit
- RESULTAT:
| ID(a) | A | ID(b) | B | ID(c) | C | ID(d) | D |
| 1 | a1 | ? | b1 | ? | ? | ? | d1 |
| 2 | ? | ? | ? | ? | ? | ? | d2 |
- COMENTARIS: No oblidar-se cap dels ID. Els "?" son NULL.
¿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
- AUTOR:Simpsonmatrix
- CORRECCIÓ:Corregit
- RESULTAT:
ABCDEF
| F->ED |
FED ABCF
| B->A |
BA BCF
| C->B |
CB CF
- COMENTARIS: Les "|" volen dir Fletxes. I la negreta, vol dir Clau Candidata
Ex 82
- AUTOR: Vanessa
- CORRECCIÓ: No corregit
- RESULTAT:
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
- COMENTARIS:
Ex 91
- AUTOR: Simpsonmatrix
- CORRECCIÓ: Corregit
- RESULTAT:
N - N - S - N
N - N - N - S
S - N - N - N
- COMENTARIS:
Ex 95
- AUTOR: Tiago
- CORRECCIÓ: No corregit
- RESULTAT:
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)
- COMENTARIS:
___07-08 Q1___
Ex 1
- AUTOR: claudia
- CORRECCIÓ: nop
- RESULTAT:
a)2
b)3
c)0
d)1000
- COMENTARIS:
Ex 2
- AUTOR: Clàudia
- CORRECCIÓ: no
- RESULTAT:
| id | a | id' | b | id' ' | c | id' ' ' | d |
| 1 | a1 | 1 | b1 | ? | ? | 1 | d1 |
| ? | ? | ? | ? | 2 | c2 | 2 | d2 |
- COMENTARIS:
Ex 13
- AUTOR: Clàudia
- CORRECCIÓ: no
- RESULTAT:
sou,nom_dept /_\
|
|
|x| dept
/ \_
/ /_\ codi_dept
ciutat |x| \
/ \ D2
ciutat_emp, _/ \_
dept, /_\ /_\ ciutat_dept
sou / \
/ \
categoria='jefe' |\ |\ pressupost=200000
|/ |/
| |
| |
E D1
- LLEGENDA:
PROJECTION --> /_\
SELECTION --> |\
|/
JOIN --> |x|
- COMENTARIS:
el projection que hi ha damunt de D2 no crec q estigui bé...
Ex 14
- AUTOR: claudia
- CORRECCIÓ: nop
- RESULTAT:
a)Cap
b)Cluster sobre categoria
c)B+ sobre nom_empl
d)Cluster sobre sou
- COMENTARIS:
No estarà bé... però és que crec q falten dades.
Ex 16
- AUTOR: claudia
- CORRECCIÓ: no
- RESULTAT:
a b Cap: 15000seg Cap: 75seg B+: 103seg B+: 3seg C: 4.5seg Cl: 3seg H: ?? Pq 100 són masses repetits? H: 2seg
- COMENTARIS:
Ex 17
- AUTOR: claudia
- CORRECCIÓ: no
- RESULTAT:
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)
- COMENTARIS: no està acabat
Ex 35
- AUTOR: claudia
- CORRECCIÓ: no
- RESULTAT:
a)1
b)1
c)2
d)1200
- COMENTARIS:
Ex 36
- AUTOR: Clàudia
- CORRECCIÓ: no
- RESULTAT:
| id | a | id' | b | id' ' | c | id' ' ' | d |
| 2 | a2 | ? | ? | 2 | c2 | 2 | d2 |
| ? | ? | ? | ? | ? | ? | 1 | d1 |
- COMENTARIS: