martes, 6 de noviembre de 2012

Algebra Relacional

Álgebra relacional





 El álgebra relacional es un conjunto de operaciones que describen paso a paso como computar una respuesta sobre las relaciones, tal y como éstas son definidas en el modelo relacional. Denominada de tipo procedimental, a diferencia del Cálculo relacional que es de tipo declarativo.
Describe el aspecto de la manipulación de datos. Estas operaciones se usan como una representación intermedia de una consulta a una base de datos y, debido a sus propiedades algebraicas, sirven para obtener una versión más optimizada y eficiente de dicha consulta.

Las operaciones

 Básicas

Cada operador del álgebra acepta una o dos relaciones y retorna una relación como resultado. σ y Π son operadores unarios, el resto de los operadores son binarios. Las operaciones básicas del álgebra relacional son:
 Seleccióna (σ)
Permite seleccionar un subconjunto de tuplas de una relación (R), todas aquellas que cumplan la(s) condición(es) P, esto es:

   \sigma_P(R) \!
Ejemplo:

   \sigma_{Apellido=Gomez}(Alumnos) \!
Selecciona todas las tuplas que contengan Gómez como apellido en la relación Alumnos.
Una condición puede ser una combinación booleana, donde se pueden usar operadores como: \wedge , \vee, combinándolos con operadores <, >, \le, \ge, =, \ne.
 Proyección (Π)
Permite extraer columnas (atributos) de una relación, dando como resultado un subconjunto vertical de atributos de la relación, esto es:

   \Pi_{A_1,A_2,\dots,A_n} \!
donde A_1,A_2,\dots,A_n son atributos de la relación R .
Ejemplo:

   \Pi_{Apellido,Semestre,NumeroControl}(Alumnos) \!
Selecciona los atributos Apellido, Semestre y NumeroControl de la relación Alumnos, mostrados como un subconjunto de la relación Alumnos
 Producto cartesiano (x)
El producto cartesiano de dos relaciones se escribe como:
R \times S
y entrega una relación, cuyo esquema corresponde a una combinación de todas las tuplas de R con cada una de las tuplas de S, y sus atributos corresponden a los de R seguidos por los de S.
Ejemplo:

   Alumnos \times Maestros
Muestra una nueva relación, cuyo esquema contiene cada una de las tuplas de la relación Alumnos junto con las tuplas de la relación Maestros, mostrando primero los atributos de la relación Alumnos seguidos por las tuplas de la relación Maestros.
 Unión (∪)
La operación
R \cup S
retorna el conjunto de tuplas que están en R, o en S, o en ambas. R y S deben ser uniones compatibles.
Diferencia (-)
La diferencia de dos relaciones, R y S denotada por:
R - S \!
entrega todas aquellas tuplas que están en R, pero no en S. R y S deben ser uniones compatibles.

Estas operaciones son fundamentales en el sentido en que (1) todas las demás operaciones pueden ser expresadas como una combinación de éstas y (2) ninguna de estas operaciones pueden ser omitidas sin que con ello se pierda información.

No básicas o Derivadas

Entre los operadores no básicos tenemos:
 Intersección (∩)
La intersección de dos relaciones se puede especificar en función de otros operadores básicos:
 R \cap S = R - (R - S)
La intersección, como en Teoría de conjuntos, corresponde al conjunto de todas las tuplas que están en R y en S, siendo R y S uniones compatibles.
 Unión natural (\bowtie) (Natural Join)
La operación unión natural en el álgebra relacional es la que permite reconstruir las tablas originales previas al proceso de normalización. Consiste en combinar las proyección, selección y producto cartesiano en una sola operación, donde la condición  \theta es la igualdad Clave Primaria = Clave Externa (o Foranea), y la proyección elimina la columna duplicada (clave externa).
Expresada en las operaciones básicas, queda
 R \bowtie S = \Pi_{A1,A2...An} ( \sigma_\theta (R\times S) )

Una reunión theta ( θ-Join) de dos relaciones es equivalente a:
 R \bowtie_\theta S = \sigma_\theta (R\times S)
donde la condición  \theta es libre.
Si la condición  \theta es una igualdad se denomina EquiJoin.
 División (/)
Supongamos que tenemos dos relaciones A(x, y) y B(y) donde el dominio de y en A y B, es el mismo.
El operador división A / B retorna todos los distintos valores de x tales que para todo valor y en B existe una tupla \langle x,y \rangle en A.
 Agrupación (Ģ)
Permite agrupar conjuntos de valores en función de un campo determinado y hacer operaciones con otros campos.
Por ejemplo: Ģ sum(puntos) as Total Equipo (PARTIDOS).


Ejemplos!

Alumno
IDNOMBRECIUDADEDAD
01PedroBogota14
11JuanCali18
21DiegoCartagena12
31RositaMedellin15
41ManuelCartagena17

Apoderado
IDNOMBREFONOID_ALUMNO
054Víctor65464421
457José45465411
354María99745531
444Paz74742301

Curso
CODNOMBREFECHA_INICIODURACIONVALOR
01142Sicología13-01153.000
02145Biología15-02122.500
03547Matemáticas01-03304.000
04578Música05-04101.500
05478Física20-04153.200

Inscrito
IDID_ALCOD
10105478
20102145
31103547
42102145
54103547



Mostrar los nombres de los alumnos y su apoderado
Primero, realizaremos una combinación entre alumnos y apoderados (pues necesitamos saber a que alumno le corresponde tal apoderado). La combinación realizará un producto cartesiano, es decir, para cada tupla de alumnos (todas las filas de alumnos) hará una mezcla con cada una tupla de apoderados y seleccionará aquellas nuevas tuplas en que alumnos.id sea igual a apoderados.id_alumno, esto es:

ID (alumno)NOMBRE (alumno)CIUDADEDADID (apoderado)NOMBRE (apoderado)FONOID_ALUMNO
01PedroSantiago14054Víctor65464421
01PedroSantiago14457José45465411
01PedroSantiago14354María99745531
01PedroSantiago14444Paz74742301
11JuanBuenos Aires18054Víctor65464421
11JuanBuenos Aires18457José45465411
11JuanBuenos Aires18354María99745531
11JuanBuenos Aires18444Paz74742301
21DiegoLima12054Víctor65464421
21DiegoLima12457José45465411
21DiegoLima12354María99745531
21DiegoLima12444Paz74742301
31RositaConcepción15054Víctor65464421
31RositaConcepción15457José45465411
31RositaConcepción15354María99745531
31RositaConcepción15444Paz74742301
41ManuelLima17054Víctor65464421
41ManuelLima17457José45465411
41ManuelLima17354María99745531
41ManuelLima17444Paz74742301


Analizador sintáctico



Un analizador sintáctico (en inglés parser) es una de las partes de un compilador que transforma su entrada en un árbol de derivación.
El análisis sintáctico convierte el texto de entrada en otras estructuras (comúnmente árboles), que son más útiles para el posterior análisis y capturan la jerarquía implícita de la entrada. Un analizador léxico crea tokens de una secuencia de caracteres de entrada y son estos tokens los que son procesados por el analizador sintáctico para construir la estructura de datos, por ejemplo un árbol de análisis o árboles de sintaxis abstracta.
El análisis sintáctico también es un estado inicial del análisis de frases de lenguaje natural. Es usado para generar diagramas de lenguajes que usan flexión gramatical, como los idiomas romances o el latín. Los lenguajes habitualmente reconocidos por los analizadores sintácticos son los lenguajes libres de contexto. Cabe notar que existe una justificación formal que establece que los lenguajes libres de contexto son aquellos reconocibles por un autómata de pila, de modo que todo analizador sintáctico que reconozca un lenguaje libre de contexto es equivalente en capacidad computacional a un autómata de pila.
Los analizadores sintácticos fueron extensivamente estudiados durante los años 70 del siglo XX, detectándose numerosos patrones de funcionamiento en ellos, cosa que permitió la creación de programas generadores de analizadores sintáticos a partir de una especificación de la sintaxis del lenguaje en forma Backus-Naur por ejemplo, tales como yacc, GNU bison y javaCC.


Heurística (informática)

En computación, dos objetivos fundamentales son encontrar algoritmos con buenos tiempos de ejecución y buenas soluciones, usualmente las óptimas. Una heurística es un algoritmo que abandona uno o ambos objetivos; por ejemplo, normalmente encuentran buenas soluciones, aunque no hay pruebas de que la solución no pueda ser arbitrariamente errónea en algunos casos; o se ejecuta razonablemente rápido, aunque no existe tampoco prueba de que siempre será así. Las heurísticas generalmente son usadas cuando no existe una solución óptima bajo las restricciones dadas (tiempo, espacio, etc.), o cuando no existe del todo.
A menudo, pueden encontrarse instancias concretas del problema donde la heurística producirá resultados muy malos o se ejecutará muy lentamente. Aun así, estas instancias concretas pueden ser ignoradas porque no deberían ocurrir nunca en la práctica por ser de origen teórico. Por tanto, el uso de heurísticas es muy común en el mundo real.

Objetivos de los sistemas de bases de datos

Corregir anomalías en el acceso concurrente: Para mejorar el funcionamiento del sistema y tener un tiempo de respuesta más corto, muchos sistemas permiten que varios usuarios actualicen la información simultáneamente. En un ambiente de este tipo, la interacción de las actualizaciones concurrentes puede resultar en información inconsistente. Para prevenir estas situaciones debe mantenerse alguna forma de supervisión en el sistema.

Arboles de consultas 


Transformaciones equivalentes 

1.-el servidor recive una peticion de un nodo
2.-el servidor es atacado por el acceso concurrente a la base de datos cargada localmente
3.-el servidor muestra un resultado y le da un hilo a cada una de las maquinas nodo de la red local.

Una base de datos es accesada de esta manera la técnica que se utiliza es la de fragmentación de datos que puede ser hibrida, horizontal y vertical.
En esta fragmentación lo que no se quiere es perder la consistencia de los datos, por lo tanto se respetan las formas normales de la base de datos ok.
Bueno para realizar una transformación en la consulta primero desfragmentamos siguiendo los estandares marcados por las reglas formales y posteriormente realizamos el envio y la maquina que recibe es la que muestra el resultado pertinente para el usuario, de esta se puede producir una copia que sera la equivalente a la original.



No hay comentarios:

Publicar un comentario