Mis Publicaciones!

miércoles, 24 de noviembre de 2010

GRID

El control Grid de Visual FoxPro, por momentos ha sido poco valorado. Pienso que es probablemente uno de los controles más poderosos y útiles con los que he tenido el placer de trabajar. Las cosas que son capaces de hacer son sencillamente increíbles. Puede tener varios controles en una columna o incluso colocar un grid dentro de otro grid, de tal forma tiene filas y columnas que se interceptan en celdas representando muchos registros.

En esa entrada, deseo mostrarle una característica conocida del control grid. Si sabe de esta característica, entonces es uno entre un puñado. Cuando se refrescan los grids o si se repintan va a acceder al fondo (backstyle) de cada control que contiene en las columnas, y cualquier cosa que haga en los controles individuales va a ser mostrado en el grid.

La computación grid es una tecnología innovadora que permite utilizar de forma coordinada todo tipo de recursos (entre ellos cómputo, almacenamiento yaplicaciones específicas) que no están sujetos a un control centralizado. En este sentido es una nueva forma de computación distribuida, en la cual los recursos pueden ser heterogéneos (diferentes arquitecturas, supercomputadores, clusters...) y se encuentran conectados mediante redes de área extensa(por ejemplo Internet).

El término grid se refiere a una infraestructura que permite la integración y el uso colectivo de ordenadores de alto rendimiento, redes y bases de datos que son propiedad y están administrados por diferentes instituciones.

Ayuda del FoxTeam de Microsoft

Permítame aclarar... digamos que tenemos un grid con una única columna y que esa columna contiene Textbox1. Si establece el backcolor del Textbox1 a través del código, digamos, el color Rojo, luego cada celda mostrada en la columna1 será roja. Entonces, cómo obtener colores dinámicos (celdas individuales coloreadas de forma diferente dentro de la misma columna)? Bien, el Fox Team de Microsoft nos brinda algunas propiedades dinámicas del objeto columna que va a actuar sobre celdas individuales ((DynamicAlignment, DynamicBackColor, DynamicCurrentControl, DynamicFontBold, DynamicFontItalic, DynamicFontName, DynamicFontOutline, DynamicFontShadow, DynamicFontSize, DynamicFontStrikeThru, DynamicFontUnderline, DynamicForeColor, y DynamicInputMask). Estas son muy utilizadas y en el escenario que brindo DynamicBackColor trabajará muy bien para cambiar el backcolor de una celda individual dentro de una columna del grid. Pero ¿Y si desea hacer algo más complejo? ¿Y si tiene un contenedor en la columna y el contenedor contiene múltiples objetos y desea establecer sus propiedades forecolor y backcolor a colores completamente diferentes dinámicamente o si desea mostrar diferentes imágenes dentro de las celdas del grid?

Soluciones ingeniosas y frecuentes de los desarrolladores

Un enfoque a estos problemas es utilizar múltiples controles dentro de las columnas del grid y luego, utilizar DynamicCurrentControl para decidir cuál mostrar. Algunos controles textbox que tienen fondo rojo y otros que tienen fondo blanco, o diferentes controles image configurados con figuras diferentes.

Otro método ingenioso de algunos desarrolladores Visual FoxPro al solucionar este problema es subclasear el objeto columna y luego enganchar en una propiedad dinámica de la columna que no se utilice para otros propósitos (por ejemplo, DynamicForeColor) Si el ForeColor es igual a 1, entonces hace esto, si es 2 entonces se hace otra cosa y si es 3 ….y etcétera. Aun cuando este enfoque y los dos precedentes son válidos, hay otra vía.

Otra vía

Como se ha visto antes, a la propiedad BackStyle se accede desde el CurrentControl en una columna, y no se accede sólo una vez, se accede por cada celda visible del grid. Entonces, utilizando esto podemos hacer la cercarnos a lo que queremos: un formateo dinámico y mostrar. ¿Desea mostrar imágenes diferentes? sólo hay que crear una subclase del contenedor y colocamos un control image dentro y lo colocamos en una columna. Luego, el método backstyle_access (necesitará añadir este método access al contenedor subclaseado), vea el valor de la propiedad Picture de la imagen en un campo en el RecordSource que guarda todos los caminos diferentes en el método backstyle_access de la imagen.

this.picture = crsImages.Paths

jueves, 28 de octubre de 2010

NORMALIZACIÓN DE BASES DE DATOS


El proceso de normalización de bases de datos consiste en aplicar una serie de reglas a las relaciones obtenidas tras el paso del modelo entidad-relación al modelo relacional.

Las bases de datos relacionales se normalizan para:

§ Evitar la redundancia de los datos.

§ Evitar problemas de actualización de los datos en las tablas.

§ Proteger la integridad de los datos.

En el modelo relacional es frecuente llamar tabla a una relación, aunque para que una tabla sea considerada como una relación tiene que cumplir con algunas restricciones:

§ Cada columna debe tener su nombre único.

§ No puede haber dos filas iguales. No se permiten los duplicados.

§ Todos los datos en una columna deben ser del mismo tipo.

TERMINOLOGÍA RELACIONAL EQUIVALENTE

§ Relación = tabla o archivo

§ Tupla = registro, fila o renglón

§ Atributo = columna o campo

§ Clave = llave o código de identificación

§ Clave Candidata = superclave mínima

§ Clave Primaria = clave candidata elegida

§ Clave Ajena = clave externa o clave foránea

§ Clave Alternativa = clave secundaria

§ Dependencia Multivaluada = dependencia multivalor

§ RDBMS = Del inglés Relational Data Base Manager System que significa, Sistema Gestor de Bases de Datos Relacionales.

§ 1FN = Significa, Primera Forma Normal o 1NF del inglés First Normal Form.

Los términos Relación, Tupla y Atributo derivan del álgebra y cálculo relacional, que constituyen la fuente teórica del modelo de base de datos relacional.

Todo atributo en una tabla tiene un dominio, el cual representa el conjunto de valores que el mismo puede tomar. Una instancia de una tabla puede verse entonces como un subconjunto del producto cartesiano entre los dominios de los atributos. Sin embargo, suele haber algunas diferencias con la analogía matemática, ya que algunos RDBMS permiten filas duplicadas, entre otras cosas. Finalmente, una tupla puede razonarse matemáticamente como un elemento del producto cartesiano entre los dominio.

TIPOS DE RELACION

DE BASES DE DATOS

Las diferentes formas de relación entre diversas bases de datos que podemos encontrar son:

Relaciones "uno a uno"

Estas relaciones entre bases de datos se dan cuando cada campo clave aparece sólo una vez en cada una de las tablas.

Tomando un ejemplo del mundo real, una clara relación de "uno a uno" podría ser, el nombre de cualquier persona y su número de teléfono. Si partimosdel supuesto en que cada persona tiene un solo número de teléfono, se podría hablar de una relación "uno a uno".

Este tipo de relaciones se caracteriza poque cad uno de los campos define a aquél con el que se relaciona. Es decir, conociendo el nombre de una persona podemos conocer su número telefónico. O si sabemos su número telefónico, podemos identificar al dueño. En estos cases, se suele aconsejar incluir todos los datos dentro de una sola tabla.

Relaciones de "uno a varios"

El ejemplo del caso anterior (cada persona, un teléfono), si bien es correcto teóricamente, es muy improbable desde el punto de vista de la realidad. Conla gran expansión de los teléfonos, por lo general, cada persona tiene un número de teléfono fijo, y ademas del teéfono móvil. Debemos tener en cuenta que de el de su casa también tendrá un número de teléfono de empresa, y que quizá también sus móviles estén divididos en ocio y trabajo.

Por ello, debemos tener nuestras bases de datos preparadas para ello. Este tipo de relaciones es conocido como "uno a varios".

Relaciones de "varios con varios"

La última de la relaciones que podemos encontrar es la de "varios con varios". Dado que en la vida las cosas rara vez son sencillas, éste será el tipo de relación que nos encontraremos más a menudo.

Volviendo al tema de los teéfonos, hemos encontrado la manera de relacionar cada una de las personas con sus diversos teléfonos: el de su casa, el de su empresa, el móvil. Pero no será extraño tener en nuestra base de datos diversas personas que trabajen en la misma empresa, por lo que el número de su trabajo será el mismo, o miembros de una misma familia, por lo que compartirán el mismo teléfono de su hogar.

¿Cómo tratar este tipo de relaciones? Si nos limistamos a repetir dicho número de tablas, estaremos creando problemas de redundancia de datos, que a largo plazo lastrarán la rapidez y eficacia de nuestras tablas.

Como vemos, cada elemento de la bas de datos puede relacionarse libremente con uno o varios miembros de las distintas tablas.

En estos casos no hay una regla fija a la que podamos acogernos, pero lo aconsejable es aproximarse lo más posible a la realidad, y no dudar en establecer tablas intermedias que nos ayuden a asociar mejor los datos.

En este caso hemos creado una tabla intermedia llamada "empresas". En la tabla "nombres" incluimos un nuevo campo TID, que se relaciona con la tabla "empresas", y es esta tabla la que se relaciona directamente con los teléfonos. De esta manera, podemos almacenar todos los datos con facilidad sin tener que repetir un sólo número telefónico.

Conclusión

Por muy complicadas que parezcan las relaciones en el mundo real, tengamos por seguro que cuando queramos plasmarlas en nuestra base de datos corresponderá alguna de las tres opciones que hemos presentado. Por ello, no dudemos en invertir el tiempo que sea necesario hasta encontrar la combinación de bases de datos óptima que nos permita modelar la realidad sin repetir ninguno de los datos.

El tiempo que invirtamos en este proceso lo recuperaremos con creces durante el proceso de programación, pues nos facilitará enormemente las cosas.


sábado, 23 de octubre de 2010


Sistema Administrador De Bases De Datos Relacionales

RDBMS

Un RDBMS es un Sistema Administrador de Bases de Datos Relacionales. RDBMS viene del acrónimo en inglés Relational Data Base Management System.

Reglas de Codd

En 1985 el Dr. Edgar Frank Codd publicó 12 reglas para evaluar si un DBMS (DataBase Management System) puede considerarse un RDBMS (Relational DataBase Management System), o dicho más concisamente, si un sistema de bases de datos puede considerarse o no relacional, y más.

Regla 1: regla de la información

Toda la información de la base de datos debe estar representada explícitamente en el esquema lógico. Es decir, todos los datos están en las tablas.

Regla 2: regla del acceso garantizado

Para todos y cada uno de los datos (valores atómicos) de una Base de Datos Relacional (BDR) se garantiza que son accesibles a nivel lógico utilizando una combinación de nombre de tabla, valor de clave primaria y nombre de columna.

  • Cualquier dato almacenado en una BDR tiene que poder ser direccionado unívocamente. Para ello hay que
    indicar en qué tabla está, cuál es la columna y cuál es la fila (mediante la clave primaria).
  • Por tanto se necesita el concepto de clave primaria, que no es soportado en muchas implementaciones. En estos casos, para lograr un efecto similar se puede hacer lo siguiente:
    • Hacer que los atributos clave primaria no puedan ser nulos (NOT NULL).
    • Crear un índice único sobre la clave primaria.
    • No eliminar nunca el índice.

Regla 3: tratamiento sistemático de valores nulos

Los valores nulos (que son distintos de la cadena vacía, blancos, 0, ...) se soportan en los SGBD totalmente relacionales para representar información desconocida o no aplicable de manera sistemática, independientemente del tipo de datos.

  • Se reconoce la necesidad de la existencia de valores nulos, para un tratamiento sistemático de los mismos.
  • Hay problemas para soportar los valores nulos en las operaciones relacionales, especialmente en las operaciones lógicas.
  • Lógica trivaluada. En una posible solución. Existen tres (no dos) valores de verdad: Verdadero, Falso y Desconocido (null). Se crean tablas de verdad para las operaciones lógicas:
    • null Y null = null
    • Verdadero Y null = null
    • Falso Y null = Falso
    • Verdadero O null = Verdadero

Un inconveniente es que de cara al usuario el manejo de los lenguajes relacionales se complica pues es más difícil de entender.

Regla 4: diccionario dinámico en línea basado en el modelo relacional

La descripción de la base de datos se representa a nivel lógico de la misma manera que los datos normales, de modo que los usuarios autorizados pueden aplicar el mismo lenguaje relacional a su consulta, igual que lo aplican a los datos normales.

§ Es una consecuencia de la regla 1 que se destaca por su importancia. Los metadatos se almacenan usando el modelo relacional, con todas las consecuencias.

Regla 5: regla del sublenguaje de datos completo

Un sistema relacional debe soportar varios lenguajes y varios modos de uso de terminal (ej: rellenar formularios, etc.). Sin embargo, debe existir al menos un lenguaje cuyas sentencias sean expresables, mediante una sintaxis bien definida, como cadenas de caracteres y que sea completo, soportando:

· Definición de datos

· Definición de vistas

· Manipulación de datos (interactiva y por programa)

· Limitantes de integridad

· Limitantes de transacción (iniciar, realizar, deshacer) (Begin, commit, rollback).

· Además de poder tener interfaces más amigables para hacer consultas, etc. siempre debe de haber una manera de hacerlo todo de manera textual, que es tanto como decir que pueda ser incorporada en un programa tradicional.

· Un lenguaje que cumple esto en gran medida es SQL.

Regla 6: regla de actualización de vistas

Todas las vistas que son teóricamente actualizables se pueden actualizar por el sistema.

§ El problema es determinar cuáles son las vistas teóricamente actualizables, ya que no está muy claro.

§ Cada sistema puede hacer unas suposiciones particulares sobre las vistas que son actualizables.

Regla 7: inserción, actualización y borrado de alto nivel

La capacidad de manejar una relación base o derivada como un solo operando se aplica no sólo a la recuperación de los datos (consultas), sino también a la inserción, actualización y borrado de datos.

§ Esto es, el lenguaje de manejo de datos también debe ser de alto nivel (de conjuntos). Algunas bases de datos inicialmente sólo podían modificar las tuplas de la base de datos de una en una (unregistro de cada vez).

Regla 8: independencia física de datos

Los programas de aplicación y actividades del terminal permanecen inalterados a nivel fisico cuando quiera que se realicen cambios en las representaciones de almacenamiento o métodos de acceso.

§ El modelo relacional es un modelo lógico de datos, y oculta las características de su representación física.

• es la capacidad de modificar el esquema interno sin tener que alterar el esquema conceptual (o los externos). Por ejemplo, puede ser necesario reorganizar ciertos ficheros físicos con el fin de mejorar el rendimiento de las operaciones de consulta o de actualización de datos. la independencia física se refiere sólo a la separación entre las aplicaciones y las estructuras físicas de almacenamiento.

La capacidad de modificar el esquema conceptual sin obligar a rescribir los programas de aplicación.

Regla 9: independencia lógica de datos

Los programas de aplicación y actividades del terminal permanecen inalterados a nivel lógico cuando quiera que se realicen cambios a las tablas base que preserven la información.

  • Cuando se modifica el esquema lógico preservando información (no valdría p.ej. eliminar un atributo) no es necesario modificar nada en niveles superiores.
  • Ejemplos de cambios que preservan la información:
    • Añadir un atributo a una tabla base.
    • Sustituir dos tablas base por la unión de las mismas. Usando vistas de la unión puedo recrear las tablas anteriores...
    • depurar las vistas de diseños y contenerla estasble.

Regla 10: independencia de integridad

Los limitantes de integridad específicos para una determinada base de datos relacional deben poder ser definidos en el sublenguaje de datos relacional, y almacenables en el catálogo, no en los programas de aplicación.

  • El objetivo de las bases de datos no es sólo almacenar los datos, si no también sus relaciones y evitar que estas (limitantes) se codifiquen en los programas. Por tanto en una BDR se deben poder definir limitantes de integridad.
  • Cada vez se van ampliando más los tipos de limitantes de integridad que se pueden utilizar en los SGBDR, aunque hasta hace poco eran muy escasos.
  • Como parte de los limitantes inherentes al modelo relacional (forman parte de su definición) están:
    • Una BDR tiene integridad de entidad. Es decir, toda tabla debe tener una clave primaria.
    • Una BDR tiene integridad referencial. Es decir, toda clave externa no nula debe existir en la relación donde es primaria.

Regla 11: independencia de distribución

Una BDR tiene independencia de distribución.

  • Las mismas órdenes y programas se ejecutan igual en una BD centralizada que en una distribuida.
  • Las BDR son fácilmente distribuibles:
    • Las tablas se dividen en fragmentos que se distribuyen.
    • Cuando se necesitan las tablas completas se recombinan usando operaciones relacionales con los fragmentos.
  • Sin embargo se complica más la gestión interna de la integridad, etc.
  • Esta regla es responsable de tres tipos de transparencia de distribución:
    • Transparencia de localización. El usuario tiene la impresión de que trabaja con una BD local. (aspecto de la regla de independencia física)
    • Transparencia de fragmentación. El usuario no se da cuenta de que la relación con que trabaja está fragmentada. (aspecto de la regla de independencia lógica de datos).
    • Transparencia de replicación. El usuario no se da cuenta de que pueden existir copias (réplicas) de una misma relación en diferentes lugares.

Regla 12: regla de la no subversión

Si un sistema relacional tiene un lenguaje de bajo nivel (un registro de cada vez), ese bajo nivel no puede ser usado para saltarse (subvertir) las reglas de integridad y los limitantes expresados en los lenguajes relacionales de más alto nivel (una relación (conjunto de registros) de cada vez)

§ Algunos problemas no se pueden solucionar directamente con el lenguaje de alto nivel.

§ Normalmente se usa SQL inmerso en un lenguaje anfitrión para solucionar estos problemas. Se utiliza el concepto de cursor para tratar individualmente las tuplas de una relación. En cualquier caso no debe ser posible saltarse los limitantes de integridad impuestos al tratar las tablas a ese nivel.

SGBD

Sistema de Gestión de Bases de Datos (SGBD)

El SGBD proporciona dos lenguajes:

N Lenguaje de definición de datos (LDD): Conjunto de instrucciones que definen los objetos con sus propiedades, es decir, definen los esquemas o niveles externos, conceptual e interno.

N Lenguaje de manipulación de datos (LMD): Conjunto de instrucciones que permiten realizar consultas y actualizaciones de datos (altas, bajas y modificaciones). Dentro del LMD podemos agrupar un conjunto de instrucciones como “lenguaje de consulta” (LC o también “Query Languaje”).

El SGBD se encarga de interactuar los datos con el “file system”. Este permite implantar los controles de integridad definidos para los datos, es decir, se encarga de modificar todas las copias redundantes de la base de datos si una sola de ellas es modificada. El SGBD también se encarga de realizar copias de seguridad y de actualizarlas. Finalmente, otra tarea del SGBD es el control de concurrencia, es decir, permitir o no acceder por varios usuarios a una misma información en un mismo momento.