Instrumentación Hoy_ INTERPRETAR EL DIAGRAMA UNIFILAR GENERAL DE UNA PLANTA I...
Base de datos: Algebra relacional
1. Servicios Web - IntroducciónDiseño de bases de datos – Algebra relacional
Bases de
Datos
Algebra relacional
Agosto 2014
2. Servicios Web - IntroducciónDiseño de bases de datos – Algebra relacional
Algebra relacional
• Operaciones realizadas sobre las relaciones (tablas).
• Cierre relacional: Tanto los operandos como el resultado, son
tablas.
– El resultado de una operación puede ser operando de otra operación.
2
3. Servicios Web - IntroducciónDiseño de bases de datos – Algebra relacional
Tipos de operaciones
• Según se expresan (o no) en términos de otras operaciones.
– Operaciones primitivas.
• Operaciones a partir de las cuales se pueden definir otras.
• Ej: Unión, diferencia, producto cartesiano, selección y proyección.
– Operaciones no primitivas.
• No son estrictamente necesarias (se pueden expresar en términos de las
primitivas).
• Facilitan.
• Ej: Intersección y combinación.
3
4. Servicios Web - IntroducciónDiseño de bases de datos – Algebra relacional
• Según el número de tablas que tienen como operandos:
– Operaciones binarias.
• Tienen dos tablas como operandos.
– Operaciones unarias.
• Tienen una sola tabla como operando.
• Selección y proyección.
4
5. Servicios Web - IntroducciónDiseño de bases de datos – Algebra relacional
• Según si se parecen a la teoría de conjuntos:
– Operaciones conjuntistas.
• Unión, intersección, diferencia, producto cartesiano.
– Operaciones específicamente relacionales.
• Selección, proyección y combinación.
5
6. Servicios Web - IntroducciónDiseño de bases de datos – Algebra relacional
• El nombre del resultado de una operación se puede expresar:
– Como los operandos junto con su operador: EMPLEADOS_ADM ∪
EMPLEADOS_PROD
– Usando un alias (operación redenominar).
• R:=Expresión
• Ej: Empleados := EMPLEADOS_ADM ∪ EMPLEADOS_PROD
• Redenominar también se puede aplicar sobre atributos y
sobre el esquema de una relación.
6
7. Servicios Web - IntroducciónDiseño de bases de datos – Algebra relacional
• Si S(B1, B2, ..., Bn) y se quiere redenominar por R(A1, A2, ..., An):
R(A1, A2, ..., An) := S(B1, B2, ..., Bn).
7
8. Servicios Web - IntroducciónDiseño de bases de datos – Algebra relacional
Operaciones conjuntistas
• Unión.
– A partir de dos tablas obtiene una nueva con las tuplas que estén en
alguna de esas tablas.
– Unión entre T y S: T ∪ S.
8
9. Servicios Web - IntroducciónDiseño de bases de datos – Algebra relacional
Operaciones conjuntistas
• Unión.
– A partir de dos tablas obtiene una nueva con las tuplas que estén en
alguna de esas tablas.
– Unión entre T y S: T ∪ S.
– Sólo tiene sentido unir tablas con tuplas semejantes.
– Dos tablas T y S son compatibles si:
• Tienen el mismo grado.
• Si para cada atributo Ai de T hay un atributo correspondiente Aj en S, coincidiendo
Ai y Aj con un mismo dominio.
9
10. Servicios Web - IntroducciónDiseño de bases de datos – Algebra relacional
10
11. Servicios Web - IntroducciónDiseño de bases de datos – Algebra relacional
• Esquema y extensión resultantes de una unión:
– Esquema: Al unir T con S, el esquema resultante tiene los atributos de
T.
– Extensión: Conjunto de tuplas que pertenecen a la extensión T y S.
• No repetición de tuplas.
11
12. Servicios Web - IntroducciónDiseño de bases de datos – Algebra relacional
• R := EMPLEADOS_ADM ∪ EMPLEADOS_PROD
12
13. Servicios Web - IntroducciónDiseño de bases de datos – Algebra relacional
13
14. Servicios Web - IntroducciónDiseño de bases de datos – Algebra relacional
• Intersección
– A partir de dos tablas obtiene una nueva formada con las tuplas que
pertenecen a ambas.
– Entre T y S se indica como T ∩ S.
– Ej: EMPLEADOS_ADM ∩ EMPLEADOS_PROD.
– Es necesario que las tablas sean compatibles.
14
15. Servicios Web - IntroducciónDiseño de bases de datos – Algebra relacional
• Esquema y extensión:
– Los atributos del esquema T ∩ S coinciden con los atributos de T.
– La extensión de T ∩ S es el conjunto de tuplas que pertenecen a la
extensión de T y S.
15
16. Servicios Web - IntroducciónDiseño de bases de datos – Algebra relacional
• R := EMPLEADOS_ADM ∩ EMPLEADOS_PROD.
16
17. Servicios Web - IntroducciónDiseño de bases de datos – Algebra relacional
• R := EMPLEADOS_ADM ∩ EMPLEADOS_PROD.
17
18. Servicios Web - IntroducciónDiseño de bases de datos – Algebra relacional
• Diferencia.
– A partir de dos tablas, se obtiene una nueva donde las tuplas de la
primera no están en la segunda.
– Entre T y S se indica como T – S.
– Ej: EMPLEADOS_ADM – EMPLEADOS_PROD.
– Aplica a tuplas similares entre tablas compatibles.
18
19. Servicios Web - IntroducciónDiseño de bases de datos – Algebra relacional
• Esquema y extensión:
– Los atributos del esquema resultante de T – S, coinciden con los
atributos de T.
– La extensión resultante de T – S son las tuplas que pertenecen a T pero
que no están en S.
19
20. Servicios Web - IntroducciónDiseño de bases de datos – Algebra relacional
• R := EMPLEADOS_ADM – EMPLEADOS_PROD.
20
21. Servicios Web - IntroducciónDiseño de bases de datos – Algebra relacional
• R := EMPLEADOS_ADM – EMPLEADOS_PROD.
21
22. Servicios Web - IntroducciónDiseño de bases de datos – Algebra relacional
• Producto cartesiano.
– A partir de dos tablas se obtiene una nueva conformada por las tuplas
que resultan de concatenar las tuplas de la primera con la segunda.
– Siendo dos tablas T y S, sus esquemas no tienen un nombre de
atributo común, su producto cartesiano se indica como T × S.
• Atributos con mismo nombre: redenominar.
– La nueva tabla contiene todas las concatenaciones posibles de tuplas
entre las dos tablas T y S.
22
23. Servicios Web - IntroducciónDiseño de bases de datos – Algebra relacional
• Esquema y extensión:
– Los atributos del esquema de T × S, son todos los atributos de T y
todos los de S.
• Redenominar, si es necesario.
– La extensión de T × S son todas las tuplas <v1, v2, ..., vn, w1, w2, ..., wm>
para las que <v1, v2, ..., vn> pertenecen a la extensión de T y < w1, w2,
..., wm> pertenecen a la extensión de S.
23
24. Servicios Web - IntroducciónDiseño de bases de datos – Algebra relacional
• Ej: Producto cartesiano entre DESPACHOS y EDIFICIOS_EMP.
• Redenominar:
– EDIFICIOS(nombreedificio, supmediadesp) := EDICIOS_EMP(edificio,
supmediadesp)
R :=EDIFICIOS ×DESPACHOS.
24
25. Servicios Web - IntroducciónDiseño de bases de datos – Algebra relacional
• R :=EDIFICIOS ×DESPACHOS.
25
EDIFICIOS
nombreedificio supmediadesp
Marina 15
Diagonal 10
26. Servicios Web - IntroducciónDiseño de bases de datos – Algebra relacional
26
27. Servicios Web - IntroducciónDiseño de bases de datos – Algebra relacional
• El producto cartesiano rara vez se utiliza de forma explícita, no
es muy común para consultas habituales.
• Pero: a partir de esta operación primitiva, se define la de
combinación.
27
28. Servicios Web - IntroducciónDiseño de bases de datos – Algebra relacional
Operaciones sobre relaciones
• Selección
• Proyección
• Combinación
28
29. Servicios Web - IntroducciónDiseño de bases de datos – Algebra relacional
• Selección:
– Operación para elegir un subconjunto de tuplas dentro de una tabla,
que cumplan una serie de condiciones específicas.
– Es una operación unaria.
– La selección sobre una tabla T bajo una condición C se expresa como
T(C).
29
30. Servicios Web - IntroducciónDiseño de bases de datos – Algebra relacional
• Ej: seleccionar todos los despachos del edificio Marina que
tengan más de 12 m2.
– Selección a DESPACHOS.
– Condición edificio = “ Marina “ y superficie > 12.
DESPACHOS(edificio= “ Marina “ y superficie> 12).
30
31. Servicios Web - IntroducciónDiseño de bases de datos – Algebra relacional
• La condición sigue la forma:
– Ai θ v ó Ai θ Aj.
– donde Ai y Aj son atributos (bajo un mismo dominio),
– v es un valor especificado (del dominio de ese atributo) y
– θ es un operador de comparación (=,!=, <,<=,>,>=).
• Las cláusulas de una condición se unen con “ y “ (∧) u “ o “ (∨).
31
32. Servicios Web - IntroducciónDiseño de bases de datos – Algebra relacional
• Esquema y extensión:
– Los atributos del esquema para T(C) coinciden con los atributos del
esquema de T.
– La extensión de T(C) es el conjunto de tuplas de la extensión de T que
cumplen la condición C.
32
33. Servicios Web - IntroducciónDiseño de bases de datos – Algebra relacional
• R := DESPACHOS(edificio = “Marina” y superficie >12)
33
34. Servicios Web - IntroducciónDiseño de bases de datos – Algebra relacional
• R := DESPACHOS(edificio = “Marina” y superficie >12)
34
35. Servicios Web - IntroducciónDiseño de bases de datos – Algebra relacional
• Proyección
– Operación para elegir un subconjunto de atributos de una tabla.
– La nueva tabla contará con tuplas cuyos atributos serán los
seleccionados.
– Es una operación unaria.
– La proyección de una tabla T sobre sus atributos {Ai, Aj, ..., Ak} se
indica como T[Ai, Aj, ..., Ak].
35
36. Servicios Web - IntroducciónDiseño de bases de datos – Algebra relacional
• Ej: Proyección sobre EMPLEADOS_ADM enfocado a los
atributos nombre y apellido.
• EMPLEADOS_ADM[nombre, apellido]
36
37. Servicios Web - IntroducciónDiseño de bases de datos – Algebra relacional
• Esquema y extensión:
– Los atributos del esquema resultante de T[Ai, Aj, ..., Ak] son los
atributos {Ai, Aj, ..., Ak}
– La extensión resultante de T[Ai, Aj, ..., Ak] es el conjunto de tuplas de la
forma <t.Ai, t.Aj, ..., t.Ak> donde se cumple que t es una tupla de la
extensión de T y t.Ap indica el valor para el atributo Ap de la tupla t.
37
38. Servicios Web - IntroducciónDiseño de bases de datos – Algebra relacional
• Ej: R:= EMPLEADOS_ADM[nombre, apellido]
38
39. Servicios Web - IntroducciónDiseño de bases de datos – Algebra relacional
• Ej: R:= EMPLEADOS_ADM[nombre, apellido]
39
40. Servicios Web - IntroducciónDiseño de bases de datos – Algebra relacional
• Combinación:
– A partir de dos tablas se obtiene una nueva formada con las tuplas
que resultan de concatenar tuplas de la primera con la segunda tabla,
cumpliendo una condición de combinación específica.
– Es una operación binaria.
– Sean las tablas T y S, cuyos esquemas no tienen nombres de atributo
en común y siendo C una condición de combinación, la combinación
de T y S bajo la condición C se indica como T[C]S.
40
41. Servicios Web - IntroducciónDiseño de bases de datos – Algebra relacional
• Ej: Combinar los datos de los empleados y el despacho donde
trabajan.
– Tablas: EMPLEADOS_ADM y DESPACHOS.
– Condición de combinación: combinar los datos de un empleado con
un despacho si el edificiodesp y numdesp del empleado es igual al
edificio y número del despacho.
EMPLEADOS_ADM[edificiodesp=edificio, numerodesp= numero]DESPACHOS
41
42. Servicios Web - IntroducciónDiseño de bases de datos – Algebra relacional
• La condición C de T[C]S se conforma por una o más
comparaciones de la forma:
Ai θ Aj
• donde:
– Ai es un atributo de T,
– Aj es un atributo de S,
– θ es un operador de comparación.
– Ai y Aj tienen el mismo dominio.
42
43. Servicios Web - IntroducciónDiseño de bases de datos – Algebra relacional
• Esquema y extensión:
– Los atributos de T[C]S son todos los atributos de T y todos los de S.
– La extensión de T[C]S es el conjunto de tuplas que pertenecen a la
extensión del plano cartesiano T × S que satisfacen todas
comparaciones de las condiciones de combinación C.
43
44. Servicios Web - IntroducciónDiseño de bases de datos – Algebra relacional
• Ej: Encontrar los datos de los despachos con una superficie
mayor o igual a la superficie media (supmediadesp) de los
despachos del edificio donde se ubican.
– Redenominar:
EDIFICIOS(nombreeedficio,supmediadesp):=EDIFICIOS_EMP(edificio, supmediadesp)
R:=EDIFICIOS[nombreedificio=edificio,supmediadesp ≤superficie] DESPACHOS
44
45. Servicios Web - IntroducciónDiseño de bases de datos – Algebra relacional
R:=EDIFICIOS[nombreedificio=edificio,supmediadesp ≤superficie] DESPACHOS
45
EDIFICIOS
nombreedificio supmediadesp
Marina 15
Diagonal 10
46. Servicios Web - IntroducciónDiseño de bases de datos – Algebra relacional
R:=EDIFICIOS[nombreedificio=edificio,supmediadesp ≤superficie] DESPACHOS
46
47. Servicios Web - IntroducciónDiseño de bases de datos – Algebra relacional
R:=EMPLEADOS_ADM[edificiodesp=edificio,númerodesp=número]DESPACHOS
47
48. Servicios Web - IntroducciónDiseño de bases de datos – Algebra relacional
R:=EMPLEADOS_ADM[edificiodesp=edificio,númerodesp=número]DESPACHOS
48
49. Servicios Web - IntroducciónDiseño de bases de datos – Algebra relacional
• Combinación natural:
– Combinación entre dos tablas T y S, representada como T *S.
– Consiste en una combinación donde todas las operaciones de
comparación son de igualdad (“=“), a la que se le eliminan los
atributos superfluos.
• La condición de combinación de igualdad «iguala» las parejas de atributos comunes
entre T y S.
– Se aplica a combinaciones con nombres de atributos comunes.
– Se puede aplicar redenominación, para hacer coincidir los nombres de
atributos que interesan.
49
50. Servicios Web - IntroducciónDiseño de bases de datos – Algebra relacional
• Ej: R := EDIFICIOS_EMP * DESPACHOS
• Se considera la condición edificio = edificio.
– Nombres de atributos comunes.
50
51. Servicios Web - IntroducciónDiseño de bases de datos – Algebra relacional
• Ej: R := EDIFICIOS_EMP * DESPACHOS
51
52. Servicios Web - IntroducciónDiseño de bases de datos – Algebra relacional
• Ej: Obtener los datos de los empleados administrativos junto
con los datos del despacho donde trabajan.
– Sin repetir valores de atributos superfluos.
52
53. Servicios Web - IntroducciónDiseño de bases de datos – Algebra relacional
– Redenominar:
D(edificiodesp,númerodesp,superficie):=DESPACHOS(edificio,número,superficie)
– Combinación natural:
R := EMPLEADOS_ADM *D
53
54. Servicios Web - IntroducciónDiseño de bases de datos – Algebra relacional
Otra nomenclatura
• Selección: σ<condicion>(<tabla>)
• Ej:
σSalario>3000(EMPLEADO)
σND=4 and Salario>3000(EMPLEADO)
σnot (ND=4 and Salario >3000)(EMPLEADO)
54
55. Servicios Web - IntroducciónDiseño de bases de datos – Algebra relacional
• Proyección: Π<lista_atributos>(<relacion>)
• Ej:
Πnombre, dirección(FABRICA)
Πdesc(PRODUCTO)
55
56. Servicios Web - IntroducciónDiseño de bases de datos – Algebra relacional
• Combinación (join):
(<relacion>) |><| <condición> (<relacion>)
– Es equivalente a: σ condición(R x S)
56
57. Servicios Web - IntroducciónDiseño de bases de datos – Algebra relacional
Secuencia de operaciones de
algebra relacional
• Generalmente es preciso realizar varias operaciones.
– Utilizar una sola expresión que incluya todas las operaciones,
agrupando por paréntesis.
– Dividir la expresión en etapas, donde cada etapa realice una sola
operación y la tabla resultante es usada en las etapas siguientes.
57
58. Servicios Web - IntroducciónDiseño de bases de datos – Algebra relacional
• Ej: Obtener el nombre y apellido de los empleados
(administrativos y de producción).
– 1. Unir EMPLEADOS_ADM y EMPLEADOS_PROD.
– 2. Proyección sobre atributos nombre y apellido.
58
59. Servicios Web - IntroducciónDiseño de bases de datos – Algebra relacional
• Ej: Obtener el nombre y apellido de los empleados
(administrativos y de producción).
– 1. Unir EMPLEADOS_ADM y EMPLEADOS_PROD.
– 2. Proyección sobre atributos nombre y apellido.
• Usando una sola expresión:
– R := (EMPLEADOS_ADM ∪ EMPLEADOS_PROD) [nombre, apellido]
• Mediante etapas:
– EMPS := EMPLEADOS_ADM ∪ EMPLEADOS_PROD
– R := EMPS[nombre, apellido]
59
60. Servicios Web - IntroducciónDiseño de bases de datos – Algebra relacional
Ejercicios
• 1. Obtener el nombre del edificio y el número de los
despachos situados en edificios en los que la superficie media
de estos despachos es mayor que 12.
60
61. Servicios Web - IntroducciónDiseño de bases de datos – Algebra relacional
• 1. Obtener el nombre del edificio y el número de los
despachos situados en edificios en los que la superficie media
de estos despachos es mayor que 12.
• A:= EDIFICIOS_EMP(supmediadesp> 12)
• B := DESPACHOS *A
• R := B[edificio, número]
61
62. Servicios Web - IntroducciónDiseño de bases de datos – Algebra relacional
• 2. Obtener el nombre y apellido de todos los empleados
(administrativos y de producción) que están asignados al
despacho 120 del edificio Marina.
62
63. Servicios Web - IntroducciónDiseño de bases de datos – Algebra relacional
• 2. Obtener el nombre y apellido de todos los empleados
(administrativos y de producción) que están asignados al
despacho 120 del edificio Marina.
• A:= EMPLEADOS_ADM ∪ EMPLEADOS_PROD
• B:= A(edificiodesp= «Marina» y númerodesp= 120)
• R:= B[nombre, apellido]
63
64. Servicios Web - IntroducciónDiseño de bases de datos – Algebra relacional
• 3. Consultar el nombre del edificio y el número de los
despachos que ningún empleado de administración tiene
asignado.
64
65. Servicios Web - IntroducciónDiseño de bases de datos – Algebra relacional
• 3. Consultar el nombre del edificio y el número de los
despachos que ningún empleado de administración tiene
asignado.
• A:= DESPACHOS [edificio, número]
• B:= EMPLEADOS_ADM[edificiodesp, númerodesp]
• R:= A – B
65
66. Servicios Web - IntroducciónDiseño de bases de datos – Algebra relacional
• Obtener el DNI, el nombre y el apellido de todos los
empleados de administración que tienen despacho, junto con
la superficie de su despacho.
66
67. Servicios Web - IntroducciónDiseño de bases de datos – Algebra relacional
• Obtener el DNI, el nombre y el apellido de todos los
empleados de administración que tienen despacho, junto con
la superficie de su despacho.
• A[DNI,nombre,apellido,edificio,número] :=
EMPLEADOS_ADM[DNI, nombre, apellido, edificiodesp,
númerodesp]
• B := A *DESPACHOS
• R := B[DNI, nombre, apellido, superficie]
67
68. Servicios Web - IntroducciónDiseño de bases de datos – Algebra relacional
• Combinación externa.
– Cuando se efectúa una combinación puede haber casos en que existan
tuplas con valor nulo en la condición de combinación, por lo que no
serían tomadas en cuenta.
– También puede haber tuplas en algunas de las tablas, que no tengan
un elemento con el cual cumplir la condición de combinación y
tampoco serían tomadas en cuenta.
– Si se requiere conservar las tuplas de alguna de las dos tablas que
caigan en estas situaciones, se puede recurrir a la combinación
externa.
68
69. Servicios Web - IntroducciónDiseño de bases de datos – Algebra relacional
• La combinación externa entre T y S es una variación de la
combinación que conserva todas las tuplas de T, de S o de
ambas.
– Combinación externa izquierda. Entre T y S, denotada como T[C]IS,
conserva todas las tuplas de T.
– Combinación externa derecha. Entre T y S, denotada como T[C]DS,
conserva todas las tuplas de S.
– Combinación externa plena. Entre T y S, denotada como T[C]PS,
conserva todas las tuplas de T y de S.
69
70. Servicios Web - IntroducciónDiseño de bases de datos – Algebra relacional
– Combinación natural externa izquierda. Entre T y S, denotada como
T*IS, conserva todas las tuplas de T.
– Combinación natural externa derecha. Entre T y S, denotada como
T*DS, conserva todas las tuplas de S.
– Combinación natural externa plena. Entre T y S, denotada como T*PS,
conserva todas las tuplas de T y de S.
• **Las tuplas en R que no satisfacen la condición de
combinación, tienen valor nulo para los atributos de la tabla
con la que no tienen correspondencia.
70
71. Servicios Web - IntroducciónDiseño de bases de datos – Algebra relacional
• Ej. Combinación natural externa derecha.
D(edificiodesp, númerodesp, superficie) :=
DESPACHOS (edificio, número, superficie)
R := EMPLADOS_PROD *DD
71
72. Servicios Web - IntroducciónDiseño de bases de datos – Algebra relacional
• Ej. Combinación natural externa derecha.
D(edificiodesp, númerodesp, superficie) :=
DESPACHOS (edificio, número, superficie)
R := EMPLADOS_PROD *DD
72
73. Servicios Web - IntroducciónDiseño de bases de datos – Algebra relacional
• Ej. Combinación natural externa izquierda.
D(edificiodesp, númerodesp, superficie) :=
DESPACHOS (edificio, número, superficie)
R := EMPLADOS_PROD *ID
73
74. Servicios Web - IntroducciónDiseño de bases de datos – Algebra relacional
• Ej. Combinación natural externa izquierda.
D(edificiodesp, númerodesp, superficie) :=
DESPACHOS (edificio, número, superficie)
R := EMPLADOS_PROD *ID
74
75. Servicios Web - IntroducciónDiseño de bases de datos – Algebra relacional
• Ej. Combinación natural externa plena.
D(edificiodesp, númerodesp, superficie) :=
DESPACHOS (edificio, número, superficie)
R := EMPLADOS_PROD *PD
75
76. Servicios Web - IntroducciónDiseño de bases de datos – Algebra relacional
• Ej. Combinación natural externa plena.
D(edificiodesp, númerodesp, superficie) :=
DESPACHOS (edificio, número, superficie)
R := EMPLADOS_PROD *PD
76
77. Servicios Web - IntroducciónDiseño de bases de datos – Algebra relacional
Ejercicio
• Alumno(cve_alumno, nombre_alumno, semestre, carrera)
• Materia(cve,creditos,m_carrera,semestre, nombre_mat)
• Lista(cve_materia,num_grupo,cve_alum,calif,oportunidad)
• Grupo(cve_mat,num_gpo,salon,horario,cve_prof)
• Profesor(cve_profesor,nombre_prof,grado)
• ¿Nombre del alumno con su horario?
• ¿Profesores que dan clase?
• ¿Nombre del alumno y las carreras de las materias que no son
de su carrera?
77
78. Servicios Web - IntroducciónDiseño de bases de datos – Algebra relacional
• Π ((σ(Alumno)|><|Lista)|><|Grupo)
• Π (Profesor|><|Grupo)
• Π ((Alumno|><|Lista)|><|Materia)
78
nombre_alumno,
horario
cve_alumno=cve_alum cve_materia=cve_mat and
num_grupo=num_gpo
nombre_prof cve_profesor=cve_prof
nombre_alumno
m_carrera
cve_alumno=cve_alum carrera!=m_carrera and
cve_materia=cve
79. Servicios Web - IntroducciónDiseño de bases de datos – Algebra relacional
Referencias
• Chris J. Date, An introduction to database system, Addison Wesley.
• Costal Costa D., El modelo relacional y el álgebra relacional, UOC, GNU
Free Document License, 2007.
• Marqués Mercedes, Bases de datos, Universitat Jaume I, ISBN: 978-84-
693-0146-3, Licencia Creative Commons, 2011.
79