• No se han encontrado resultados

Tema 4 : Lenguajes formales del modelo relacional

N/A
N/A
Protected

Academic year: 2021

Share "Tema 4 : Lenguajes formales del modelo relacional"

Copied!
16
0
0

Texto completo

(1)

Bases de Datos y Sistemas de la Información – Facultad de Informática – Universidad Complutense de Madrid

Tema 4 : Lenguajes formales del modelo relacional

Se trata de los lenguajes formales de manipulación de datos que dan el soporte teórico a los lenguajes de consulta relacionales. Para ellos se parte de los esquemas de relaciones ya definidos.

Vamos a ver 3 lenguajes: 1 Álgebra relacional

2 Cálculo relacional de tuplas  SQL 3 Cálculo relacional de dominios  QBE

4.1 Álgebra relacional

Lenguaje de manipulación de datos DML (Data Management Language) de tipo procedimental (se dice cómo se deben hacer las cosas, no qué se desea obtener) que permite consultar la BD. Define operaciones sobre una o dos relaciones que se pueden componer entre ellas. El resultado es una nueva relación. No hay operaciones para modificar el contenido de una tabla, sólo se pueden crear tablas nuevas. Así, si se quiere definir la eliminación de una fila de un tabla T se define una nueva tabla T’ que contiene todas las filas de T salvo la borrada.

T’  expr(T)

Expr(T) será una expresión del álgebra relacional produciendo el resultado deseado. En álgebra relacional se parte de un esquema inicial y se van definiendo nuevas tablas. Cada nueva tabla se puede usar en la definición de la siguiente.

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.

4.1.1 Operaciones entre conjuntos: unión, intersección, diferencia Son operaciones binarias que requieren:

(2)

- En el momento de efectuar la operación se supone que el orden de las columnas es el mismo.

Def.:

Dados dos esquemas de relación R(A1,....,An), S(A1,....,An)

 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.

 La operación intersección de R y S , y se denota (R  S)(A1,....,An), 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.

 La operación diferencia de R y S , y se denota (R \ S)(A1,....,An), 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.: Partimos del siguiente esquema relacional:

 Programadores(DNI, Nombre, Apellidos, Dirección, Teléfono)  Analistas(DNI, Nombre, Apellidos, Dirección, Teléfono)  Proyectos(Código, DNIDir, Descripción)

 Distribución(CodigoPr, DNIEmp, Horas)

Distribución relaciona empleados con proyectos. Todos los empleados son programadores o

analistas (algunos las dos cosas). Ejemplos:

- Deseamos formar un esquema de relación con todos los empleados de la empresa. Solución:

Empleados  Programadores

U

Analistas

- Queremos conocer a los empleados que son a la vez programadores y analistas. Solución:

ProgramadoresYAnalistas  Programadores

Analistas - Empleados que son analistas pero no programadores

Solución:

SoloAnalistas  Analistas

\

programadores

- Empleados que son sólo Programadores o SoloAnalistas Solución:

SoloProgOSoloAnalistas  SoloAnalistas

U

SoloProgramadores SoloProgOSoloAnalistas  Empleados

\

ProgramadoresYAnalistas

4.1.2 Operaciones que eliminan partes de una relación: proyección y selección Proyección

Def:

Sea R(A1,..,An) un esquema de relación y r instancia válida de R. La operación de proyección de R respecto a los atributos B1, …,Bk con{ B1, …,Bk}  { A1,..,An } se denota

B1, …,Bk(R) y produce un esquema de relación que tiene:

(3)

- como atributos B1, …,Bk

- como instancias válidas los valores en B1, …,Bk de las instancias válidas de R. Ejemplo:

- Determinar los códigos de los proyectos en los que hay algún empleado trabajando. ProyectosEnMarcha 

CodigoPr(Distribución)

Obs.:

- Para que la expresión

lista1(

lista2(R)) tenga sentido debe ser lista1lista2. En este caso

lista1(

lista2(R)) =

lista1(R). Selección

Def:

Sea R(A1,..,An) un esquema de relación y r instancia válida de R. La operación de selección de R respecto a una condición C se denota

C(R) y produce un esquema de relación:

- Atributos: (A1,..,An)

- Instancias válidas: las de R tras eliminar las filas que no cumplan C.

C es la condición de selección es una fórmula construida de la siguiente forma: 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, <, >, <=, >=, =. 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))

- Código y descripción de los 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)) Obs.:

(4)

- Se verifica:

C1 (

C2(R)) ) =

C2 (

C1(R)) ) =

C1 AND C2 (R) 4.1.3 Operación de renombramiento

Def.

Sea R(A1,..,An) esquema de relación. La operación de renombramiento se denota por

S(B1,...,Bn)(R) y produce un nuevo esquema de relación con: - Nombre: S

- Atributos: (B1,...,Bn), donde cada Bi es un nuevo nombre de atributo con el mismo dominio que Ai.

- Instancias válidas: Las de R Obs.:

- 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).

- La notación S  R también cambia el nombre a un esquema de relación. Ej.:

- DNI’s de empleados que no trabajan ni dirigen ningún proyecto: DNIEmpleados 

DNI(Programadores

U

Analistas) DNIEmpleadosActivos 

(DNI)

(

DNIEmp(Distribución)

)

U

(DNI)

(

DNIDir(Proyectos)

)

DNIEmpleadosNoActivos  DNIEmpleados

\

DNIEmpleadosActivos 4.1.4 Operaciones de combinación de filas

Producto Cartesiano Def.:

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:

- Atributos: (atrib. de R1)

U

(atrib. de R2). Si tienen algún nombre de atributo A común, este se convierte en R1.A, R2.A

- Instancias: Son de la forma r1xr2, con r1 instancia de R1, r2 instancia de R2. Ej.:

Queremos conocer los nombres, direcciones y teléfonos de los empleados que dirigen algún proyecto:

1 Datos de todos los empleados

Empleados  Programadores

U

Analistas

Empleados(DNI, Nombre,Dirección,Teléfono)

2 Hacemos el producto cartesiano con los DNI’s de los directores de proyecto:

DNIDirPorEmpleados 

DNIDir

(Proyectos) x Empleados

(5)

3 Nos quedamos con los datos de los directores de proyecto

DatosDirProyecto 

Nombre, Dirección, Teléfono

(

DNIDir = DNI

(DNIDirPorEmpleados))

DatosDirProyecto(Nombre,Dirección,Teléfono)

Join (reunión) Def.:

Se define la reunión de R1 y R2 ( R1 R2) como: R1 R2 =

C(R1 x R2)

Donde c es una conjunción de operaciones booleanas: C= C1 AND C2 AND C3 ...

Ej.:

Queremos conocer los nombres, direcciones y teléfonos de los empleados que dirigen algún proyecto:

1. Datos de todos los empleados

Empleados  Programadores

U

Analistas

Empleados(DNI, Nombre,Dirección,Teléfono)

2. Datos de los directores de proyecto

DatosDirProyecto 

Nombre, Dirección, Teléfono

( Proyectos

Empleados)

Ej.:

Obtener los nombres de todos los empleados que trabajan en algún proyecto más de 10 horas: Dos formas:

NombresTrabajanMasde10 

Nombre(

Empleados

Distribución)

Resultado Nombre Herminia Calixto Teodora Evaristo

Equijoin (equirreunión) Def.:

Se llaman operación Equijoin a todo join cuya condición es una conjunción de igualdades. Obs.:

Dada una instancia válida de un equijoin con condición C, se verifica que todas las tuplas tienen valores repetidos para los atributos de la condición C.

Ej.: R1(A,B) A B C DNIDir=DNI DNIEmp=DNI AND Horas>10 C

(6)

1 B1 2 B2 2 B3 R2(C,D) C D 2 D1 2 D2 R1 |x|(A=C) R2 A B C D 2 B2 2 D1 2 B2 2 D2 2 B3 2 D1 2 B3 2 D2 Join natural Def.:

Sean R1(A1,...,An) y R2(B1,...,Bm) dos esquemas de relación y (C1,...,Cj) la lista de los atributos comunes a ambas relaciones.

La operación join natural (reunión natural) de R1 y R2, Produce un esquema de relación R1 R2 tal que:

- Atributos: { A1,...,An } U { B1,...,Bm } (los atributos comunes sólo aparecen una vez).

- Instancias válidas: Dada r1 instancia válida de R1 y r2 de R2, se obtiene una instancia válida de la unión natural combinando todas las tuplas u de r1 y v de r2 tales que u y v coinciden sobre { C1,...,Cj }.

Ej.:

Datos personales de los directores de proyecto. DNIDirPro 

(DNI)

(

DNIDir

(Proyectos))

DatosDirProyecto  DNIDirPro (Programadores U Analistas) Teorema:

Sean R1 y R2 dos esquemas de relación con atributos comunes (C1,...,Cj), Donde los atributos de A son (A1,...,An, C1,...,Cj)

Y los de B (B1,...,Bm, C1,...,Cj)

Entonces R1 R2 = (salvo el orden de los atributos)

(A1,A2,...,An,B1,...,Bm,C1,...,Cj)

(

A1,A2,...,An,B1,...,Bm,R1.C1,...,R1.Cj

( 

(R1.C1 = R2.C2 AND ,...,AND R1.Cj=R2.Cj)(R1 x R2) )) Ej.: R1(A,B) A B 1 B1 2 B2 2 B3 R2(C,D)

(7)

A C 2 C1 2 C2 R1 x R2 R1.A B R2.A C 1 B1 2 C1 1 B1 2 C2 2 B2 2 D1 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 Ej.:

Obtener los datos de todos datos de los empleados que comparten domicilio con otro empleado. Empleados(dni,nombre,domicilio)

DNI Nombre Domicilio

1 Aniceto Jazmín 1

2 Eulalia Rosa 3

3 Teodora Clavel 2

4 Macario Rosa 3

5 Anacleto Jazmín 1

E1.DNI<>E2.DNI AND E1.Domicilio=E2.Domicilio(E1(Empleados) x  E2(Empleados)) Observación

- Los expresiones booleanas NULL op X, X op NULL siendo op operador booleano son falsos (incluso el caso NULL = NULL).

- Como resultado de lo anterior puede ser que alguna instancia válida de R1 |x| R1 tenga menos tuplas que la correspondiente instancia de R1.

Ej.: Analistas |x| Analistas DNI 4 5 6

(8)

4.1.5 Divisiones

Idea: Se utilizan cuando se busca que algún atributo de una relación tome (al menos) todos los valores de otro atributo en otra relación.

Def.:

Sea R(A1,...,An), S(B1,...,Bm) con {B1,....,Bm}{A1,...,An}. Entonces la operación división RS produce un esquema de relación

 Atributos: {C1,...,Cj} = {A1,...,An}\{B1,...,Bm}

 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. Ej.: T = RS, STR R A B A1 B1 A2 B1 A3 B1 A4 B1 A1 B2 A3 B2 A2 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

Definición

Un lenguaje que permita expresar todas las operaciones del álgebra relacional se llama

(9)

Observación:

No todas las consultas imaginables se pueden representar en el álgebra relacional. Por ejemplo no se pueden expresar las que tienen relación con las operaciones de recuento de filas tipo ¿En cuántos proyectos trabaja Bertoldo? Veremos que en SQL sí se pueden expresar estas consultas. Existe una variante del álgebra relacional, llamada álgebra relacional extendida que sí considera el caso de los recuentos.

4.1.5 Álgebra Relacional Extendida

Al considerar el caso de contar vemos en seguida que tenemos que esto conduce al caso de las repeticiones. Por ejemplo, considerar la consulta ¿En cuántos proyectos trabaja Bertoldo? tenemos que una forma natural de hacerlo es considerar la tabla

distribución(codPr,DniEmp,Horas) y contar el número de repeticiones del DNI de Bertoldo

(otra forma sería quedarse con los proyectos de Bertoldo y contarlos, pero la forma sugerida aquí también es natural). Pero si consideramos que las consultas devuelven conjuntos entonces nos saldrá siempre el valor 0 o 1 (0 si no participa en ningún proyecto, 1 si participa en 1 o más). Para poder contar valores repetidos debemos cambiar la estructura soporte de las relaciones de conjuntos a multiconjuntos. En el caso de los multiconjuntos cada elemento tiene un cardinal (número de repeticiones). El orden, como en el caso de los conjuntos, no importa. ERA (Extended Relational Algebra, definida por primera vez en ) se define sobre multiconjuntos. Incluye las mismas operaciones que el Álgebra Relacional, además de 3 operaciones nuevas:

La proyección extendida

π

α E se define de forma análoga a la proyección normal, pero ahora α en

lugar de un conjunto de atributos es una secuencia de expresiones sobre atributos,

 El operador de unicidad δ E elimina los repetidos del multiconjunto E. El cardinal de los elementos en E queda a uno.

 El operador de agrupación

Γ

α,f E donde α es una lista de atributos por la que se ordena, y f es una tupla de funciones de agrupación que se aplica sobre cada grupo considerado como multiconjunto. Cada valor distinto de α da lugar a un multiconjunto de tuplas que incluye todas los atributos de E que no están en α. El resultado es una sola tupla por cada valor distinto de α en E. Esta tupla incluye los atributos de α seguida por el valor indicado por f. Se suele suponer que f es de la forma (A1  f1,…, An  fn,…), indicando que la función de agrupación genera nuevos atributos A1,…An. El valor del atributo Ai para cada multiconjunto de agrupación se obtiene aplicando fi.

4.2 Cálculo relacional de tuplas (TRC)

Lenguaje no procedimental.

Forma general de una consulta en cálculo relacional de tuplas: {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.

Ejemplo

Datos personales del empleado con DNI 3:

{t | ((t  Programadores)  (t  Analistas))  (t.DNI = 3]) }

4.2.1 Fórmulas en el cálculo relacional de tuplas Pueden ser átomos y fórmulas compuestas.

 Átomos.

Los átomos tienen una de las siguientes formas:

1.- x  R. Con x una variable de tupla y R un esquema de relación. Una variable de tupla representa un fila genérica de una instancia válida de R.

(10)

2.- t.A p 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 variable de tupla s, y op es un operador de comparación (<,>,= ...)

El dominio de los atributos A y B debe ser compatible.

Obs.: Con t[A] o t.A denotamos el valor de la tupla t en el atributo A.

3.- t.A op c, c op t.A, 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 op es un operador de comparación (<,>,= ...).

 Fórmulas compuestas

Para construir una fórmula se usan las siguientes reglas: 1.- Las fórmulas básicas son fórmulas.

2.- Si F es una fórmula (F) y F también son fórmulas.

3.- Si F1 y F2 son formulas entonces F1  F2, F1F2 y F1F2 también son fórmulas. 4.- 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 tupla t, entonces las siguientes también son fórmulas:

tR, P(t)  tR, P(t)

Una variable de tupla que está cuantificada se dice ligada cuando aparece en una fórmula afectada por un cuantificador (,).

Ejemplos

- Deseamos formar un esquema de relación con todos los empleados de la empresa.

{t | (t

Programadores)

(t

Analistas)} t es libre

- Queremos conocer a los empleados que son a la vez programadores y analistas.

{t | (t

Programadores)

(t

Analistas)} DNI: 4

- Empleados que son analistas no programadores (SoloAnalistas  Analistas \ Programadores) {t | (t

Analistas)

 

(t

Programadores)} DNI : 5,6,7

- Empleados que son sólo Programadores o SoloAnalistas: {t | ((t

Programadores)

 

(t

Analistas))



(11)

Observación: Para que tenga sentido una consulta en el cálculo relacional de tuplas de la forma {t | P(t) } t debe ser una variable libre.

4.2.3 Expresión de operaciones del álgebra relacional en el cálculo relacional de tuplas Selección

Ej:

- proyectos en los que trabaja el empleado con DNI 4 ProyectosDNI4  ((DNIEmp=4)(Distribución)) {t | (t Distribución)  (t.DNIEmp = 4)}

- Trabajadores que trabajan entre 10 y 20 horas (ambas cantidades inclusive) en algún proyecto. 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))} Proyección Ej:

- Determinar los códigos de los proyectos en los que hay algún empleado trabajando. ProyectosEnMarcha 

CodigoPr(Distribución)

{t | p  Distribucion( t.CodigoPr = p.CodigoPr)} Observación

Cuando se quiere hacer que la consulta {t | P(t)}devuelva tuplas de un nuevo esquema de relación, no se incluye ningún átomo de la forma t  r en la condición. Así se supone que t es una tupla de un nuevo esquema de relación, cuyos atributos son los que aparecen en P(t) en expresiones de la forma t.A.

Producto Cartesiano

Queremos conocer los nombres, direcciones y teléfonos de los empleados que dirigen algún proyecto:

1.1 Datos de todos los empleados

Empleados  Programadores

U

Analistas

(12)

1.2 Hacemos el producto cartesiano con los DNI’s de los directores de proyecto: DNIDirPorEmpleados 

DNIDir(Proyectos) x Empleados

DNIDirPorEmpleados (DNIDir, DNI, Nombre,Dirección,Teléfono)

1.3 Nos quedamos con los datos de los directores de proyecto

DatosDirProyecto 

Nombre, Dirección, Teléfono( DNIDir = DNI(DNIDirPorEmpleados))

DatosDirProyecto(Nombre,Dirección,Teléfono)

{t | u(

((u  Analistas)  (u  Programadores)) 

(vProyectos( v.DNIDir = u.DNI)  (t.Nombre = u.Nombre)  (t.Dirección = u.Dirección)  (t.teléfono = u.teléfono) ) } Join natural R1(A,B) R2(A,C,D)

{t |  u  R1( v  R2 (u.A = v.A  t.A = u.A  t.B = u.B  t.C = v.C  t.D = v.D))}

División

Empleados que trabajan en los mismos proyectos que Jacinto {t | (t  Programadores  t Analistas)



 p (p Distribucion  j (( j  Programadores  j Analistas)  j.nombre = Jacinto p.DNIEmp = j.DNI )

 u ((u  Distribucion )  t.DNI = u.DNIEmp  u.CodigoPr = p.CodigoPr) )

}

4.2.4 Significado de una fórmula. Fórmulas seguras.

Para que tengan una fórmula {t | P(t)} del calculo relacional de tuplas esté bien definida debe cumplir:

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 de relación, menos quizá, t.

3. La fórmula debe ser segura. Fórmulas seguras

Es posible que el resultado de una expresión sea infinito, por ejemplo: {t |  (t  R)}

(13)

Para evitar esto se introduce el concepto de dominio: dom(P) es el conjunto de todos los valores a los que P hace referencia, es decir los valores de las instancias de relaciones que aparecen en P.

Def.

Se dice que una consulta {t | P(t)} es segura si:

- todos los valores que aparecen en la respuesta son valores de dom(P).

- Para cada subexpresión de P de la forma R(p(R)), si un valor r asignado a la variable R hace cierto p(r), entonces r contiene sólo valores en Dom(P).

- Para cada subexpresión de P de la forma R(p(R)), si un valor r asignado a la variable R contiene valores fuera de dom(P), entonces no hace cierto p(r).

Ejemplo:

La expresión {t |  (t  R)} no es segura: dom( (t R)) es el conjunto de todos los valores

que aparecen en R. Sin embargo, es posible tener una tupla t en la respuesta que contenga valores que no aparezcan en R.

Teorema

La propiedad de ser una consulta segura en el cálculo relacional de tuplas es indecidible. ¿Solución?

Aunque no hay un criterio para dividir el conjunto de fórmulas entre seguras y no seguras, sí hay criterios correctos pero incompletos para saber si una fórmula es segura. Es decir si el criterio dice que una fórmula es segura lo es, pero si dice que no puede que lo sea o que no lo sea.

4.3 Cálculo relacional de dominios

El cálculo relacional de dominios utiliza variables de dominio que toman sus valores del dominio de un atributo, en lugar de tomarlos de una tupla completa.

4.3.1.1 Forma general de una consulta

{<x1,....,xn> | P(x1, x2, ..., xn)} con xi variables de dominio

Ejemplo

- códigos de proyectos en los que trabaja el empleado con DNI 4 ::REVISAR:: ProyectosDNI4 <-- ((DNIEmp=4)

(Distribución))

{t | (t Distribución)  (t[DNIEmp] = 4)}

{<cod> | desc, dni((<cod,desc,dni> Proyectos)  dni = 4) }

{<cod> | desc (<cod,desc, 4>

Distribución)

}

Obs.:

En el cálculo relacional de dominios se supone un orden predeterminado para los atributos de cada esquema.

(14)

4.3.1.2 Fórmulas en el cálculo relacional de dominios Pueden ser

- átomos

- fórmulas compuestas - átomos

1.- < x1, ..., xn >  r donde r es una relación con n atributos donde xi son variables de dominio o constantes de dominio.

2.- x  y, donde x y y son variables de dominio y  es un operador de comparación (<,>,= ...). 3.- x  c, donde x variable de dominio, c un valor del dominio de x y  es un operador de comparación (<,>,= ...).

Fórmulas Compuestas - Un átomo es una fórmula.

Si F es una fórmula (F) y F también son fórmulas.

Si F1 y F2 son formulas entonces F1  F2, F1F2 y F1F2 también son fórmulas.

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:

x, P(x)  x, P(x)

Una variable de tupla que está cuantificada se dice ligada cuando aparece en una fórmula afectada por un cuantificador (,).

4.3.1.2.1 Ejemplos

- Deseamos formar un esquema de relación con todos los empleados de la empresa.

{<dni,nom,dir,tel> | < dni,nom,dir,tel>

(Programadores

Analistas)} Selección

- Trabajadores que trabajan entre 10 y 20 horas (ambas cantidades inclusive) en algún proyecto.

Entre10Y20 <--

(Horas>=10 and Horas<=20)

(Distribución)

DNI’s: 1,4,5

{t | (t

Distribución)

 (t[Horas]>=10)  (t[Horas]<=20)}

{<dni> |  c,h(<c,dni,h>

Distribución

 h >=10  h <=20)}

Producto Cartesiano

Queremos conocer los nombres, direcciones y teléfonos de los empleados que dirigen algún proyecto:

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

(15)

DNIDirPorEmpleados (DNIDir, DNI, Nombre,Dirección,Teléfono)

1.3 Nos quedamos con los datos de los directores de proyecto

DatosDirProyecto 

Nombre, Dirección, Teléfono

(

DNIDir = DNI

(DNIDirPorEmpleados))

DatosDirProyecto(Nombre,Dirección,Teléfono)

{t | u(

((u  Analistas)  (u  Programadores))  (t[Nombre] = u[Nombre])  (t[Dirección] = u[Dirección])  (t[teléfono] = u[teléfono]) 

(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) }

4.3.1.3 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.

(16)

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

La seguridad de una fórmula en el cálculo de dominios es indecidible.

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

Referencias

Documento similar

En la base de datos de seguridad combinados de IMFINZI en monoterapia, se produjo insuficiencia suprarrenal inmunomediada en 14 (0,5%) pacientes, incluido Grado 3 en 3

En este ensayo de 24 semanas, las exacerbaciones del asma (definidas por el aumento temporal de la dosis administrada de corticosteroide oral durante un mínimo de 3 días) se

En un estudio clínico en niños y adolescentes de 10-24 años de edad con diabetes mellitus tipo 2, 39 pacientes fueron aleatorizados a dapagliflozina 10 mg y 33 a placebo,

• Descripción de los riesgos importantes de enfermedad pulmonar intersticial/neumonitis asociados al uso de trastuzumab deruxtecán. • Descripción de los principales signos

En junio de 1980, el Departamento de Literatura Española de la Universi- dad de Sevilla, tras consultar con diversos estudiosos del poeta, decidió propo- ner al Claustro de la

[r]

SVP, EXECUTIVE CREATIVE DIRECTOR JACK MORTON

Social Media, Email Marketing, Workflows, Smart CTA’s, Video Marketing. Blog, Social Media, SEO, SEM, Mobile Marketing,