martes, 31 de marzo de 2009

relaciones de bases de datos de uno a uno, uno a varias, varias a varias...

Existen tres tipos de relaciones entre tablas. El tipo de relación creado depende de cómo se definen las columnas relacionadas:

Relaciones uno a varios

Relaciones Varios a Varios

Relaciones uno a uno

Relaciones uno a varios

Una relación uno a varios es el tipo más habitual de relación. En este tipo de relación, una fila de la tabla A puede corresponderse con muchas filas de la tabla B, pero una fila de la tabla B sólo puede corresponderse con otra de la tabla A. Por ejemplo, en las tablas publishers (editoriales) y titles (títulos) se da una relación uno a varios: una editorial publica muchos títulos, pero a cada título le corresponde sólo una editorial.Se crea una relación uno a varios si solamente una de las columnas relacionadas es una clave principal o tiene una restricción UNIQUE.El lado de la clave principal de una relación uno a varios se indica mediante un símbolo de clave. El lado de la clave externa de una relación se indica mediante un símbolo de infinito.



Relaciones Varios a Varios

En una relación varios a varios, una fila de la tabla A puede tener muchas filas coincidentes en la tabla B y viceversa. Este tipo de relaciones se crea definiendo una tercera tabla, denominada tabla de unión, cuya clave principal esté constituida por las claves externas de las tablas A y B. Por ejemplo, entre las tablas authors (autores) y titles (títulos) existiría una relación varios a varios definida por una relación uno a varios entre cada una de ellas y la tabla titleauthors (títuloautor). La clave principal de la tabla titleauthors es la combinación de la columna au_id (la clave principal de la tabla authors) y la columna title_id (la clave principal de la tabla titles).


Relaciones uno a uno

En una relación uno a uno, una fila de la tabla A no puede tener más de una fila coincidente en la tabla B y viceversa. Se crea una relación uno a uno si las dos columnas relacionadas son claves principales o tienen restricciones UNIQUE.

domingo, 29 de marzo de 2009

optimizacion de codigo, generacion de codigo objeto, generadores de analizadores lexicos...

OPTIMIZACIÓN DE CÓDIGO
La optimización de código puede realizarse durante la propia generación o como paso adicional, ya sea intercalado entre el análisis semántico y la generación de código (se optimizan las cuádruplas) o situado después de ésta (se optimiza a posteriori el código generado).
Clasificación de optimizaciones:
Dependientes de la máquina.
Asignación de registros (ver capítulo anterior).
Instrucciones especiales ("idioms").
Reordenación del código.
Independientes de la máquina.
Ejecución en tiempo de compilación.
Eliminación de redundancias.
Cambio de orden.
Reducción de frecuencia de ejecución (invariancias).
Reducción de fuerza.

GENERACIÓN DE CÓDIGO OBJETO

Código generado por un compilador o un ensamblador traducido por un código fuente de un programa.
Casi siempre este término se refiere al código máquina que puede ejecutarse directamente en la unidad central de proceso (CPU) del sistema, pero también puede ser código fuente de lenguaje ensamblador o una variante de código máquina.
El código intermedio es un código abstracto independiente de la máquina para la que se generará el código objeto. El código intermedio ha de cumplir dos requisitos importantes: ser fácil de producir a partir del análisis sintáctico, y ser fácil de traducir al lenguaje objeto.

GENERADORES DE ANALIZADORES LEXICOS

Un analizador léxico es un módulo destinado a leer caracteres del archivo de entrada, donde se encuentra la cadena a analizar, reconocer subcadenas que correspondan a símbolos del lenguaje y retornar los tokens correspondientes y sus atributos. Escribir analizadores léxicos eficientes a mano puede resultar una tarea tediosa, para evitarla se han creado herramientas de software – los generadores de analizadores léxicos – que generan automáticamente un analizador léxico a partir de una especificación provista por el usuario.