Академический Документы
Профессиональный Документы
Культура Документы
NORMALIZACION Y AISLAMIENTO
(BASE DE DATOS)
En el modelo relacional es frecuente llamar tabla a una relación, para que una tabla sea considerada
como una relación tiene que cumplir con algunas restricciones:
La normalización es el proceso de organizar los datos de una base de datos. Se incluye la creación
de tablas y el establecimiento de relaciones entre ellas según reglas diseñadas tanto para proteger
los datos como para hacer que la base de datos sea más flexible al eliminar la redundancia y las
dependencias incoherentes.
Reglas de Codd
Edgar Frank Codd se percató de que existían bases de datos en el mercado que decían ser
relacionales, pero lo único que hacían era guardar la información en las tablas, sin estar literalmente
normalizadas dichas tablas; entonces Codd publicó doce (12) reglas que un verdadero sistema
relacional debería tener, en la práctica algunas de ellas son difíciles de realizar. Un sistema podrá
considerarse "más relacional" cuanto más siga estas reglas.
Toda la información en un RDBMS está explícitamente representada de una sola manera por valores
en una tabla.
Cualquier cosa que no exista en una tabla no existe del todo. Toda la información, incluyendo
nombres de tablas, nombres de vistas, nombres de columnas, y los datos de las columnas deben
estar almacenados en tablas dentro de las bases de datos. Las tablas que contienen tal información
constituyen el Diccionario de Datos. Esto significa que todo tiene que estar almacenado en las tablas.
Toda la información en una base de datos relacional se representa explícitamente en el nivel lógico
exactamente de una manera: con valores en tablas. Por tanto los metadatos (diccionario, catálogo)
se representan exactamente igual que los datos de usuario. Y puede usarse el mismo lenguaje (ej.
SQL) para acceder a los datos y a los metadatos (regla 4).
Cada ítem de datos debe ser lógicamente accesible al ejecutar una búsqueda que combine el
nombre de la tabla, su clave primaria, y el nombre de la columna.
Esto significa que, dado un nombre de tabla, dado el valor de la clave primaria, y dado el nombre de
la columna requerida, deberá encontrarse uno y solamente un valor. Por esta razón la definición de
claves primarias para todas las tablas es prácticamente obligatoria.
Un RDBMS (Sistema Gestor de Bases de Datos Relacionales) debe ser capaz de soportar el uso de
valores nulos en el lugar de columnas cuyos valores sean desconocidos.
Se reconoce la necesidad de la existencia del valor nulo, el cual podría servir para representar, o
bien, una información desconocida (ejemplo, no se sabe la dirección de un empleado), o bien una
información que no aplica (a un empleado soltero no se le puede asignar un nombre de esposa). Así
mismo, consideremos el caso de un alumno que obtiene 0 puntos en una prueba y el de un alumno
que no presentó la prueba.
Hay problemas para soportar los valores nulos en las operaciones relacionales, especialmente en
las operaciones lógicas, para lo cual se considera una lógica trivaluada, con tres (no dos) valores de
verdad: Verdadero, Falso y null. Se crean tablas de verdad para las operaciones lógicas:
La información de tablas, vistas, permisos de acceso de usuarios autorizados, etc, debe ser
almacenada exactamente de la misma manera: En tablas. Estas tablas deben ser accesibles igual
que todas las tablas, a través de sentencias de SQL (o similar).
Debe haber al menos un lenguaje que sea integral para soportar la definición de datos, manipulación
de datos, definición de vistas, restricciones de integridad, y control de autorizaciones y
transacciones.
Esto significa que debe haber por lo menos un lenguaje con una sintaxis bien definida que pueda
ser usado para administrar completamente la base de datos.
Todas las vistas que son teóricamente actualizables, deben ser actualizables por el sistema mismo.
La mayoría de las RDBMS permiten actualizar vistas simples, pero deshabilitan los intentos de
actualizar vistas complejas.
La capacidad de manejar una base de datos con operandos simples se aplica no sólo para la
recuperación o consulta de datos, sino también para la inserción, actualización y borrado de datos'.
Esto significa que las cláusulas para leer, escribir, eliminar y agregar registros (SELECT, UPDATE,
DELETE e INSERT en SQL) deben estar disponibles y operables, independientemente del tipo de
relaciones y restricciones que haya entre las tablas o no.
Los programas de aplicación y las actividades de acceso por terminal deben permanecer
lógicamente inalteradas cuando quiera que se hagan cambios (según los permisos asignados) en las
tablas de la base de datos.
La independencia lógica de los datos especifica que los programas de aplicación y las actividades de
terminal deben ser independientes de la estructura lógica, por lo tanto los cambios en la estructura
lógica no deben alterar o modificar estos programas de aplicación.
Todas las restricciones de integridad deben ser definibles en los datos, y almacenables en el
catálogo, no en el programa de aplicación.
Ningún componente de una clave primaria puede tener valores en blanco o nulos (ésta es la norma
básica de integridad).
Para cada valor de clave foránea deberá existir un valor de clave primaria concordante. La
combinación de estas reglas asegura que haya integridad referencial.
El sistema debe poseer un lenguaje de datos que pueda soportar que la base de datos esté
distribuida físicamente en distintos lugares sin que esto afecte o altere a los programas de
aplicación.
El soporte para bases de datos distribuidas significa que una colección arbitraria de relaciones, bases
de datos corriendo en una mezcla de distintas máquinas y distintos sistemas operativos y que esté
conectada por una variedad de redes, pueda funcionar como si estuviera disponible como en una
única base de datos en una sola máquina.
Si el sistema tiene lenguajes de bajo nivel, estos lenguajes de ninguna manera pueden ser usados
para violar la integridad de las reglas y restricciones expresadas en un lenguaje de alto nivel (como
SQL).
Algunos productos solamente construyen una interfaz relacional para sus bases de datos No
relacionales, lo que hace posible la subversión (violación) de las restricciones de integridad. Esto no
debe ser permitido.
Un nivel de aislamiento bajo aumenta la capacidad de muchos usuarios de acceder a los datos al
mismo tiempo, pero aumenta el número de concurrencia podrían tropezar con usuarios de efectos
(como Lee sucio o actualizaciones perdidas). Por el contrario, un mayor nivel de aislamiento reduce
los tipos de efectos de la concurrencia que los usuarios pueden encontrar, pero requiere más
recursos del sistema y aumenta las probabilidades de que una transacción bloqueará otra.
Normalmente se define a nivel de base de datos como una propiedad que define cómo/cuando los
cambios realizados por una sola operación que se hacen visible al otro, pero en sistemas antiguos
podrán aplicarse sistemáticamente, por ejemplo, mediante el uso de tablas temporales. En sistemas
de dos niveles, un gestor de TP es necesaria para mantener el aislamiento. En los sistemas de n-
capas (como tratar de reservar el último asiento en un vuelo de múltiples sitios web) es necesaria
una combinación de procedimientos almacenados y administración de transacciones para cometer
la reserva y confirmar al cliente.
Control de concurrencia
Bloqueo de dos fases es el método más común de control de concurrencia transacción a bases de
datos, utilizado para proporcionar tanto serializabilidad y capacidad de recuperación para la
corrección. Para poder acceder a un objeto de base de datos una transacción primero necesita
adquirir una cerradura para este objeto. Dependiendo del tipo de operación de acceso (por ejemplo,
lectura o escritura de un objeto) y el tipo de bloqueo, adquiriendo la cerradura puede bloqueado y
pospuesto, si otra transacción tiene una cerradura para ese objeto.
Niveles de aislamiento
De los cuatro ÁCIDO propiedades en una DBMS (Database Management System), la propiedad de
aislamiento es el que más a menudo posible relajado. Al intentar mantener el más alto nivel de
aislamiento, generalmente adquiere un DBMS cerraduras en datos o implementos control de
concurrencia multiversión, que puede resultar en una pérdida de simultaneidad. Esto requiere
añadir lógica para la aplicación para funcionar correctamente.
La mayoría de bases de datos ofrecen una serie de niveles de aislamiento de transacción, que
controlan el grado de bloqueo que se produce cuando se selecciona datos. Para muchas aplicaciones
de base de datos, la mayoría de las transacciones de la base de datos puede ser construida para
evitar que requieren aislamiento altos niveles (e.g. SERIALIZABLE), reduciendo así la fijación
sobrecarga para el sistema. El programador debe analizar cuidadosamente código de acceso de base
de datos para asegurar que cualquier relajación de aislamiento no causa errores de software que
son difíciles de encontrar. Por el contrario, si se utilizan los niveles más altos de aislamiento, la
posibilidad de interbloqueo se incrementa, lo cual también requiere análisis cuidadoso y técnicas
de programación para evitar.
Los niveles de aislamiento definidos por el ANSI/ISO SQL estándar son las siguientes:
Serializable
Cuando utilizando sin bloqueo basado en control de concurrencia, no se adquieren cerraduras; Sin
embargo, si el sistema detecta un escribir colisión entre varias transacciones concurrentes, sólo uno
de ellos puede cometer. Ver aislamiento de instantánea para obtener más detalles sobre este tema.
Lecturas repetibles
En este nivel de aislamiento, basada en una cerradura control de concurrencia DBMS aplicación
mantiene Lee y escribe las cerraduras (adquiridas en datos seleccionados) hasta el final de la
transacción. Sin embargo, gama de cerraduras No se logró, así que fantasma Lee puede ocurrir.
Lectura comprometida
Ponerlo en palabras más simples, leer comprometido es un nivel de aislamiento que garantiza que
cualquier lectura de datos se ha comprometido en este momento se lee. Simplemente restringe el
lector de ver cualquier lectura intermedia, no comprometido, 'sucio'. No hace ninguna promesa
alguna si la transacción emite la lectura, encontrará los mismos datos; datos están libres de cambiar
después de que se lee.
Read uncommitted
Este es el más bajo nivel de aislamiento. En este nivel, Lee sucio se permite, por una sola transacción
puede ocurrir No-todavía-confiado cambios realizados por otras transacciones.
Puesto que cada nivel de aislamiento es más fuerte que los menores, que no hay mayor nivel de
aislamiento permite una acción prohibida por una baja, la norma permite un DBMS para ejecutar
una transacción en un nivel de aislamiento más fuerte que la solicitada (por ejemplo, una
transacción "Leer comprometidos" puede en realidad realizar en un nivel de aislamiento
"Repeatable leer").
El nivel de aislamiento predeterminado de diferentes DBMS de varía bastante. Más bases de datos
que presentan las transacciones permiten al usuario establecer algún nivel de aislamiento. Algunos
DBMS también requieren sintaxis adicional cuando se realiza una instrucción SELECT para adquirir
las cerraduras (ej.: SELECCIONE... PARA LA ACTUALIZACIÓN para adquirir bloqueos de escritura
exclusiva en filas accesada).
Sin embargo, las definiciones anteriores han sido criticadas [3] como ambiguo y no precisa que
refleja el aislamiento proporcionado por muchas bases de datos:
También hay otras críticas relativas a la determinación del aislamiento de ANSI SQL, en eso anima a
implementadores hacer "cosas malas":
... se basa en formas sutiles en la suposición de que un esquema de bloqueo se utiliza para el control
de concurrencia, en contraposición a un esquema de concurrencia optimista o varias versiones. Esto
implica que la semántica propuesta es mal definida.