El cálculo de tuplas es un cálculo creado e introducido por Edgar F. Codd como parte del modelo relacional , con el fin de proporcionar un lenguaje declarativo de consulta de bases de datos para la manipulación de datos en este modelo . Sirvió de inspiración para los lenguajes de consulta de bases de datos QUEL y SQL , de los cuales este último, aunque mucho menos fiel al modelo relacional y al cálculo originales, es ahora el estándar de facto; un dialecto de SQL es utilizado por casi todos los sistemas de gestión de bases de datos relacionales . Michel Lacroix y Alain Pirotte propusieron el cálculo de dominio , más cercano a la lógica de primer orden , y junto con Codd demostraron que ambos cálculos (así como el álgebra relacional ) son equivalentes en poder expresivo . Posteriormente, los lenguajes de consulta para el modelo relacional se denominaron relacionalmente completos si podían expresar al menos todas estas consultas.
Definición
Base de datos relacional
Dado que el cálculo es un lenguaje de consulta para bases de datos relacionales , primero debemos definir una base de datos relacional. El elemento básico de una base de datos relacional es el dominio (similar, pero no idéntico, a un tipo de dato ). Una tupla es una secuencia finita de atributos , que son pares ordenados de dominios y valores. Una relación es un conjunto de tuplas (compatibles). Si bien estos conceptos relacionales se definen matemáticamente, dichas definiciones se corresponden vagamente con los conceptos tradicionales de bases de datos. Una tabla es una representación visual aceptada de una relación; una tupla es similar al concepto de fila .
Primero asumimos la existencia de un conjunto C de nombres de columnas, ejemplos de los cuales son "nombre", "autor", "dirección", etcétera. Definimos los encabezados como subconjuntos finitos de C. Un esquema de base de datos relacional se define como una tupla S = ( D , R , h ) donde D es el dominio de valores atómicos (consulte el modelo relacional para obtener más información sobre las nociones de dominio y valor atómico ), R es un conjunto finito de nombres de relaciones, y
- h : R → 2 C
una función que asocia un encabezado con cada nombre de relación en R. (Tenga en cuenta que esto es una simplificación del modelo relacional completo, donde hay más de un dominio y un encabezado no es solo un conjunto de nombres de columna, sino que también asigna estos nombres de columna a un dominio). Dado un dominio D, definimos una tupla sobre D como una función parcial que asigna algunos nombres de columna a un valor atómico en D. Un ejemplo sería (nombre : "Harry", edad : 25).
- t : C ⇸ D
El conjunto de todas las tuplas sobre D se denota como T D . El subconjunto de C para el cual se define una tupla t se llama dominio de t (que no debe confundirse con el dominio en el esquema) y se denota como dom ( t ).
Finalmente, definimos una base de datos relacional dado un esquema S = ( D , R , h ) como una función
- db : R → 2 T D
que asigna los nombres de las relaciones en R a subconjuntos finitos de T D , de tal manera que para cada nombre de relación r en R y tupla t en db ( r ) se cumple que
- dom ( t ) = h ( r ).
Este último requisito simplemente indica que todas las tuplas de una relación deben contener los mismos nombres de columna, es decir, los definidos para ella en el esquema.
Átomos
Para la construcción de las fórmulas asumiremos un conjunto infinito V de variables de tupla. Las fórmulas se definen dado un esquema de base de datos S = ( D , R , h ) y un tipo de función parcial : V ⇸ 2 C , llamado en la asignación de tipo , que asigna encabezados a algunas variables de tupla. Luego definimos el conjunto de fórmulas atómicas A [ S , tipo ] con las siguientes reglas:
- si v y w en V , a en tipo ( v ) y b en tipo ( w ) entonces la fórmula v . a = w . b está en A [ S , tipo ],
- si v en V , a en tipo ( v ) y k denota un valor en D, entonces la fórmula v . a = k está en A [ S , tipo ], y
- si v en V , r en R y tipo ( v ) = h ( r ) entonces la fórmula r ( v ) está en A [ S , tipo ].
Ejemplos de átomos son:
- ( t .age = s .age) — t tiene un atributo de edad y s tiene un atributo de edad con el mismo valor.
- ( t .name = "Codd") — la tupla t tiene un atributo name y su valor es "Codd"
- Libro( t ) — la tupla t está presente en la relación Libro.
La semántica formal de tales átomos se define dado una base de datos db sobre S y una vinculación de variables de tupla val : V → T D que asigna variables de tupla a tuplas sobre el dominio en S :
- v . a = w . b es verdadero si y solo si val ( v )( a ) = val ( w )( b )
- v . a = k es verdadero si y solo si val ( v )( a ) = k
- r ( v ) es verdadero si y solo si val ( v ) está en db ( r )
Fórmulas
Los átomos se pueden combinar en fórmulas, como es habitual en la lógica de primer orden, con los operadores lógicos ∧ (y), ∨ (o) y ¬ (no), y podemos usar el cuantificador existencial (∃) y el cuantificador universal (∀) para vincular las variables. Definimos el conjunto de fórmulas F [ S , tipo ] inductivamente con las siguientes reglas:
- cada átomo en A [ S , tipo ] también está en F [ S , tipo ]
- Si F 1 y F 2 están en F [ S , tipo ] entonces la fórmula F 1 ∧ F 2 también está en F [ S , tipo ]
- Si F 1 y F 2 están en F [ S , tipo ] entonces la fórmula F 1 ∨ F 2 también está en F [ S , tipo ]
- Si F está en F [ S , tipo ] entonces la fórmula también está en F [ S , tipo ]
- Si v está en V , H es un encabezado y F es una fórmula en F [ S , tipo [ v → H ] ] entonces la fórmula también está en F [ S , tipo ], donde tipo [ v → H ] denota la función que es igual a tipo excepto que mapea v a H ,
- Si v está en V , H es un encabezado y F es una fórmula en F [ S , tipo [ v → H ] ] entonces la fórmula también está en F [ S , tipo ]
Ejemplos de fórmulas:
- t.name = "CJ Date" ∨ t.name = "H. Darwen"
- Libro( t ) ∨ Revista( t )
- " Fecha del juez judicial "" modelo relacional "
Nótese que la última fórmula indica que todos los libros escritos por CJ Date tienen como tema el modelo relacional. Como es habitual, omitimos los paréntesis si esto no genera ambigüedad en la semántica de la fórmula.
Supondremos que los cuantificadores cuantifican sobre el universo de todas las tuplas sobre el dominio en el esquema. Esto conduce a la siguiente semántica formal para fórmulas dada una base de datos db sobre S y una vinculación de variables de tupla val : V → T D :
- F 1 ∧ F 2 es verdadero si y solo si F 1 es verdadero y F 2 es verdadero,
- F 1 ∨ F 2 es verdadera si y solo si F 1 es verdadera o F 2 es verdadera o ambas son verdaderas,
- es verdadero si y solo si F no es verdadero,
- es verdadero si y solo si existe una tupla t sobre D tal que dom ( t ) = H y la fórmula F es verdadera para val [ v → t ] , y
- es verdadero si y solo si para todas las tuplas t sobre D tales que dom ( t ) = H la fórmula F es verdadera para val [ v → t ] .
Consultas
Finalmente, definimos cómo se ve una expresión de consulta dado un esquema S = ( D , R , h ):
- { v : H | f ( v ) }
donde v es una variable de tupla, H un encabezado y f ( v ) una fórmula en F [ S , type ] donde type = { ( v , H ) } y con v como su única variable libre. El resultado de dicha consulta para una base de datos dada db sobre S es el conjunto de todas las tuplas t sobre D con dom ( t ) = H tales que f es verdadera para db y val = { ( v , t ) }.
Ejemplos de expresiones de consulta son:
Restricción semántica y sintáctica
Consultas independientes del dominio
Debido a que la semántica de los cuantificadores es tal que cuantifican sobre todas las tuplas del dominio en el esquema, puede ocurrir que una consulta devuelva un resultado diferente para una base de datos determinada si se presupone otro esquema. Por ejemplo, consideremos los dos esquemas S 1 = ( D 1 , R , h ) y S 2 = ( D 2 , R , h ) con dominios D 1 = { 1 }, D 2 = { 1, 2 }, nombres de relación R = { r 1 } y encabezados h = { ( r 1 , { a }) }. Ambos esquemas tienen una instancia común:
- db = { ( r 1 , { ( a , 1) } ) }
Si consideramos la siguiente expresión de consulta
- { t : {a} | t .a = t .a }
Entonces, su resultado en la base de datos es { (a : 1) } bajo S 1 o { (a : 1), (a : 2) } bajo S 2. También será evidente que si consideramos el dominio como un conjunto infinito, el resultado de la consulta también será infinito. Para resolver estos problemas, limitaremos nuestra atención a aquellas consultas que son independientes del dominio , es decir, las consultas que devuelven el mismo resultado para una base de datos bajo todos sus esquemas.
Una propiedad interesante de estas consultas es que, si asumimos que las variables de tupla abarcan tuplas del llamado dominio activo de la base de datos (el subconjunto del dominio que aparece en al menos una tupla de la base de datos o en la expresión de consulta), la semántica de las expresiones de consulta no cambia. De hecho, en muchas definiciones del cálculo de tuplas, así es como se define la semántica de los cuantificadores, lo que hace que todas las consultas sean, por definición, independientes del dominio.
Consultas seguras
Para limitar las expresiones de consulta de modo que expresen solo consultas independientes del dominio, se suele introducir una noción sintáctica de consulta segura . Para determinar si una expresión de consulta es segura, derivaremos dos tipos de información de una consulta. La primera es si un par variable-columna t . a está vinculado a la columna de una relación o una constante, y la segunda es si dos pares variable-columna están directa o indirectamente igualados (denotado t . v == s . w ).
For deriving boundedness we introduce the following reasoning rules:
- in v.a = w.b no variable-column pair is bound,
- in v.a = k the variable-column pair v.a is bound,
- in r(v) all pairs v.a are bound for a in type(v),
- in f1 ∧ f2 all pairs are bound that are bound either in f1 or in f2,
- in f1 ∨ f2 all pairs are bound that are bound both in f1 and in f2,
- in no pairs are bound,
- in a pair w.a is bound if it is bound in f and w≠v, and
- in a pair w.a is bound if it is bound in f and w≠v.
For deriving equatedness we introduce the following reasoning rules (next to the usual reasoning rules for equivalence relations: reflexivity, symmetry and transitivity):
- in v.a = w.b it holds that v.a is equal to w.b,
- in v.a = k no pairs are equated,
- in r(v) no pairs are equated,
- in f1 ∧ f2 it holds that v.a is equal to w.b if it holds either in f1 or in f2,
- in f1 ∨ f2 it holds that v.a is equal to w.b if it holds both in f1 and in f2,
- in no pairs are equated,
- in Se cumple que w . a es igual a x . b si se cumple en f y w ≠ v y x ≠ v , y
- enSe cumple que w . a es igual a x . b si se cumple en f y w ≠ v y x ≠ v .
Entonces decimos que una expresión de consultaes seguro si
- para cada nombre de columna a en H podemos derivar que v . a se iguala con un par ligado en f ,
- para cada subexpresión de f de la forma Podemos derivar que para cada nombre de columna a en G podemos derivar que w . a se iguala con un par ligado en g , y
- para cada subexpresión de f de la forma Podemos derivar que para cada nombre de columna a en G podemos derivar que w . a se iguala con un par ligado en g .
La restricción a expresiones de consulta seguras no limita la expresividad, ya que todas las consultas independientes del dominio que podrían expresarse también pueden expresarse mediante una expresión de consulta segura. Esto se puede demostrar mostrando que para un esquema S = ( D , R , h ), un conjunto dado K de constantes en la expresión de consulta, una variable de tupla v y un encabezado H, podemos construir una fórmula segura para cada par v . a con a en H que indique que su valor está en el dominio activo. Por ejemplo, supongamos que K ={1,2}, R ={"r"} y h = { ("r", {"a, "b"}) } entonces la fórmula segura correspondiente para v .b es:
Esta fórmula, por lo tanto, puede utilizarse para reescribir cualquier expresión de consulta insegura en una expresión de consulta segura equivalente, añadiendo dicha fórmula a cada variable v y nombre de columna a en su tipo donde se utilice en la expresión. En la práctica, esto significa que permitimos que todas las variables varíen en el dominio activo, lo cual, como ya se explicó, no cambia la semántica si la consulta expresada es independiente del dominio.
Sistemas
- DES – Una herramienta educativa para trabajar con cálculo relacional de tuplas y otros lenguajes formales.
- WinRDBI: una herramienta educativa para trabajar con cálculo relacional de tuplas y otros lenguajes formales.
Véase también
Referencias
- Codd, EF (junio de 1970). "Un modelo relacional de datos para grandes bancos de datos compartidos". Communications of the ACM . 13 (6): 377– 387. doi : 10.1145/362384.362685 .
- Modelo relacional
- Cálculos lógicos