miércoles, 16 de noviembre de 2011

Resumen de transacciones


Una transacción es una colección de operaciones que forman una única unidad lógica de trabajo. Se inicia por la ejecución de un programa escrito en un lenguaje de manipulación de datos como SQL, una transacción contiene instrucciones entre un inicio de transacción y un final.

Una transacción tiene cuatro propiedades principales la atomicidad es decir las operaciones de la transacción se realizan correctamente o ninguna se realiza, la consistencia esto es que el sistema no permite más que una sola transacción a la vez, el aislamiento el cual garantiza que las transacciones se realicen de manera aislada y la durabilidad que realiza los cambios una vez que la transacción finalizo.

Las transacciones tienes dos operaciones básicas: lectura la cual transfiere los datos a la memoria intermedia de la transacción, y la escritura la cual transfiere los datos de la memoria intermedia a la base de datos.

Una transacción puede tener varios estados:

  •          Activa: una transacción permanece así durante su ejecución.

  •          Parcialmente comprometida: se encuentra así cuando ha terminado de ejecutar la última instrucción.

  •          Fallida: sucede cuando no se ha podido ejecutar una instrucción.

  •          Abortada: Cuando ha retrocedido la transacción y el sistema regresa al último estado de la base de datos.

  •          Comprometida: Cuando una transacción ha tenido éxito.
Cuando una transacción es comprometida, el sistema escribe información en el disco pero si detecta una falla se cuenta con la información para devolver a la base de datos a su estado anterior.

Si una transacción es abortada, el sistema tiene dos opciones las cuales son: reiniciar la transacción si se detectó un problema de software o hardware, o cancelar la transacción esto si tiene la transacción alguna falla en su secuencia lógica.

Una transacción puede ser concurrente o secuencial, con la concurrencia se mejora la productividad del sistema de base de datos optimizando los recursos de hardware del sistema y disminuyendo el tiempo de espera entre transacciones sin embargo pueden ocasionar conflictos entre los procesos de lectura y escritura.

En cambio las transacciones secuenciales pueden ser secuenciales en cuanto a vistas o conflictos dependiendo de la planificación de sus procesos.

Un punto importante en cuanto a la consistencia de datos es precisamente la recuperabilidad de una transacción que puede regresar a un estado anterior a la base de datos, esto si se encuentra una falla en la transacción (abortada) y se tienen dos recuperaciones aceptables la planificación recuperable y la sin cascada.

lunes, 7 de noviembre de 2011

El diseño de bases de datos relacionales

El diseño de las bases de datos relacionales

El diseño de una base de datos tiene las siguientes fases: recolección y análisis de requerimientos, en esta fase los diseñadores entrevistan a los futuros usuarios de la base de datos y documentan toda la información además de que se definen los requerimientos funcionales que tendrán las operaciones o transiciones; La siguiente fase es el diseño conceptual, aquí los diseñadores crean un esquema conceptual el cual contendrá una descripción detallada de los requerimientos de la información de los usuarios, además de que se detallan los descriptores de datos y las relaciones entre ellos; El diseño lógico de la base de datos es la siguiente fase que consiste en implementar el esquema de la base de datos en un gestor de base de datos comercial o de red; la última fase es el diseño físico de la base de datos , en esta fase ya se especifica la estructura de almacenamiento interna y la organización de los archivos de la base de datos.



SQL Y LDD

El lenguaje de definición de datos o LDD del SQL, permite definir las relaciones entre tablas, el cual incluye la información siguiente: el esquema de la relación, el dominio de valores asociado al atributo, el conjunto de índices, la información de seguridad, autorización y la estructura de almacenamiento físico.

Los tipos de dominios en SQL predefinidos son los siguientes: char (cadena de caracteres de longitud fija), varchar (cadena de caracteres de longitud variable), int (entero), smallint (entero pequeño), numeric (numero en coma flotante), real, double precisión (son números en coma flotante de doble precisión), float (número de coma flotante), date (fecha de calendario), time (es la hora del día), timestamp (combinación entre date y time); recuerde respetar los tipos de datos, así como indicar cast o as para hacer comparaciones entre dominios.

Los dominios de SQL, permiten hacer comparaciones entre ellos mismos por ejemplo en el tipo de dato date y al utilizar la función interval, regresa un intervalo resultado de la comparación entre dos fechas distintas; también acontece muy a menudo que se requiera una coerción es decir una comparación entre tipos compatibles lo cual el sql transforma o a veces si se requiere una conversión de tipos, precisamente para poder lograr la comparación.
También son muy útiles los dominios en SQL, para resolver los problemas ocasionados por los nulos en los atributos, el valor null pertenece a todos los dominios pero en situaciones especiales es muy común retirarlo o prohibirlo en tales casos por ejemplo una llave primaria, se hace necesario realizar tal acción precisamente para mantener unicidad entre tuplas.
Para la definición de esquemas en SQL, se puede utilizar la sentencia create table r (…), dentro del paréntesis se tendrían las restricciones y atributos que formarían el esquema r, las llaves primarias las cuales poseen su atributo no nulo y único, esta llave hace a cada tupla única; la restricción check, la cual especifica un predicado el cual cada tupla de r deberá respetar, en caso de fallar la condición check SQL notificara el error, recuerde que null, es un valor valido para todo dominio de SQL salvo aquel que este declarado como not null; la especificación unique, indica que el atributo o atributos que lo forman son claves candidatas y se tomara en cuenta para verificar la unicidad de la tupla.

Para gestionar esquemas se tienen las siguientes sentencias: drop table r, la cual elimina todo esquema r tiene una repercusión drástica esta última sentencia, la sentencia delete from r, la cual conserva la relación pero elimina todas las tuplas, pero no se podrán insertar nuevas tuplas a menos que se ejecute de nuevo create table; con alter table r add A D, donde A es atributo y D dominio agrega nuevos campos a la relación; alter table r drop A, elimina el campo descrito por A.

SQL y consultas con el LMD

La estructura básica de una expresión SQL con el lenguaje de manipulación de datos o LMD consiste en tres clausulas principales: select (Corresponde a la operación de proyección del algebra relacional), from (Corresponde a la operación del producto cartesiano) y where (Corresponde al predicado selección del algebra relacional).

Una consulta típica en SQL tiene la forma: select a1…an from r1…rn where Cada a representa un atributo, cada r representa una relación y P es el predicado, Si se omite la cláusula where el predicado P es cierto.

Los lenguajes formales de consulta están basados en la noción matemática de que una relación es un conjunto, así nunca aparecen tuplas duplicadas en la relaciones, en aquellos casos donde se requiera forzar la eliminación de duplicados se insertara la palabra clave distinct después de select.

De igual forma se usa la palabra clave all para especificar que no se eliminan los duplicados, el símbolo “*” se puede usar para denotar todos los atributos, la cláusula select puede contener también expresiones aritméticas que contengan los operadores, +,-,* operando sobre constantes o sobre tuplas, SQL también proporciona tipos de datos especiales, tales como varias formas del tipo fecha y funciones aritméticas destinadas a operar con esos tipos de datos.

La cláusula where usa las conectivas lógicas and, or y not en lugar de símbolos matemáticos, pero permite operadores de comparación SQL para comparar cadenas y expresiones aritméticas así como tipos especiales tales como el tipo fecha.
Además SQL incluye un operador de comparación between que especifica que un valor sea menor o igual que un valor y mayor o igual que otro valor, de forma análoga se puede usar el operador de comparación not between.

La cláusula from define por sí misma un producto cartesiano de la relaciones que aparecen en la cláusula, también SQL proporciona un mecanismo para renombrar tanto relaciones como atributos. Para ello utiliza la cláusula as de la siguiente forma select nombre as n from directorio.

La cláusula as es útil en variables tupla, este tipo de variables se definen en la cláusula from mediante el uso de as, las variables tupla son de gran utilidad para comparar dos tuplas de una misma relación.

SQL especifica cadenas entre comillas simples como ‘hola’, la operación más usada sobre cadenas es el encaje u operador like para la descripción de patrones, el carácter “%” encaja con cualquier subcadena, el subrayado encaja con cualquier carácter, SQL también permite buscar discordancias en lugar de concordancias usando el operador not like.

SQL ofrece al usuario cierto control sobre el orden en el cual se presentan las tuplas de una relación, la cláusula order by hace que las tuplas resultantes de una consulta se presenten en cierto orden.

SQL define las tuplas que están en el resultado de una consulta, además del número de copias de cada una de esas tuplas que aparecen en el resultado, la semántica de duplicados de una consulta SQL, se puede definir utilizando versiones de los operadores relaciones para multiconjuntos.