1. Bases de datos y sistemas de información Bases de datos y sistemas de información
2.2. Modelo relacional 2.2.2. Paso del modelo ER al modelo relacional
• Creado por Codd a Principios de los 70 Al traspasar información de ER al modelo relacional se pierde información (participación). En
• Modelo lógico de datos de no muy alto nivel, orientado a registro. cambio, algunos requisitos que no podían representarse en el modelo ER sí van a poder
• Sólida base teórica. indicarse aquí.
• Implementado en muchos SGBD.
• El concepto principal es la relación o tabla .
2.2.2.1. Definición de tablas
2.2.1. Terminología del modelo relacional Tipos de entidades
Para cada tipo de entidad que no sea débil se crea una relación con el mismo nombre y conjunto
• Entidad: Igual que en el esquema ER. También se les llama tuplas o filas de la relación.
de atributos.
• Atributo: Igual que en el esquema ER. También se le llaman columnas de la relación.
El dominio de los atributos tiene que ser simple: no se admiten atributos multivaluados ni
Ej: En el caso de la BD de secretaría los tipos de entidades dan lugar a las relaciones:
compuestos.
• Esquema de una relación: viene dado por el nombre de la relación y una lista de atributos. Alumnos(DNI, Apellidos y Nombre, Domicilio, teléfono, COU)
Es el tipo de entidad. Asignaturas(Código, título, núm créditos)
• Conjunto de entidades: Relación o tabla. Profesores(DNI, Apellidos y nombre, Domicilio, teléfono)
Aulas(Edificio, núm.Edificio)
Ej: alumnos(DNI, NombreYApellidos, domicilio, teléfono, cou )
Tipos de relaciones
• Instancia de una relación: Conjuntos de entidades. Cada entidad se representa como una Para cada tipo de relación R se crea una relación con atributos:
tupla. Cada componente de la tupla corresponde con el valor del atributo correspondiente,
• Por cada tipo de entidad que participa en la relación, los atributos de la clave primaria.
según el orden enunciado en el esquema de la relación.
• Los atributos de la propia relación.
Ej: Instancia de la relación alumnos:
Ej: En el caso de la BD de secretaría los tipos de relación dan lugar a las relaciones:
{ (01234567Z, Manuel Vázquez Prieto, Calle del Jazmín 7 4 Izq, 91-12345678, COU = SI),
....}
Matrícula(DNI, Código, Nota)
Supervisa(DNI,DNI)
Imparte(DNI, Código, Edificio, NumAula)
Representación:
En el modelo relacional no se representan diagramas del esquema de la BD. Se pueden
representar instancias de una relación de la siguiente forma: Tipos de entidades débiles
- El tipo de entidad débil E se transforma en una relación que incluye los atributos del tipo de
Ej.: Instancia de la relación alumnos relación más los atributos necesarios para la clave de E.
- Los tipos de relaciones en los que participa E deben incluir todos los atributos de la clave de E.
DNI NombreyApellidos Domicilio Teléfono COU
Ej: Traspasar el siguiente diagrama entidad-relación a modelo relacional:
01234567Z Manuel Vázquez Prieto Calle del Jazmín 7 4 Izq 91-12345678 SI
compositores DNI
NombreyApe
Autor
canciones en CD’s
título duración intérprete
Núm.serie títuloCD
2-16 2-17
2. Bases de datos y sistemas de información Bases de datos y sistemas de información
b) Una a varias
E1 R E2
Solución:
compositores(DNI, NombreYApe) Superclave: c2
canciones(titulo, duracion,NúmSerie)
autor(DNI, titulo, duración, NúmSerie) c) Varias a varias
en(titulo, duración, NúmSerie) <- Se debe eliminar
CDs(Num.Serie, títuloCD, intérprete) E1 R E2
Generalizaciones
Se tratan igual que en el caso de las entidades débiles. Superclave : c1 ∪ c2
La relación IsA no se transforma en relación
Relaciones n-arias
DNI Apellidos y Nombre Domicilio Teléfono Supongamos que la relación proviene de un tipo de relación R entre tipos de entidad E1, E2, ...,
Ek.
- Si todos participan con cardinalidad varios en R, entonces una superclave es la unión de las
personas claves de E1, E2, ..., Ek.
- Si algunos tipos de entidad participan con cardinalidad una en R, entonces uno de ellos
puede ser excluido de la superclave.
is a
Ej: BD secretaría
COU Alumnos(DNI, Apellidos y Nombre, Domicilio, teléfono, COU)
Asignaturas(Código, título, núm.créditos) Otra clave candidata: { título }
alumnos profesores Profesores(DNI, Apellidos y nombre, Domicilio, teléfono)
Aulas(Edificio, núm.Edificio)
personas(DNI, ApellidosyNombre, Domicilio, teléfono). Matricula(DNI, Código, Nota)
alumnos(DNI, COU) Supervisa(DNISupervisor,DNISupervisado)
profesores(DNI) Imparte(DNI, Codigo, Edificio,NumAula)
2.2.2.2. Claves Ej: BD de canciones:
Hay dos casos:
compositores(DNI, NombreYApe)
1. La relación proviene de un tipo de entidad en el esquema ER. La clave es la clave del tipo
canciones(título, duración, NúmSerie)
de entidad
autor(DNI, título, duración, NúmSerie)
2. La relación proviene de un tipo de relación en el esquema ER.
CDs(Núm.Serie, títuloCD, intérprete)
Relaciones binarias:
R relación binaria entre E1 y E2. R’ relación construida a partir de R
Clave de E1 : c1
Clave de E2 : c2
Atributos de R’: Atributos de E1 + Atributos de E2 + Atributos de R
a) Una a una
E1 R E2
Dos superclaves: c1 y c2
2-18 2-19
3. Bases de datos y sistemas de información Bases de datos y sistemas de información
2.2.3.1.1. Operaciones entre conjuntos: unión, intersección, diferencia
2.2.2.3. Cuestiones de diseño Son operaciones binarias que requieren:
En ocasiones es posible combinar 2 o más tablas en una sola: - Los dos esquemas deben tener idénticos atributos.
Ej: - En el momento de efectuar la operación se supone que el orden de las columnas es el
mismo.
Nombre
Def.:
Apell. Dados dos esquemas de relación R(A1,....,An), S(A1,....,An)
Personas Nacida Países
DNI La operación unión de R y S , que se denota R U S(A1,....,An),
produce un esquema cuyas instancias válidas pueden escribirse de la forma (r U s), con r
instancia válida de R y s instancia válida de S.
Esquema de la BD:
Personas(DNI, Apell.)
Países(Nombre) La operación intersección de R y S , y se denota R ∩ S(A1,....,An),
Nacida(DNI, Nombre) produce un esquema cuyas instancias válidas pueden escribirse de la forma (r ∩ s), con r
instancia válida de R y s instancia válida de S.
Nuevo Esquema:
Personas(DNI,Apell, PaisNac) La operación diferencia de R y S , y se denota R S(A1,....,An),
Países(Nombre) produce un esquema cuyas instancias válidas pueden escribirse de la forma (r s), con r instancia
válida de R y s instancia válida de S.
Ej:
Esquema de BD: Ej.:
personas(DNI, ApellidosyNombre, Domicilio, teléfono). - Deseamos formar un esquema de relación con todos los empleados de la empresa.
alumnos(DNI, COU) Empleados <-- Programadores U Analistas
profesores(DNI)
- Queremos conocer a los empleados que son a la vez programadores y analistas.
Esquema modificado: ProgramadoresYAnalistas <-- Programadores ∩ Analistas
personas(DNI, ApellidosyNombre, Domicilio, teléfono,AlumnOProfe, COU).
- Empleados que son analistas pero no programadores
SoloAnalistas <-- Analistas programadores
2.2.3. Lenguajes formales del modelo relacional
- Empleados que son sólo Programadores o SoloAnalistas:
2.2.3.1. Álgebra relacional SoloProgOSoloAnalistas <-- SoloAnalistas U SoloProgramadores
SoloProgOSoloAnalistas <-- Empleados ProgramadoresYAnalistas
Lenguaje de manipulación de datos DML (Data Management Language) de tipo procedimental
que permite consultar y modificar la BD. Define operaciones sobre una o dos relaciones que
producen otra relación.
Operaciones fundamentales: selección, proyección, unión, diferencia de conjuntos, producto
cartesiano y renombramiento. Agrupadas según:
- Operaciones entre conjuntos: unión, intersección, diferencia,.
- Operaciones que eliminan partes de una relación: proyección (elimina columnas) y
selección (elimina filas)
- Operación de renombramiento
- Combinación de tuplas de 2 relaciones: productos cartesianos, uniones naturales, productos,
divisiones
- Extensiones del álgebra relacional.
2-20 2-21
4. Bases de datos y sistemas de información Bases de datos y sistemas de información
2.2.3.1.2. Operaciones que eliminan partes de una relación
Proyección y selección 2.2.3.1.3. Operación de renombramiento
Def.
Proyección Sea R(A1,...,An) esquema de relación. La operación de renombramiento se denota por
Def:
Sea R(A1,..,An) un esquema de relación y r instancia válida de R. La operación de proyección ρ S(B1,...,Bn)(R)
y produce un nuevo esquema de relación con:
de R respecto a Ai, Ai+1, ..., Aj lista de atributos de R, se denota πAi,Ai+1,...Aj, (R) y produce un - Nombre: S
esquema de relación que tiene - Atributos: (B1,...,Bn), donde cada Bi es un nuevo nombre de atributo con el mismo dominio
- como atributos Ai, Ai+1,...,Aj que Ai.
- como instancias válidas los valores en Ai, Ai+1, ... Aj de las instancias válidas de R. - Instancias válidas: Las de R
Ej.: Obs.:
- Determinar los códigos de los proyectos en los que hay algún empleado trabajando. - Si sólo se quieren renombrar los atributos se puede omitir S, y si sólo se quiere cambiar el
nombre de la relación se puede omitir (B1,...,Bn).
ProyectosEnMarcha <-- π CodigoPr(Distribución)
- La notación S <-- R también cambia el nombre a un esquema de relación.
Selección Ej.:
Def: - DNI’s de empleados que no trabajan ni dirigen ningún proyecto:
Sea R(A1,..,An) un esquema de relación y r instancia válida de R. La operación de selección de DNIEmpleados π (Programadores U Analistas)
<--- DNI
R respecto a C se denota σC(R) y produce un esquema de relación:
- Atributos: (A1,...,An) DNIEmpleadosActivos <--- ρ (π (Distribución)) U
(DNI) DNIEmp
ρ (π (Proyectos))
- Instancias válidas: las de R tras eliminar las tuplas que no cumplan C.
(DNI) DNIDir
C es la condición de selección es una fórmula construida de la siguiente forma: DNIEmpleadosNoActivos <--- DNIEmpleados DNIEmpleadosActivos
C:= <nombre_atributo> <op_comparación> <nombre_atributo>
C:= <nombre_atributo> <op_comparación> <constante>
C:= C <AND> C
C:= C <OR> C
C:= <NOT> C
Donde <op_comparacion> representa operadores booleanos del dominio
(=).
Ejs.:
- Códigos de todos los proyectos en los que trabaja el empleado con DNI 4
ProyectosDNI4 <-- π CódigoPr(σ(DNIEmp=4)(Distribución))
- DNI de los trabajadores que trabajan entre 10 y 20 horas (ambas cantidades inclusive) en algún
proyecto.
Entre10Y20 <-- π DNIEmp (σ(Horas>=10 and Horas<=20)(Distribución))
DNI’s: 1,4,5
- Código y descripción de los proyectos dirigidos por el empleado de DNI 4 o por el empleado
de DNI 6
Proyectos4o6 <--- π σ(DNIDIR=4 OR DNIDir=6)(Proyectos))
Código, Descripción(
Respuesta: Códigos P1, P2, P5
2-22 2-23
5. Bases de datos y sistemas de información Bases de datos y sistemas de información
Join (combinación)
2.2.3.1.4. Operaciones de combinación de tuplas Def.:
Se define la combinación de R1 y R2 como:
Producto Cartesiano
Def.: R1 C
R2 = σ (R1 x R2)
C
Dadas dos relaciones R1, R2 esquemas de relación , la operación producto
Cartesiano de R1, se denota por R1 x R2 y se define como: Donde c es una conjunción de operaciones booleanas:
- Atributos: Los de R1 U los de R2. Si tienen algún nombre de atributo A común, este se C= C1 AND C2 AND C3 .....
convierte en R1.A, R2.A
- Instancias: Son de la forma r1xr2, con r1 instancia de R1, r2 instancia de R2. Ej.:
Ej.: Queremos conocer los nombres, direcciones y teléfonos de los empleados que dirigen algún
Queremos conocer los nombres, direcciones y teléfonos de los empleados que dirigen algún proyecto:
proyecto:
1 Datos de todos los empleados 1. Datos de todos los empleados
Empleados ← Programadores U Analistas Empleados ← Programadores U Analistas
Empleados(DNI, Nombre,Dirección,Teléfono) Empleados(DNI, Nombre,Dirección,Teléfono)
2 Hacemos el producto cartesiano con los DNI’s de los directores de proyecto: 2. Datos de los directores de proyecto
DNIDirPorEmpleados ← π DNIDir(Proyectos) x Empleados DatosDirProyecto ← π Nombre, Dirección, Teléfono( Proyectos DNIDir=DNI
Empleados)
DNIDirPorEmpleados (DNIDir, DNI, Nombre,Dirección,Teléfono)
Ej.:
3 Nos quedamos con los datos de los directores de proyecto Obtener los nombres de todos los empleados que trabajan en algún proyecto más de 10 horas:
DatosDirProyecto ← π Nombre, Dirección, Teléfono( σ DNIDir = DNI(DNIDirPorEmpleados))
Dos formas:
DatosDirProyecto(Nombre,Dirección,Teléfono) NombresTrabajanMasde10 ← π Nombre(
C
Empleados DNIEmp=DNI Distribución)
AND Horas>10
Resultado
Nombre
Herminia
Calixto
Teodora
Evaristo
2-24 2-25
6. Bases de datos y sistemas de información Bases de datos y sistemas de información
Equijoin (equicombinación) Ej.:
Def.: Datos personales de los directores de proyecto.
Se llaman operación Equijoin a todo join natural cuya condición es una conjunción de
igualdades. DNIDirPro ← (DNI) ρ (π
DNIDir(Proyectos))
DatosDirProyecto ← DNIDirPro (Programadores U Analistas)
Ej.: Teorema:
R1(A,B) Sean R1 y R2 dos esquemas de relación con atributos comunes (C1,....,Cj),
A B atributos de A son (A1,...,An,C1,...,Cj)
1 B1 Y los de B (B1,....,Bm,C1,....,Cj)
2 B2
2 B3 Entonces R1 R2 = (salvo el orden de los atributos)
R2(C,D) ρ A1,A2,...,An,B1,...,Bm,C1,...,Cj (π A1,A2,...,An,B1,...,Bm,R1.C1,...,R1.Cj ( σ (R1.C1 = R2.C2 AND ,...,AND
C D R1.Cj=R2.Cj)(R1 x R2) ))
2 D1
Ej.:
2 D2
R1(A,B)
R1 |x|(A=C) R2 A B
A B C D 1 B1
2 B2 2 D1 2 B2
2 B2 2 D2 2 B3
2 B3 2 D1
2 B3 2 D2 R2(C,D)
A C
Join natural 2 C1
Def.:
Sean R1(A1,...,An) y R2(B1,...,Bm) dos esquemas de relación y {C1,C2,...,Cj) la lista de los 2 C2
atributos comunes a ambas relaciones.
La operación join natural (producto natural) de R1 y R2, R1 x R2
Produce un esquema de relación R1 R2 tal que: R1.A B R2.A C
- Atributos: {A1,....,An} U {B1,...,Bm} (los atributos comunes sólo aparecen una vez). 1 B1 2 C1
- Instancias válidas: Dada r1 instancia válida de R1 y r2 de R2, se obtiene una instancia 1 B1 2 C2
válida de la unión natural combinando todas las tuplas u de r1 y v de r2 tales que u y v 2 B2 2 D1
coinciden sobre {C1,C2,...,Cj}. 2 B2 2 D2
2 B3 2 D1
2 B3 2 D2
σ (R1.A=R2.A)(R1 x R2 )
R1.A B R2.A C
2 B2 2 D1
2 B2 2 D2
2 B3 2 D1
2 B3 2 D2
π
ρ(A,B,C) ( (R1.A,B,C) (σ (R1.A=R2.A)(R1 x R2 ))
A B C
2 B2 D1
2 B2 D2
2 B3 D1
2 B3 D2
2-26 2-27
7. Bases de datos y sistemas de información Bases de datos y sistemas de información
Ej.: Divisiones
Obtener los datos de todos datos de los empleados que comparten domicilio con otro empleado. Idea: Se utilizan para obtener consulta de en la que se busca que algún atributo de una relación
tome (al menos) todos los valores de otro atributo en otra relación.
Empleados(dni,nombre,domicilio)
DNI Nombre Domicilio Def.:
1 Aniceto Jazmín 1
2 Eulalia Rosa 3 Sea R(A1,...,An), S(B1,...,Bm) con {B1,....,Bm}⊆{A1,...,An}.
3 Teodora Clavel 2 Entonces la operación división R÷S produce un esquema de relación
4 Macario Rosa 3 - Atributos: {C1,...,Cj} = {A1,...,An}{B1,...,Bm}
5 Anacleto Jazmín 1 - Instancias válidas: Dada r instancia válida de R, s inst. válida de S,
Una tupla u está en R ÷S cuando para todo v de S, la tupla que se obtiene al unir los valores de u
y v está en R.
σE1.DNI<>E2.DNI AND E1.Domicilio=E2.Domicilio(ρE1(Empleados) x ρ E2(Empleados)) Ej.:
R
A B
Ej.: A1 B1
Analistas |x| Analistas A2 B1
DNI A3 B1
4 A4 B1
5 A1 B2
6
A3 B2
A2 B3
A3 B3
A3 B3
A1 B4
A2 B4
A3 B4
S
A
A1
A2
A3
T
B
B1
B4
Ej.: Determinar los datos personales de los empleados que trabajan en todos los proyectos que
trabaja el empleado Jacinto
σ
DatosJacinto ← (Nombre = Jacinto)(empleados))
ProyectosJacinto ← π(codigoPr)(( DatosJacincto |x|(DNI=DNIEmp)(Distribución))
DNIProyecto ← π(codigoPr, DNIEmp) (Distribución)
DNIBuscados ← DNIProyecto ÷ ProyectosJacinto
DatosBuscados ← ρ(DNI)(DNIBuscados) |x| empleados
2-28 2-29
8. Bases de datos y sistemas de información Bases de datos y sistemas de información
2.2.3.2.3. Ejemplos
2.2.3.2. Cálculo relacional de tuplas
2.2.3.2.1. Forma general de una consulta en cálculo relacional de tuplas: - Deseamos formar un esquema de relación con todos los empleados de la empresa.
{t | P(t) } = el conjunto de todas las tuplas que cumplen la condición P.
P es una fórmula escrita en lógica de primer orden. {t | (t∈ Programadores) ∨ (t∈ Analistas)}
t es libre
Ejemplo
Datos personales del empleado con DNI 3: - Queremos conocer a los empleados que son a la vez programadores
{t | ((t ∈ programadores) ∨ (t ∈ Analistas)) ∧ (t[DNI] = 3]) } y analistas.
2.2.3.2.2. Fórmulas en el cálculo relacional de tuplas
Pueden ser átomos y fórmulas compuestas. {t | (t∈ Programadores) ∧ (t∈ Analistas)}
• Átomos. DNI: 4
Los átomos tienen una de las siguientes formas:
1.- x ∈ r. Con x una variable de tupla y r un esquema de relación. - Empleados que son analistas no programadores
Una variable de tupla representa un fila genérica de una instancia válida
de r. (SoloAnalistas <-- Analistas programadores)
{t | (t∈ Programadores) ∧ ¬ (t∈ Analistas)}
2.- t[A] θ s[B], donde t y s son variables de tupla, A es un atributo de la relación en la que
está definida la variable de tupla t, B es un atributo de la relación en la que está definida la DNI : 5,6,7
variable de tupla s, y θ es un operador de comparación (<,>,= ...)
El dominio de los atributos A y B debe ser compable. - Empleados que son sólo Programadores o SoloAnalistas:
Con t[A] denotamos el valor de la tupla t en el atributo A.
{t | ((t∈ Programadores) ∧
¬ (t∈ Analistas))
3.- t[A] θ c, donde t variable de tupla, A un atributo de la relación en la que está definida la ∨
variable de tupla t, c un valor del dominio de A y θ es un operador de comparación (<,>,= (t∈ Analistas) ∧ ¬ (t∈ Programadores)}
...).
• Fórmulas compuestas
Para construir una fórmula se usan las siguientes reglas: 2.2.3.2.4. Operaciones
Las fórmulas básicas son fórmulas. Selección
Si F es una fórmula (F) y ¬F también son fórmulas. Ej:
Si F1 y F2 son formulas entonces F1 ∧ F2, F1∨F2 y F1⇒F2 tambiéns on fórmulas. - proyectos en los que trabaja el empleado con DNI 4
Se pueden usar ∀y ∃ para ligar las variables de tupla. Si F(t) es una fórmula en la que ProyectosDNI4 <-- (σ(DNIEmp=4)(Distribución))
aparece libre la variable de tupla t, entonces las siguientes también son fórmulas:
∀t∈R, P(t) {t | (t∈ Distribución) ∧ (t[DNIEmp] = 4)}
∃ t∈R, P(t)
Una variable de tupla que está cuantificada se dice ligada cuando aparece en una fórmula - Trabajadores que trabajan entre 10 y 20 horas (ambas cantidades inclusive) en algún proyecto.
afectada por un cuantificador (∀,∃).
Entre10Y20 <-- σ(Horas>=10 and Horas<=20)(Distribución)
DNI’s: 1,4,5
{t | (t ∈ Distribución) ∧ (t[Horas]>=10) ∧ (t[Horas]<=20)}
- Proyectos dirigidos por el empleado de DNI 4 o por el empleado de DNI 6
Proyectos4o6 <--- πCódigo, Descripción(σ(DNIDIR=4 OR DNIDir=6)(Proyectos))
Respuesta: Códigos P1, P2, P5
{t | (t ∈ Distribución)
∧
((t[DNIDir] = 4) ∨ (t[DNIDir]=6))}
2-30 2-31
9. Bases de datos y sistemas de información Bases de datos y sistemas de información
División
Proyección
Ej: Empleados que trabajan en los mismos proyectos que Jacinto
- Determinar los códigos de los proyectos en los que hay algún empleado trabajando. {t | ((t ∈ Programadores) ∨ (t ∈Analistas))
ProyectosEnMarcha <-- πCodigoPr(Distribución) ∧
∃ j ( j ∈ Programadores ∨ j ∈Analistas)
{t | ∃p ∈ Distribucion( t[CodigoPr] = p[CodigoPr])} (
j[nombre] = Jacinto ∧
(∀p∈ Distribucion)
Producto Cartesiano ((p[DNIEmp] = j[DNI] )
Queremos conocer los nombres, direcciones y teléfonos de los empleados que dirigen algún ⇒
proyecto: ∃ u ((u ∈ Distribucion ) ∧ t[DNI] = u[DNIEmp]
∧ u[CodigoPr] = p[CodigoPr]
1.1 Datos de todos los empleados )
Empleados ← Programadores U Analistas )
Empleados(DNI, Nombre,Dirección,Teléfono) )
}
1.2 Hacemos el producto cartesiano con los DNI’s de los directores de proyecto:
DNIDirPorEmpleados ← πDNIDir(Proyectos) x Empleados 2.2.3.2.5. Significado de una fórmula. Fórmulas seguras.
DNIDirPorEmpleados (DNIDir, DNI, Nombre,Dirección,Teléfono)
Para que tengan una fórmula {t | P(t)} del calculo relacional de tuplas tenga significado debe
1.3 Nos quedamos con los datos de los directores de proyecto cumplir:
DatosDirProyecto ← πNombre, Dirección, Teléfono( σDNIDir = DNI(DNIDirPorEmpleados))
DatosDirProyecto(Nombre,Dirección,Teléfono) 1. Todas las variables deben estar ligadas, exceptuando t que es libre.
2. Todas las variables que aparezcan en la fórmula-condición deben pertenecer a un esquema
{t | ∃u( de relación, menos quizá, t.
3. La fórmula debe ser segura.
((u ∈ Analistas) ∨ (u ∈ Programadores))
∧
Fórmulas seguras:
(t[Nombre] = u[Nombre])
Es posible que el resultado de una expresión sea infinito, por ejemplo:
∧
{t | ¬ (t ∈ R)}
(t[Dirección] = u[Dirección])
Se introduce el concepto de dominio.
∧ dom(P) es el conjunto de todos los valores a los que P hace referencia
(t[teléfono] = u[teléfono]) Se dice que una expresión {t | P(t)} es segura si todos los valores que aparecen en el resultado
∧ son valores de dom(P). La expresión {t | ¬ (t ∈ R)} no es segura:
(∃v∈Proyectos( v[DNIDir] = u[DNI]) dom(¬ (t ∈ R)) es el conjunto de todos los valores que aparecen en R. Sin embargo, es posible
) tener una tupla t que no esté en préstamo que contenga valores que no aparezcan en R.
}
Join natural
r1(A,B) r2(A,C,D)
{t | ∃ u ∈ r1(∃ v ∈ r2 (t[A] = u[A] ∧ t[B] = u[B] ∧ t[C] = v[C] ∧ t[D] = v[D] ∧ u[A] = v[A]}
2-32 2-33
10. Bases de datos y sistemas de información Bases de datos y sistemas de información
2.2.3.3.3. Ejemplos
2.2.3.3. Cálculo relacional de dominios - Deseamos formar un esquema de relación con todos los empleados de la empresa.
2.2.3.3.1. Forma general de una consulta
{<dni,nom,dir,tel> | < dni,nom,dir,tel> ∈ (Programadores ∨ Analistas)}
{<x1,....,xn> | P(x1, x2, ..., xn)} con xi variables de dominio
Selección
- Trabajadores que trabajan entre 10 y 20 horas (ambas cantidades inclusive) en algún proyecto.
Ejemplo
Entre10Y20 <-- σ(Horas>=10 and Horas<=20)(Distribución)
- códigos de proyectos en los que trabaja el empleado con DNI 4
ProyectosDNI4 <-- (σ(DNIEmp=4)(Distribución))
DNI’s: 1,4,5
{t | (t∈ Distribución) ∧ (t[DNIEmp] = 4)}
{<cod> | ∃desc, dni((<cod,desc,dni>∈ Distribución) ∧ dni = 4) } {t | (t ∈ Distribución) ∧ (t[Horas]>=10) ∧ (t[Horas]<=20)}
{<dni> | ∃ c,h(<c,dni,h> ∈ Distribución ∧ h >=10 ∧ h <=20)}
{<cod> | ∃desc (<cod,desc, 4>∈ Distribución) }
Producto Cartesiano
2.2.3.3.2. Fórmulas en el cálculo relacional de dominios Queremos conocer los nombres, direcciones y teléfonos de los empleados que dirigen algún
Pueden ser proyecto:
- átomos
- fórmulas compuestas 1.1 Datos de todos los empleados
- átomos Empleados ← Programadores U Analistas
1.- < x1, ..., xn > ∈ r donde r es una relación con n atributos donde xi son variables de dominio Empleados(DNI, Nombre,Dirección,Teléfono)
o constantes de dominio.
1.2 Hacemos el producto cartesiano con los DNI’s de los directores de proyecto:
2.- x θ y, donde x y y son variables de dominio y θ es un operador de comparación (<,>,= ...). DNIDirPorEmpleados ← π DNIDir(Proyectos) x Empleados
DNIDirPorEmpleados (DNIDir, DNI, Nombre,Dirección,Teléfono)
3.- x θ c, donde x variable de dominio, c un valor del dominio de x y θ es un operador de
comparación (<,>,= ...). 1.3 Nos quedamos con los datos de los directores de proyecto
Fórmulas Compuestas DatosDirProyecto ← π Nombre, Dirección, Teléfono( σ DNIDir = DNI(DNIDirPorEmpleados))
DatosDirProyecto(Nombre,Dirección,Teléfono)
- Un átomo es una fórmula.
Si F es una fórmula (F) y ¬F también son fórmulas. {t | ∃u(
Si F1 y F2 son formulas entonces F1 ∧ F2, F1∨F2 y F1⇒F2 también son fórmulas. ((u ∈ Analistas) ∨ (u ∈ Programadores))
Se pueden usar ∀y ∃ para ligar las variables de tupla. Si F(t) es una fórmula en la que aparece ∧
libre la variable de dominio x, entonces las siguientes también son fórmulas: (t[Nombre] = u[Nombre])
∀x, P(x) ∧
∃ x, P(x) (t[Dirección] = u[Dirección])
∧
Una variable de tupla que está cuantificada se dice ligada cuando aparece en una fórmula (t[teléfono] = u[teléfono])
afectada por un cuantificador (∀,∃). ∧
(∃v∈Proyectos( v[DNIDir] = u[DNI])
)
}
{<n,dir,t> | ∃dni(
((<dni,n,dir,t> ∈ Analistas) ∨ (<dni,n,dir,t> ∈ Programadores))
∧
(∃cod,descr (<cod,descr,dni>∈Proyectos)
}
2-34 2-35
11. Bases de datos y sistemas de información
2.2.3.3.4. Significado de una fórmula. Fórmulas seguras.
Para que tengan una fórmula {<x1,...,xn>| P(<x1,...,xn>)} del calculo relacional de dominios
tenga significado debe cumplir:
1. Todas la variables deben estar ligadas, exceptuando <x1,...,xn> que es libre.
2. La fórmula debe ser segura.
Fórmulas seguras:
Son fórmulas no-seguras las que contienen alguna subfórmula capaz de generar un número
infinito de tuplas.
{ <dni,nom,dir,tel> | (<dni,nom,dir,tel> ∈ programadores) }
En el cálculo relacional de dominios también hay que tener en cuenta la forma de las fórmulas
dentro de las instrucciones “existe” y “para todo”. Considérese la expresión
{<x> | ∃ y (<x, y ∈ r) ∧ ∃ z (¬ (<x, z> ∈ r) ∧ P(x, z))}
donde P es una fórmula que implica a x y a z. Se puede probar la primera parte de la fórmula, ∃
y (<x, y ∈ r), tomando en consideración sólo los valores de r. Sin embargo, para probar la
segunda parte de la fórmula, ∃ z (¬ (<x, z> ∈ r) ∧ P(x, z)), hay que tomar en consideración
valores de z que no aparecen en r. Dado que todas las relaciones son finitas, no aparece en r un
número infinito de valores. Por tanto, no resulta posible en general probar la segunda parte de la
fórmula ∃ z (¬ (<x, z> ∈ r) ∧ P(x, z)), hay que tomar en consideración valores de z que no
aparecen en r. Dado que todas las relaciones son finitas, no aparece en r un número infinito de
valores. Por tanto, no es posible en general probar la segunda parte de la fórmula sin tomar en
consideración un número infinito de valores de z. En vez de eso, se añaden ligaduras para
prohibir expresiones como la anterior.
Condiciones de seguridad:
Se dice que la expresión
{<x1, x2, ..., xn> | P(x1, x2, ..., xn)}
es segura si se cumplen todas las condiciones siguientes:
1. Todos los valores que aparecen en las tuplas de la expresión son valores de dom(P).
2. Para cada subfórmula “existe” de la forma ∃ x (P1(x)), la subfórmula es cierta si y sólo si
hay un valor x en dom(P1) tal que P1(x) es verdadero.
3. Para cada subfórmula “para todo” de la forma ∀ x (P1(x)), la subfórmula es verdadera si y
sólo si P1(x) es verdadero para todos los valores x de dom(P1).
Teorema
Es equivalente el poder expresivo de
- el álgebra relacional
- el cálculo relacional de tuplas para fórmulas seguras
- el cálculo relacional de dominios para fórmulas seguras
2-36