Tema II: El modelo relacional de datos (2.1) El modelo relacional de datos. Objetivos: conocer las estructuras de datos del modelo: la tupla y la relación. conocer básicamente la forma de modelar la realidad utilizando el modelo relacional. conocer los mecanismos del modelo relacional para expresar restricciones de integridad. conocer los lenguajes de manipulación propuestos para este modelo de datos: Álgebra Relacional y Cálculo Relacional de Tuplas. 1 El modelo relacional de datos. 2.1 Modelo relacional de datos (Aproximación algebraica). – 2.1.1 Estructuras de datos: tupla, relación. – 2.1.2 Operadores asociados a la estructura relación: Álgebra Relacional. 2.2 Esquema relacional: representación de la realidad. 2.3 Modelo relacional de datos (Aproximación lógica) – 2.3.1 Interpretación lógica de una base de datos relacional. – 2.3.2 Cálculo Relacional de Tuplas. 2.4 Restricciones de integridad. El modelo relacional de datos. Bibliografía: “Bases de datos relacionales”, M. Celma, J.C. Casamayor, L. Mota, Pearson Educación, S. A., Madrid, 2003 ISBN: 84-205-3850-7 Tema II Capítulo 3 2 Introducción al modelo relacional 70’s: Propuesto por E. Codd en 1970 80’s: Se populariza en la práctica (Oracle, ...). ANSI define el estándar SQL (Structured Query Language) . 90’s: Generalización y estandarización (SQL’92) y Extensiones Razones del éxito: Sencillez: una base de datos es “un conjunto de tablas”. Carácter declarativo de su lenguaje de manipulación Introducción al modelo relacional MRD = Estructuras de datos + Operadores asociados dominios Estructuras de datos comunes: atributos tupla relación Dos Grandes Familias de Operadores: 3 Introducción al modelo relacional: Terminología Estructuras de datos Terminología Corriente (informática) Terminología MRD (matemática) Tipos de Datos Dominios Campos / Columnas Atributos Registros / Filas Tupla Tabla Relación ¡No son exactamente equivalentes! El modelo relacional de datos. 2.1. Modelo relacional de datos (Aproximación algebraica) 4 2.1.1 Estructuras de datos: tupla, relación 2.1.1 Estructuras de datos: tupla, relación 2.1.1 Estructuras de datos: tupla, relación. Tupla: tupla registro Un esquema de tupla τ es un conjunto de pares de la forma: τ = {(A1, D1), (A2, D2),…, (An, Dn)} Una tupla de esquema τ= {(A1, D1), (A2, D2),…, (An, Dn)} es un conjunto de pares (nombre_atributo, valor) de la forma: t = {(A1, v1), (A2, v2),…, (An, vn)} tal que ∀i vi ∈ Di 5 2.1.1 Estructuras de datos: tupla, relación Operadores de la estructura tupla: Consultar el valor de un atributo de una tupla: Consultar (t, Ai) t.Ai t(Ai) Asignar un valor a un atributo de una tupla: Asignar (t, Ai, wi) t.Ai ← wi t(Ai) ← wi 2.1.1 Estructuras de datos: tupla, relación Ejemplo: Dominios: dom_dni: entero dom_nom: cadena (20) dom_dir: cadena (15) Esquema de tupla: Persona = {(dni, dom_dni), (nombre, dom_nom), (dirección, dom_dir)} Tupla t = {(dni, 12.345.678), (nombre, “Pepa Gómez”), (dirección, “Paz 10”)} Operaciones: Consultar (t, nombre) = “Pepa Gómez” Asignar (t, dirección, “Colón 15”) = {(dni, 12.345.678), (nombre, “Pepa Gómez”), (dirección, “Colón 15”)} 6 2.1.1 Estructuras de datos: tupla, relación Una relación es un conjunto de tuplas del mismo esquema al que se denomina esquema de la relación definición de una relación R de esquema {(A1, D1), (A2, D2),…, (An, Dn)} esquema de R definición de R R (A1:D1, A2:D2,…, An:Dn) relación R R = {t: t={(A1,v1), (A2,v2),…, (An,vn)} ∀i vi ∈ Di} los dominios del esquema de una relación deben ser escalares 2.1.1 Estructuras de datos: tupla, relación Propiedades de una relación: Grado de una relación: número de atributos de su esquema Cardinalidad de una relación: número de tuplas que la forman Compatibilidad: dos relaciones R y S son compatibles si sus esquemas son idénticos 7 2.1.1 Estructuras de datos: tupla, relación Ejemplo Definición de una relación del esquema Persona: Persona (dni: dom_dni, nombre:dom_nom, dirección:dom_dir) Persona= { {(dni, 12.345.678), (nombre, “Pepa Gómez”), (dirección, “Colón 15”)} {(dni, 20.450.120),(nombre, “Juan Pérez”), (dirección, “Cuenca 20”) } {(nombre, “José Abad”),(dni, 12.904.569),(dirección, “Blasco Ibáñez 35)} {(nombre, “María Gutiérrez”),(dni, 35.784.843),(dirección, “Reina 7”)} } • grado = 3 • cardinalidad = 4 • compatible con relaciones de esquema {(dni, dom_dni), (nombre, dom_nom), (dirección, dom_dir)} 2.1.1 Estructuras de datos: tupla, relación Operadores de la estructura relación: insertar una tupla en una relación borrar una tupla de una relación seleccionar las tuplas de una relación que cumplen una condición concatenar (unir) las tuplas de dos relaciones por el valor de uno (o varios) atributos. unión de relaciones diferencia de relaciones intersección de relaciones ..... 8 2.1.1 Estructuras de datos: tupla, relación Persona= { {(dni, 12.345.678), (nombre, “Pepa Gómez”), (dirección, “Colón 15”)} {(dni, 20.450.120), (nombre, “Juan Pérez”), (dirección, “Cuenca 20”) } {(nombre, “José Abad”),(dni, 12.904.569),(dirección, “Blasco Ibáñez 35)} {(nombre, “María Gutiérrez”),(dni, 35.784.843), (dirección, “Reina 7”)} } Persona DONDE dni=12.345.678 seleccionar tuplas de una relación t={(dni, 12.345.678), (nombre, “Pepa Gómez”), (dirección, “Colón 15”)} t.nombre Pepa Gómez t.dirección consultar un atributo de una tupla Colón 15 2.1.1 Estructuras de datos: tupla, relación Representación tabular de una relación: Persona Persona (dni: dom_dni, nombre:dom_nom, dirección:dom_dir) 9 2.1.1 Estructuras de datos: tupla, relación Representación tabular de una relación se elige un orden para las tuplas: filas de la tabla. se elige un orden para los atributos del esquema de la relación (dni, nombre, dirección): columnas de la tabla. {(nombre, “Juan Pérez”), (dni, 20.450.120), (dirección, “Cuenca 20”) } (20.450.120, “Juan Pérez”, “Cuenca 20”) 2.1.1 Estructuras de datos: tupla, relación Representación tabular de una relación El manejo de las relaciones no puede basarse en el orden elegido para los atributos, ni en el orden de las filas (es sólo una representación) En una relación: no existe un orden definido entre las tuplas no existe un orden definido entre los atributos de una tupla 10 2.1.1 Estructuras de datos: tupla, relación Información desconocida: R (A1:D1, A2:D2,…, An:Dn) R = {t: t={(A1,v1), (A2,v2),…, (An,vn)} ∀i vi ∈ Di} ¿Qué sucede cuando no se conoce el valor de un atributo para una tupla? VALOR NULO 2.1.1 Estructuras de datos: tupla, relación Información desconocida: VALOR NULO se asume que en todo dominio existe un valor nulo (?) t = {(dni, 11.940.861), (nombre, Eva López), (dirección, ?)} • consultar(t,dni) → 11.940.861 • consultar (t, nombre) → “Eva López” • consultar (t, dirección) → ? 11 2.1.1 Estructuras de datos: tupla, relación El VALOR NULO representa la ausencia de valor La presencia de valores nulos exige el uso de una lógica trivaluada y de predicados especiales. t = {(dni, 11.940.861), (nombre, Eva López), (dirección, ?)} • t.dni = 11.940.861 cierto • t.nombre = “Julian López” falso • t.dirección = “Jesús 93” indefinido • NULO (t.dirección) cierto 2.1.1 Estructuras de datos: tupla, relación Comparaciones: Operadores de comparación: <, >, =, ≥, ≤, ≠ Evaluación de comparaciones: A ∝ B se evalúa a INDEFINIDO si alguno de los operandos es el VALOR NULO en caso contrario se evalúa al valor de verdad de la expresión A ∝ B de acuerdo a la semántica del operador ∝. Predicado NULO: Nulo (t.A) se evalúa a CIERTO si el atributo A en la tupla t tiene VALOR NULO, en caso contrario se evalúa a FALSO. 12 2.1.1 Estructuras de datos: tupla, relación Lógica bivaluada: cierto falso 2.1.1 Estructuras de datos: tupla, relación Esquema relacional conjunto de definiciones de relaciones Base de datos relacional conjunto de relaciones (una por cada relación definida en el esquema) 13 2.1.2 Álgebra Relacional. 2.1.2 Álgebra Relacional. 2.1.2 Álgebra Relacional. Operadores de la estructura relación: insertar una tupla en una relación borrar una tupla de una relación seleccionar las tuplas de una relación que cumplen una condición concatenar (unir) las tuplas de dos relaciones por el valor de uno (o varios) atributos. unión de relaciones diferencia de relaciones intersección de relaciones ..... 14 2.1.2 Álgebra Relacional. operadores constructores operadores consultores • inserción • borrado • selección • unión • proyección • diferencia • concatenación • intersección • división • producto cartesiano operadores relacionales operadores conjuntistas 2.1.2 Álgebra Relacional. operadores constructores operadores consultores • inserción • borrado • selección • unión • proyección • diferencia • concatenación • intersección • división • producto cartesiano operadores relacionales operadores conjuntistas 15 2.1.2 Álgebra Relacional. Operador Inserción: Insertar(R, t) = R ∪ {t } (R y t han de tener el mismo esquema) Insertar ( Persona , , {(nombre, “Manuel Sala”), (dni, 14.734.158), (dirección, “Cuenca 20”)} ) 2.1.2 Álgebra Relacional. Insertar ( {{(dni, 12.345.678), (nombre, “Pepa Gómez”), (dirección, “Colón 15”)} {(dni, 20.450.120), (nombre, “Juan Pérez”), (dirección, “Cuenca 20”) } {(nombre, “José Abad”), (dni, 12.904.569), (dirección, “Blasco Ibáñez 35)} , {(nombre, “María Gutiérrez”), (dni, 35.784.843), (dirección, “Reina 7”)}} , {(nombre, “Manuel Sala”), (dni, 14.734.158), (dirección, “Cuenca 20”)} ) {{(dni, 12.345.678), (nombre, “Pepa Gómez”), (dirección, “Colón 15”)} {(dni, 20.450.120), (nombre, “Juan Pérez”), (dirección, “Cuenca 20”) } {(nombre, “José Abad”), (dni, 12.904.569), (dirección, “Blasco Ibáñez 35)} {(nombre, “María Gutiérrez”), (dni, 35.784.843) (dirección, “Reina 7”)} {(nombre, “Manuel Sala”), (dni, 14.734.158), (dirección, “Cuenca 20”) } } 16 2.1.2 Álgebra Relacional. Persona (14.734.158, “Manuel Sala”,“Cuenca 20”) INSERTAR 2.1.2 Álgebra Relacional. Persona 17 2.1.2 Álgebra Relacional. Operador Borrado: Borrar(R, t) = R - {t } (R y t han de tener el mismo esquema) Borrar (Persona, {(nombre, “Manuel Sala”), (dni, 14.734.158), (dirección, “Cuenca 20”)} ) 2.1.2 Álgebra Relacional. Borrar( {{(dni, 12.345.678), (nombre, “Pepa Gómez”), (dirección, “Colón 15”)} {(dni, 20.450.120), (nombre, “Juan Pérez”), (dirección, “Cuenca 20”) } {(nombre, “José Abad”), (dni, 12.904.569), (dirección, “Blasco Ibáñez 35)} {(nombre, “María Gutiérrez”), (dni, 35.784.843), (dirección, “Reina 7”)} {(nombre, “Manuel Sala”), (dni, 14.734.158), (dirección, “Cuenca 20”)} } { (nombre, “Manuel Sala”), (dni, 14.734.158) (dirección, “Cuenca 20”)} ) {{(dni, 12.345.678), (nombre, “Pepa Gómez”), (dirección, “Colón 15”)} {(dni, 20.450.120), (nombre, “Juan Pérez”), (dirección, “Cuenca 20”) } {(nombre, “José Abad”), (dni, 12.904.569), (dirección, “Blasco Ibáñez 35)} {(nombre, “María Gutiérrez”), (dni, 35.784.843), (dirección, “Reina 7”)}} 18 2.1.2 Álgebra Relacional. Persona (14.734.158, “Manuel Sala”,“Cuenca 20”) Borrar 2.1.2 Álgebra Relacional. Persona 19 2.1.2 Álgebra Relacional. • inserción operadores constructores operadores consultores • borrado • selección • unión • proyección • diferencia • concatenación • intersección • división • producto cartesiano operadores relacionales operadores conjuntistas 2.1.2 Álgebra Relacional. Operador Selección: R DONDE F = { t | t ∈ R y F(t) se evalúa a cierto} Seleccionar las tuplas de una relación que cumplen una condición . Esquema de R: {(A1, D1),…, (An, Dn)} F es una expresión lógica. Esquema de R DONDE F: {(A1, D1),…, (An, Dn)} 20 2.1.2 Álgebra Relacional. “Obtener las asignaturas adscritas al DSIC” Asignatura Asignatura DONDE cod_dep="DSIC" 2.1.2 Álgebra Relacional. Asignatura Asignatura DONDE cod_dep="DSIC" 21 2.1.2 Álgebra Relacional. “Obtener las asignaturas de primer curso” Asignatura Asignatura DONDE semestre=“1A” ∨ semestre=“1B” 2.1.2 Álgebra Relacional. Asignatura Asignatura DONDE semestre=“1A” ∨ semestre=“1B” 22 2.1.2 Álgebra Relacional. cod_asg nombre AD1 Algoritmos y Estructuras de Datos 1 semestre teoría prac cod_dep 1A 4 2 DSIC FCO Fundamentos de computadores 1A 4,5 4,5 DISCA MAD Matemática Discreta 1A 3 3 MAT INT Inglés Técnico 1B 3 3 IDM FFI Fundamentos Físicos de la Informática 1A 3 3 FIS 2.1.2 Álgebra Relacional. Operador Proyección: R[Ai, Aj,…, Ak] = {{(Ai, vi), (Aj, vj),…, (Ak, vk)} | ∃t ∈ R tal que {(Ai, vi), (Aj, vj),…,(Ak, vk)} ∈ t } Obtener los valores de uno (o varios) atributos en una relación. Esquema de R: {(A1, D1),…, (An, Dn)} {Ai, Aj,…, Ak} es un subconjunto de atributo de R . Esquema de R[Ai, Aj,…, Ak]: {(Ai, Di), (Aj, Dj),…,(Ak, Dk)} 23 2.1.2 Álgebra Relacional. “Obtener los departamentos que tienen adscritas asignaturas” Asignatura Asignatura [cod_dep] 2.1.2 Álgebra Relacional. Asignatura Asignatura [cod_dep] 24 2.1.2 Álgebra Relacional. expresiones de Álgebra Relacional los operadores del Álgebra Relacional se pueden combinar para satisfacer consultas a la base de datos 2.1.2 Álgebra Relacional. “Obtener el nombre de las asignaturas adscritas al DSIC” Asignatura Asignatura DONDE cod_dep="DSIC” [nombre ] 25 2.1.2 Álgebra Relacional. Asignatura Asignatura DONDE cod_dep="DSIC” [nombre ] 2.1.2 Álgebra Relacional. Operador Concatenación (join): R S= {{(A1,v1),…,(An,vn),(B1,w1),…,(Bm,wm), (C1,y1),…,(Cp,yp)}| {(A1, v1),…, (An, vn), (B1, w1),…, (Bm, wm)} ∈ R y {(B1, w1),…, (Bm, wm), (C1, y1),…, (Cp, yp)} ∈ S } Unir tuplas de dos relaciones en función del valor de atributos comunes. atributos del mismo nombre y dominio Esquema de R: {(A1,D1),…, (An, Dn), (B1, E1),…, (Bm, Em)} Esquema de S: {(B1, E1),…, (Bm, Em), (C1, F1),…, (Cp, Fp)} Equema de R S: {(A1, D1),…, (An, Dn), (B1, E1),…, (Bm, Em), (C1, F1),…, (Cp, Fp)} 26 2.1.2 Álgebra Relacional. en un esquema relacional las asociaciones entre relaciones se establecen por medio de referencias explícitas atributos de referencia el operador concatenación permite unir tuplas de dos relaciones a través de los atributos de referencia 2.1.2 Álgebra Relacional. atributos identificadores atributos de referencia Departamento cod_dep nombre director Profesor teléfono cod_pro nombre teléfono cod_dep Asignatura cod_asg nombre Docencia semestre cod_pro teoría cod_asg prac gteo cod_dep gpra Esquema relacional 27 2.1.2 Álgebra Relacional. “Obtener información sobre la docencia de BDA: nombre de los profesores y grupos asignados” 2.1.2 Álgebra Relacional. Asignatura Docencia Profesor 28 2.1.2 Álgebra Relacional. Docencia Docencia DONDE cod_asg = “BDA” 2.1.2 Álgebra Relacional. Docencia DONDE cod_asg = “BDA” Profesor 29 2.1.2 Álgebra Relacional. (Docencia DONDE cod_asg = “BDA” (Docencia DONDE cod_asg = “BDA” Profesor) Profesor) [nombre, gteo, gpra ] 2.1.2 Álgebra Relacional. “Obtener información sobre la docencia de BDA: nombre de los profesores y grupos asignados” ( Docencia DONDE cod_asg = “BDA” Profesor) [nombre, gteo, gpra ] 30 2.1.2 Álgebra Relacional. “Obtener el código y el nombre de los departamentos que imparten asignaturas en el semestre 1A” 2.1.2 Álgebra Relacional. Departamento Asignatura 31 2.1.2 Álgebra Relacional. Asignatura Asignatura DONDE semestre=“1A” [cod_dep] 2.1.2 Álgebra Relacional. Asignatura DONDE semestre=“1A” [cod_dep] Departamento Asignatura DONDE semestre=“1A” [cod_dep] Departamento 32 2.1.2 Álgebra Relacional. Asignatura DONDE semestre=“1A” [cod_dep] (Asignatura DONDE semestre=“1A” [cod_dep] Departamento Departamento )[cod_dep, nombre ] 2.1.2 Álgebra Relacional. “Obtener el código y el nombre de los departamentos que imparten asignaturas en el semestre 1A” (Asignatura DONDE semestre=“1A” [cod_dep] Departamento )[cod_dep, nombre ] 33 2.1.2 Álgebra Relacional. • inserción operadores constructores operadores consultores • borrado • selección • unión • proyección • diferencia • concatenación • intersección • producto cartesiano operadores relacionales operadores conjuntistas 2.1.2 Álgebra Relacional. Operador Diferencia: R - S = { t : t ∈ R y t ∉ S } R y S deben ser compatibles Obtener las tuplas que aparecen en una relación y no aparecen en la otra. Esquema de R: {(A1,D1),…, (An, Dn) } Esquema de S: {(A1,D1),…, (An, Dn) } Equema de R - S: {(A1, D1),…, (An, Dn) } 34 2.1.2 Álgebra Relacional. “Obtener el código de los departamentos que no tienen adscritas asignaturas” Departamento códigos de todos los departamentos Departamento [cod_dep] 2.1.2 Álgebra Relacional. Asignatura códigos de los departamentos que tienen adscritas asignaturas Asignatura [cod_dep] 35 2.1.2 Álgebra Relacional. Departamento [cod_dep] Asignatura [cod_dep] - = “Obtener el código de los departamentos que no tienen adscritas asignaturas” Departamento [cod_dep] - Asignatura [cod_dep] 2.1.2 Álgebra Relacional. Operador Unión: R ∪ S = { t : t ∈ R o t ∈ S } R y S han de ser compatibles Obtener las tuplas que aparecen en una o en otra relación. Esquema de R: {(A1,D1),…, (An, Dn) } Esquema de S: {(A1,D1),…, (An, Dn) } Equema de R ∪ S: {(A1, D1),…, (An, Dn) } 36 2.1.2 Álgebra Relacional. “Añadir a la relación Departamento los departamentos que aparecen en la relación Nuevos_dpto” Departamento ∪ Nuevos_dpto 2.1.2 Álgebra Relacional. Departamento ∪ Nuevos_dpto 37 2.1.2 Álgebra Relacional. Operador Intersección: R ∩ S = { t | t ∈ R y t ∈ S} R y S han de ser compatibles Obtener las tuplas que aparecen en una y en otra relación. Esquema de R: {(A1, D1),…, (An, Dn) } Esquema de S: {(A1, D1),…, (An, Dn) } Equema de R ∩ S: {(A1, D1),…, (An, Dn) } 2.1.2 Álgebra Relacional. “Obtener los departamentos que tienen adscritos profesores y asignaturas” Asignatura departamentos que tienen adscritas asignaturas Asignatura [cod_dep] 38 2.1.2 Álgebra Relacional. departamentos que tienen adscritos profesores Profesor Profesor [cod_dep] 2.1.2 Álgebra Relacional. Asignatura [cod_dep] Profesor [cod_dep] ∩ “Obtener los departamentos que tienen adscritos profesores y asignaturas” Asignatura [cod_dep] ∩ Profesor [cod_dep] 39 2.1.2 Álgebra Relacional. Operador Producto Cartesiano: R×S= {{(A1,v1), (A2,v2),…, (An,vn), (B1, w1), (B2, w2),…, (Bm, wm)}: {(A1, v1), (A2, v2), …, (An, vn)} ∈ R y {(B1, w1), (B2, w2), …, (Bm, wm)} ∈ S} R y S no pueden tener nombre de atributos comunes Unir tuplas de dos relaciones Esquema de R: {(A1,D1),…, (An, Dn) } Esquema de S: {(B1, E1),…, (Bm, Em)}. Equema de R × S: {(A1, D1),…, (An, Dn), (B1, E1),…, (Bm, Em)}. 2.1.2 Álgebra Relacional. R S x RxS = 40 2.1.2 Álgebra Relacional. Operador Renombrar: R((Ai, Bi),…, (Aj, Bj)) = {{(A1, v1),…, (Bi, vi),…, (Bj, vj),…, (An, vn)} | {(A1, v1),…, (Ai, vi),…, (Aj, vj),…, (An, vn)} ∈ R} Cambiar temporalmente el nombre de un atributo en una relación Esquema de R: {(A1, D1),…, (Ai, Di),..., (Aj, Dj),..., (An, Dn) } Equema de R((Ai, Bi),…, (Aj, Bj)):{(A1, D1),…, (Bi, Di),..., (Bj, Dj),..., (An, Dn) } 2.1.2 Álgebra Relacional. “Obtener el nombre de las asignaturas del semestre 1A y el nombre del departamento responsable de su docencia” 41 2.1.2 Álgebra Relacional. Asignatura Asignatura DONDE semestre=“1A” [nombre, cod_dep] 2.1.2 Álgebra Relacional. Asignatura DONDE semestre=“1A” [nombre, cod_dep] Departamento 42 2.1.2 Álgebra Relacional. Asignatura DONDE semestre=“1A” [nombre, cod_dep] (Asignatura DONDE semestre=“1A” [nombre, cod_dep]) ((nombre, nom_asg)) 2.1.2 Álgebra Relacional. (Asignatura DONDE semestre=“1A” [nombre, cod_dep]) ((nombre, nom_asg)) Departamento 43 2.1.2 Álgebra Relacional. (Asignatura DONDE semestre=“1A” [nombre, cod_dep]) ((nombre, nom_asg)) Departamento ((Asignatura DONDE semestre=“1A” [nombre, cod_dep]) ((nombre, nom_asg)) Departamento ) [nom_asg, nombre] 2.1.2 Álgebra Relacional. “Obtener el nombre de las asignaturas del semestre 1A y el nombre del departamento responsable de su docencia” ((Asignatura DONDE semestre=“1A” [nombre, cod_dep]) Departamento ) ((nombre, nom_asg)) [nom_asg, nombre] 44 2.1.2 Álgebra Relacional. Ejercicios: 1. Obtener el código de los profesores que imparten asignaturas que no son de su departamento. 2. Obtener el nombre de los profesores que tienen toda su docencia en la misma asignatura 2.1.2 Álgebra Relacional. 1. Obtener el código de los profesores que imparten asignaturas que no son de su departamento. 45 2.1.2 Álgebra Relacional. Asignatura Docencia Profesor 2.1.2 Álgebra Relacional. Asignatura [cod_asg,cod_dep] ((cod_dep, dep_asg)) Profesor [cod_pro, cod_dep] ((cod_dep, dep_pro)) 46 2.1.2 Álgebra Relacional. Asignatura [cod_asg,cod_dep] ((cod_dep, dep_asg)) Profesor [cod_pro, cod_dep] ((cod_dep, dep_pro)) Docencia [cod_asg,cod_pro] 2.1.2 Álgebra Relacional. Asignatura [cod_asg,cod_dep] ((cod_dep, dep_asg)) Docencia [cod_asg,cod_pro] Profesor [cod_pro, cod_dep] ((cod_dep, dep_pro)) 47 2.1.2 Álgebra Relacional. (Asignatura [cod_asg,cod_dep] ((cod_dep, dep_asg)) Docencia [cod_asg,cod_pro] Profesor [cod_pro, cod_dep] ((cod_dep, dep_pro))) DONDE dep_pro ≠dep_asg 2.1.2 Álgebra Relacional. 1. Obtener el código de los profesores que imparten asignaturas que no son de su departamento. (Asignatura [cod_asg,cod_dep] ((cod_dep, dep_asg)) Docencia [cod_asg,cod_pro] Profesor [cod_pro, cod_dep] ((cod_dep, dep_pro))) DONDE dep_pro ≠dep_asg [cod_pro ] 48 2.1.2 Álgebra Relacional. 2. Obtener el código de los profesores que tienen toda su docencia en la misma asignatura 2.1.2 Álgebra Relacional. Docencia 49 2.1.2 Álgebra Relacional. Docencia [cod_asg,cod_pro] ((cod_asg, asg1)) Docencia [cod_asg,cod_pro] ((cod_asg, asg2))) (Docencia [cod_asg,cod_pro] ((cod_asg, asg1)) Docencia [cod_asg,cod_pro] ((cod_asg, asg2))) DONDE asg1 ≠ asg2 2.1.2 Álgebra Relacional. (Docencia [cod_asg,cod_pro] ((cod_asg, asg1)) Docencia [cod_asg,cod_pro] ((cod_asg, asg2))) DONDE asg1≠ asg2 [cod_pro ] profesores que tienen docencia en al menos dos asignaturas 50 2.1.2 Álgebra Relacional. Docencia Docencia [cod_pro] profesores que tienen docencia 2.1.2 Álgebra Relacional. (Docencia Docencia [cod_pro] [cod_asg,cod_pro] ((cod_asg, asg1)) Docencia [cod_asg,cod_pro] ((cod_asg, asg2))) DONDE asg1≠ asg2 [cod_pro ] - profesores que tienen toda la docencia en la misma asignatura 51 2.1.2 Álgebra Relacional. 2. Obtener el código de los profesores que tienen toda su docencia en la misma asignatura Docencia [cod_pro] (Docencia - [cod_asg,cod_pro] ((cod_asg, asg1)) Docencia [cod_asg,cod_pro] ((cod_asg, asg2))) DONDE asg1≠ asg2 [cod_pro ] 52