En la teoría de bases de datos , el álgebra relacional es una teoría que utiliza estructuras algebraicas para modelar datos y definir consultas sobre ellos con una semántica bien fundamentada . Esta teoría fue introducida por Edgar F. Codd . [ 1 ]
La principal aplicación del álgebra relacional es proporcionar una base teórica para las bases de datos relacionales , en particular para los lenguajes de consulta , entre los que destaca SQL . Las bases de datos relacionales almacenan datos tabulares representados como relaciones . Las consultas sobre bases de datos relacionales también suelen devolver datos tabulares representados como relaciones.
El objetivo principal del álgebra relacional es definir operadores que transformen una o más relaciones de entrada en una relación de salida. Dado que estos operadores aceptan relaciones como entrada y producen relaciones como salida, pueden combinarse y utilizarse para expresar consultas complejas que transforman múltiples relaciones de entrada (cuyos datos se almacenan en la base de datos) en una única relación de salida (los resultados de la consulta).
Los operadores unarios aceptan una única relación como entrada. Algunos ejemplos incluyen operadores para filtrar ciertos atributos (columnas) o tuplas (filas) de una relación de entrada. Los operadores binarios aceptan dos relaciones como entrada y las combinan en una única relación de salida. Por ejemplo, tomar todas las tuplas que se encuentran en cualquiera de las relaciones ( unión ), eliminar las tuplas de la primera relación que se encuentran en la segunda ( diferencia ), extender las tuplas de la primera relación con las tuplas de la segunda relación que cumplen ciertas condiciones, etc.
Introducción
El álgebra relacional recibió poca atención fuera de las matemáticas puras hasta la publicación del modelo relacional de datos de EF Codd en 1970. [ 2 ] Codd propuso dicha álgebra como base para los lenguajes de consulta de bases de datos.
Una relación de aridad n es un conjunto de n - tuplas. El álgebra relacional opera sobre conjuntos homogéneos de tuplas,donde una n - tupla es una tupla (fila; índice j ) [ a ] con n ' tipos de atributos ' (o dominios de datos ), por lo que m es el número de filas de tuplas en una tabla y n es el número de columnas (y todas las entradas en cada columna tienen el mismo ' tipo ' ).
Una relación también tiene una tupla única llamada encabezado , que asigna a cada columna un nombre o atributo único dentro de la relación. Los atributos se utilizan en proyecciones y selecciones.
Operadores de conjunto
El álgebra relacional utiliza la unión de conjuntos , la diferencia de conjuntos y el producto cartesiano de la teoría de conjuntos, y agrega restricciones adicionales a estos operadores para crear otros nuevos. [ 3 ]
Para la unión y la diferencia de conjuntos, las dos relaciones involucradas deben ser compatibles entre sí ; es decir, deben tener el mismo conjunto de atributos. Dado que la intersección de conjuntos se define en términos de unión y diferencia de conjuntos, las dos relaciones involucradas también deben ser compatibles entre sí.
Para que se defina el producto cartesiano, las dos relaciones implicadas deben tener encabezados disjuntos (es decir, no deben tener un nombre de atributo común).
Además, el producto cartesiano se define de manera diferente al de la teoría de conjuntos , en el sentido de que las tuplas se consideran "superficiales" para los fines de la operación. Eso significa que el producto cartesiano de un conjunto de n -tuplas con un conjunto de m -tuplas produce un conjunto de "aplanadas"-tuplas (mientras que la teoría básica de conjuntos habría prescrito un conjunto de 2-tuplas, cada una conteniendo una n- tupla y una m- tupla). En álgebra relacional, el producto cartesianose define formalmente como
La cardinalidad del producto cartesiano es el producto de las cardinalidades de sus factores, es decir, | R × S | = | R | × | S | .
Proyección
Una proyección ( Π ) es una operación unaria escrita comodóndees un conjunto de nombres de atributos. El resultado de dicha proyección se define como el conjunto que se obtiene cuando todas las tuplas en R se restringen al conjunto.
Nota: cuando se implementa en el estándar SQL, la "proyección predeterminada" devuelve un multiconjunto en lugar de un conjunto, y la proyección Π para eliminar datos duplicados se obtiene mediante la adición de la DISTINCTpalabra clave .
Selección
Una selección generalizada ( σ ) es una operación unaria escrita comodonde φ es una fórmula proposicional que consta de átomos según lo permitido en la selección normal y los operadores lógicos.( y ),( o ) y( negación ). Esta selección selecciona todas aquellas tuplas en R para las cuales φ se cumple.
Para obtener una lista de todos los amigos o socios comerciales en una libreta de direcciones, la selección podría escribirse como El resultado sería una relación que contiene todos los atributos de cada registro único donde isFriend es verdadero o donde isBusinessContact es verdadero.
Rebautizar
Un cambio de nombre ( ρ ) es una operación unaria escrita comodonde el resultado es idéntico a R, excepto que el atributo b en todas las tuplas se renombra como atributo a . Esto se usa comúnmente para renombrar el atributo de una relación con el propósito de realizar una unión.
Para cambiar el nombre del atributo "isFriend" a "isBusinessContact" en una relación,podría utilizarse.
También está elnotación, donde R se renombra a x y los atributosse renombran a. [ 4 ]
Uniones y operadores similares a uniones
Extensiones comunes
En la práctica, el álgebra relacional clásica descrita anteriormente se extiende con varias operaciones como uniones externas, funciones agregadas e incluso cierre transitivo. [ 5 ]
Uniones externas
Mientras que el resultado de una unión (o unión interna) consiste en tuplas formadas al combinar tuplas coincidentes en los dos operandos, una unión externa contiene esas tuplas y, además, algunas tuplas formadas al extender una tupla no coincidente en uno de los operandos con valores de "relleno" para cada uno de los atributos del otro operando. Las uniones externas no se consideran parte del álgebra relacional clásica analizada hasta ahora. [ 6 ]
Los operadores definidos en esta sección presuponen la existencia de un valor nulo , ω , que no definimos, para ser utilizado como valores de relleno; en la práctica, esto corresponde al valor NULL en SQL. Para que las operaciones de selección posteriores en la tabla resultante tengan sentido, es necesario asignar un significado semántico a los valores nulos; en el enfoque de Codd, la lógica proposicional utilizada por la selección se extiende a una lógica trivalente , aunque omitimos esos detalles en este artículo.
Se definen tres operadores de unión externa: unión externa izquierda, unión externa derecha y unión externa completa. (En ocasiones se omite la palabra "externa").
unión exterior izquierda
La unión externa izquierda (⟕) se escribe como R ⟕ S donde R y S son relaciones . [ b ] El resultado de la unión externa izquierda es el conjunto de todas las combinaciones de tuplas en R y S que son iguales en sus nombres de atributos comunes, además (en términos generales) de las tuplas en R que no tienen tuplas coincidentes en S.
Como ejemplo, consideremos las tablas Employee y Dept y su unión externa izquierda:
En la relación resultante, las tuplas en S que no tienen valores comunes en los nombres de atributos comunes con las tuplas en R toman un valor nulo , ω .
Dado que no hay tuplas en Dept con un DeptName de Finance o Executive , aparecen ω en la relación resultante donde las tuplas en Employee tienen un DeptName de Finance o Executive .
Sean r 1 , r 2 , ..., r n los atributos de la relación R y sea {( ω , ..., ω )} la relación unitaria sobre los atributos que son únicos de la relación S (aquellos que no son atributos de R ). Entonces, la unión externa izquierda se puede describir en términos de la unión natural (y por lo tanto usando operadores básicos) de la siguiente manera:
unión exterior derecha
La unión externa derecha (⟖) se comporta de forma casi idéntica a la unión externa izquierda, pero se intercambian los roles de las tablas.
La unión externa derecha de las relaciones R y S se escribe como R ⟖ S . [ c ] El resultado de la unión externa derecha es el conjunto de todas las combinaciones de tuplas en R y S que son iguales en sus nombres de atributos comunes, además de las tuplas en S que no tienen tuplas coincidentes en R .
Por ejemplo, consideremos las tablas Employee y Dept y su unión externa derecha:
En la relación resultante, las tuplas en R que no tienen valores comunes en los nombres de atributos comunes con las tuplas en S toman un valor nulo , ω .
Dado que no hay tuplas en Employee con un DeptName de Production , aparecen ω en los atributos Name y EmpId de la relación resultante donde las tuplas en Dept tenían DeptName de Production .
Sean s 1 , s 2 , ..., s n los atributos de la relación S y sea {( ω , ..., ω )} la relación unitaria sobre los atributos que son únicos de la relación R (aquellos que no son atributos de S ). Entonces, al igual que con la unión externa izquierda, la unión externa derecha se puede simular utilizando la unión natural de la siguiente manera:
Unión exterior completa
La unión externa (⟗) o unión externa completa combina, en efecto, los resultados de las uniones externas izquierda y derecha.
La unión externa completa se escribe como R ⟗ S donde R y S son relaciones . [ d ] El resultado de la unión externa completa es el conjunto de todas las combinaciones de tuplas en R y S que son iguales en sus nombres de atributos comunes, además de las tuplas en S que no tienen tuplas coincidentes en R y las tuplas en R que no tienen tuplas coincidentes en S en sus nombres de atributos comunes.
Como ejemplo, consideremos las tablas Employee y Dept y su unión externa completa:
En la relación resultante, las tuplas en R que no tienen valores comunes en los nombres de atributos comunes con las tuplas en S toman un valor nulo , ω . Las tuplas en S que no tienen valores comunes en los nombres de atributos comunes con las tuplas en R también toman un valor nulo , ω .
La unión externa completa se puede simular utilizando las uniones externas izquierda y derecha (y por lo tanto la unión natural y la unión de conjuntos) de la siguiente manera:
- R ⟗ S = ( R ⟕ S ) ∪ ( R ⟖ S )
Operaciones para cálculos de dominio
Hasta ahora, el álgebra relacional introducida no ofrece nada que permita realizar cálculos en los dominios de datos (aparte de la evaluación de expresiones proposicionales que implican igualdad). Por ejemplo, utilizando únicamente el álgebra introducida hasta ahora, no es posible escribir una expresión que multiplique los números de dos columnas, como por ejemplo, un precio unitario por una cantidad para obtener un precio total. Los lenguajes de consulta prácticos cuentan con estas funcionalidades; por ejemplo, la sentencia SQL SELECT permite que las operaciones aritméticas definan nuevas columnas en el resultado , y la palabra clave del Tutorial D proporciona una funcionalidad similar de forma más explícita . [ 7 ] En teoría de bases de datos, esto se denomina proyección extendida . [ 8 ] : 213SELECTunit_price*quantityAStotal_priceFROMtEXTEND
Agregación
Además, calcular diversas funciones sobre una columna, como la suma de sus elementos, tampoco es posible utilizando el álgebra relacional introducida hasta ahora. La mayoría de los sistemas de bases de datos relacionales incluyen cinco funciones de agregación : Suma, Conteo, Promedio, Máximo y Mínimo. En álgebra relacional , la operación de agregación sobre un esquema ( A₁, A₂, ..., An ) se escribe de la siguiente manera:
donde cada A j ′ , 1 ≤ j ≤ k , es uno de los atributos originales A i , 1 ≤ i ≤ n .
Los atributos que preceden a la "g" son atributos de agrupación, que funcionan como una cláusula "group by" en SQL. A continuación, se aplican varias funciones de agregación a cada atributo. La operación se aplica a una relación arbitraria r . Los atributos de agrupación son opcionales; si no se proporcionan, las funciones de agregación se aplican a toda la relación a la que se aplica la operación.
Supongamos que tenemos una tabla llamada Cuenta con tres columnas: Número_de_Cuenta, Nombre_de_Sucursal y Saldo . Queremos encontrar el saldo máximo de cada sucursal. Esto se logra con Nombre_de_Sucursal G Max( Saldo ) ( Cuenta ). Para encontrar el saldo más alto de todas las cuentas, independientemente de la sucursal, podríamos simplemente escribir G Max( Saldo ) ( Cuenta ).
La agrupación a menudo se escribe como Branch_Name ɣ Max( Balance ) ( Account ) en su lugar. [ 8 ]
Cierre transitivo
Aunque el álgebra relacional parece suficientemente potente para la mayoría de los propósitos prácticos, existen algunos operadores simples y naturales sobre relaciones que no pueden expresarse mediante ella. Uno de ellos es el cierre transitivo de una relación binaria. Dado un dominio D , sea R una relación binaria un subconjunto de D × D. El cierre transitivo R + de R es el subconjunto más pequeño de D × D que contiene a R y satisface la siguiente condición:
Se puede demostrar utilizando el hecho de que no existe ninguna expresión de álgebra relacional E ( R ) que tome R como argumento variable y produzca R + . [ 9 ]
Sin embargo, SQL admite oficialmente este tipo de consultas de punto fijo desde 1999, y ya contaba con extensiones específicas del proveedor en este sentido mucho antes.
Uso de propiedades algebraicas para la optimización de consultas
Los sistemas de gestión de bases de datos relacionales suelen incluir un optimizador de consultas que intenta determinar la forma más eficiente de ejecutar una consulta dada. Los optimizadores de consultas enumeran los posibles planes de consulta , estiman su coste y eligen el plan con el menor coste estimado. Si las consultas se representan mediante operadores del álgebra relacional, el optimizador de consultas puede enumerar los posibles planes de consulta reescribiendo la consulta inicial utilizando las propiedades algebraicas de estos operadores.
Las consultas se pueden representar como un árbol , donde
- Los nodos internos son operadores,
- Las hojas son relaciones ,
- Los subárboles son subexpresiones.
El objetivo principal del optimizador de consultas es transformar árboles de expresiones en árboles de expresiones equivalentes, donde el tamaño promedio de las relaciones resultantes de las subexpresiones en el árbol sea menor que antes de la optimización . El objetivo secundario es intentar formar subexpresiones comunes dentro de una misma consulta o, si se evalúan varias consultas simultáneamente, en todas ellas. La razón de este segundo objetivo es que basta con calcular las subexpresiones comunes una sola vez, y los resultados pueden utilizarse en todas las consultas que contengan dicha subexpresión.
Aquí se presenta un conjunto de reglas que pueden utilizarse en dichas transformaciones.
Selección
Las reglas sobre los operadores de selección desempeñan un papel fundamental en la optimización de consultas. La selección es un operador que reduce de forma muy eficaz el número de filas en su operando, por lo que si las selecciones en un árbol de expresiones se desplazan hacia las hojas, es probable que las relaciones internas (derivadas de las subexpresiones) se reduzcan.
Propiedades básicas de selección
La selección es idempotente (las múltiples aplicaciones de la misma selección no tienen ningún efecto adicional más allá de la primera) y conmutativa (el orden en que se aplican las selecciones no afecta al resultado final).
Fragmentación de selecciones con condiciones complejas
Una selección cuya condición es una conjunción de condiciones más simples equivale a una secuencia de selecciones con esas mismas condiciones individuales, y una selección cuya condición es una disyunción equivale a una unión de selecciones. Estas identidades pueden utilizarse para fusionar selecciones, de modo que sea necesario evaluar menos selecciones, o para dividirlas, de manera que las selecciones componentes puedan moverse u optimizarse por separado.
Selección y producto cruzado
El producto cruzado es el operador más costoso de evaluar. Si las relaciones de entrada tienen N y M filas, el resultado contendráfilas. Por lo tanto, es importante disminuir el tamaño de ambos operandos antes de aplicar el operador de producto cruzado.
Esto se puede hacer eficazmente si al producto cartesiano le sigue un operador de selección, por ejemploConsiderando la definición de unión, este es el caso más probable. Si el producto cartesiano no va seguido de un operador de selección, podemos intentar introducir una selección desde niveles superiores del árbol de expresiones utilizando las demás reglas de selección.
En el caso anterior, la condición A se divide en las condiciones B , C y D utilizando las reglas de división sobre condiciones de selección complejas, de modo quey B contiene atributos solo de R , C contiene atributos solo de P , y D contiene la parte de A que contiene atributos tanto de R como de P. Nótese que B , C o D pueden estar vacíos. Entonces se cumple lo siguiente:
Operadores de selección y configuración
La selección es distributiva sobre los operadores de diferencia, intersección y unión de conjuntos. Las siguientes tres reglas se utilizan para relegar la selección a un segundo plano en el árbol de expresiones. Para los operadores de diferencia e intersección de conjuntos, es posible aplicar el operador de selección a solo uno de los operandos tras la transformación. Esto puede resultar beneficioso cuando uno de los operandos es pequeño y la sobrecarga de evaluar el operador de selección supera las ventajas de usar una relación más pequeña como operando.
Selección y proyección
La selección conmuta con la proyección si y solo si los campos a los que se hace referencia en la condición de selección son un subconjunto de los campos de la proyección. Realizar la selección antes de la proyección puede ser útil si el operando es un producto cartesiano o una unión. En otros casos, si la condición de selección es relativamente costosa de calcular, trasladar la selección fuera de la proyección puede reducir el número de tuplas que deben evaluarse (ya que la proyección puede generar menos tuplas debido a la eliminación de duplicados resultantes de campos omitidos).
Proyección
Propiedades básicas de proyección
La proyección es idempotente, de modo que una serie de proyecciones (válidas) es equivalente a la proyección más externa.
Operadores de proyección y escenografía
La proyección es distributiva sobre la unión de conjuntos.
La proyección no se distribuye sobre la intersección ni sobre la diferencia de conjuntos. Los contraejemplos se dan a continuación:
y
donde se supone que b es distinto de b' .
Rebautizar
Propiedades básicas de cambio de nombre
Los cambios de nombre sucesivos de una variable pueden combinarse en un único cambio de nombre. Las operaciones de cambio de nombre que no tienen variables en común pueden reordenarse arbitrariamente entre sí, lo que puede aprovecharse para que los cambios de nombre sucesivos sean adyacentes y puedan combinarse.
Cambiar nombre y configurar operadores
El cambio de nombre es distributivo sobre la diferencia, la unión y la intersección de conjuntos.
Producto y unión
El producto cartesiano es distributivo sobre la unión.
Implementaciones
El primer lenguaje de consulta basado en el álgebra de Codd fue Alpha, desarrollado por el propio Dr. Codd. Posteriormente, se creó ISBL , y este trabajo pionero ha sido aclamado por numerosas autoridades [ 10 ] por haber mostrado el camino para convertir la idea de Codd en un lenguaje útil. Business System 12 fue un sistema de gestión de bases de datos relacionales de uso industrial, de corta duración, que siguió el ejemplo de ISBL.
En 1998, Chris Date y Hugh Darwen propusieron un lenguaje llamado Tutorial D, destinado a la enseñanza de la teoría de bases de datos relacionales, y su lenguaje de consulta también se basa en las ideas de ISBL. [ 11 ] Rel es una implementación de Tutorial D. Bmg es una implementación de álgebra relacional en Ruby que sigue de cerca los principios de Tutorial D y The Third Manifesto . [ 12 ]
Incluso el lenguaje de consulta SQL se basa vagamente en un álgebra relacional, aunque los operandos en SQL ( tablas ) no son exactamente relaciones y varios teoremas útiles sobre el álgebra relacional no se cumplen en su contraparte SQL (posiblemente en detrimento de los optimizadores y/o usuarios). El modelo de tabla SQL es una bolsa ( multiconjunto ), en lugar de un conjunto. Por ejemplo, la expresiónes un teorema para el álgebra relacional en conjuntos, pero no para el álgebra relacional en bolsas. [ 8 ]
Véase también
- producto cartesiano
- Teorema de Codd
- D4 (lenguaje de programación) (una implementación de D)
- Modelado de datos
- Base de datos
- Registro de datos
- Lógica de los parientes
- Modelado de roles de objetos
- Proyección (matemáticas)
- Proyección (álgebra relacional)
- Proyección (teoría de conjuntos)
- Relación
- Relación (base de datos)
- álgebra de relaciones
- Cálculo relacional
- Composición de la relación
- Base de datos relacional
- Modelo relacional
- SQL
- Teoría de las relaciones
- Relación triádica
- Cálculo relacional de tuplas
Notas
- ↑ Los autores de álgebra relacional desde Codd (inclusive [ 1 ] ) usan consistentemente ' j ' para el primer índice (número de tupla; fila) e ' i ' para el segundo índice (posición del atributo; columna) y, como tal, no deben confundirse con los índices de cuadrícula posicionales que se usan típicamente en la notación de matrices y tensores.
- ↑ En Unicode , el símbolo de unión externa izquierda es ⟕ (U+27D5).
- ↑ En Unicode , el símbolo de unión exterior derecha es ⟖ (U+27D6).
- ↑ En Unicode , el símbolo de unión externa completa es ⟗ (U+27D7).
Referencias
- 1 2 Codd, EF (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 . S2CID 207549016 .
- ↑ Maddux, Roger D. (1991-09-01). "El origen de las álgebras de relaciones en el desarrollo y axiomatización del cálculo de relaciones" . Studia Logica . 50 (3): 421– 455. doi : 10.1007/BF00370681 . ISSN 1572-8730 .
- ↑ Enderton, Herbert B. (2009). Elementos de la teoría de conjuntos (Transferido a formato digital; [Reimpresión de la ed. Nueva York, 1977] ed.). San Diego: Academic Press. ISBN 978-0-12-238440-0.
- ↑ Silberschatz, Abraham; Henry F. Korth; S. Sudarshan (2020). Conceptos de sistemas de bases de datos (Séptima ed.). Nueva York. pág. 56. ISBN 978-0-07-802215-9OCLC 1080554130 .
{{cite book}}: CS1 mantenimiento: falta el editor de ubicación ( enlace ) - ↑ M. Tamer Özsu; Patrick Valduriez (2011). Principios de sistemas de bases de datos distribuidas (3.ª ed.). Springer. pág. 46. ISBN 978-1-4419-8833-1.
- ↑ Patrick O'Neil; Elizabeth O'Neil (2001). Base de datos: Principios, programación y rendimiento, segunda edición . Morgan Kaufmann. pág. 120. ISBN 978-1-55860-438-4.
- ↑ CJ Date (2011). SQL y teoría relacional: Cómo escribir código SQL preciso . O'Reilly Media, Inc. págs. 133–135 . ISBN 978-1-4493-1974-8.
- 1 2 3 Hector Garcia-Molina ; Jeffrey D. Ullman ; Jennifer Widom (2009). Sistemas de bases de datos: el libro completo (2.ª ed.). Pearson Prentice Hall. ISBN 978-0-13-187325-4.
- ↑ Aho, Alfred V.; Jeffrey D. Ullman (1979). "Universalidad de los lenguajes de recuperación de datos". Actas del 6.º simposio ACM SIGACT-SIGPLAN sobre Principios de los lenguajes de programación - POPL '79 . págs. 110–119 . doi : 10.1145/567752.567763 . S2CID 3242505 .
- ↑ CJ Date. "Edgar F. Codd - Galardonado con el Premio AM Turing" . amturing.acm.org . Consultado el 27 de diciembre de 2020 .
- ↑ CJ Date y Hugh Darwen. "Bases de datos, tipos y el modelo relacional: El tercer manifiesto" (PDF) . Consultado el 4 de julio de 2024 .
- ↑ "Documentación de BMG" . Consultado el 4 de julio de 2024 .
Lecturas adicionales
- Imieliński, T. ; Lipski, W. (1984). "El modelo relacional de datos y álgebras cilíndricas" . Journal of Computer and System Sciences . 28 : 80–102 . doi : 10.1016/0022-0000(84)90077-1 .(Para la relación con las álgebras cilíndricas ).
Enlaces externos
- RAT Traductor de Álgebra Relacional Software gratuito para convertir álgebra relacional a SQL
- Vídeos de clases: Procesamiento de álgebra relacional : una introducción a cómo los sistemas de bases de datos procesan el álgebra relacional.
- Álgebra relacional
- Modelo relacional
- Sistemas de gestión de bases de datos