Professional Documents
Culture Documents
Una base de datos relacional es un conjunto de una o más tablas estructuradas en registros
(líneas) y campos (columnas), que se vinculan entre sí por un campo en común, en ambos casos
posee las mismas características como por ejemplo el nombre de campo, tipo y longitud; a este
campo generalmente se le denomina ID, identificador o clave. A esta manera de construir bases de
datos se le denomina modelo relacional.
Estrictamente hablando el término se refiere a una colección específica de datos pero a menudo se
le usa, en forma errónea como sinónimo del software usado para gestionar esa colección de datos.
Ese software se conoce como SGBD (sistema gestor de base de datos) relacional o RDBMS (del
inglés relational database management system).
Las bases de datos relacionales pasan por un proceso al que se le conoce como normalización de
una base de datos, el cual es entendido como el proceso necesario para que una base de datos
sea utilizada de manera óptima.
Una
base
de
datos relacional es una base de datos que cumple con el modelo relacional, el cual es el modelo
más utilizado en la actualidad para implementar bases de datos ya planificadas. Permiten
establecer interconexiones (relaciones) entre los datos (que están guardados en tablas), y a través
de dichas conexiones relacionar los datos de ambas tablas, de ahí proviene su nombre: "Modelo
Relacional". Tras ser postuladas sus bases en 1970 por Edgar Frank Codd, de los laboratorios
IBM en San José (California), no tardó en consolidarse como un nuevo paradigma en los modelos
de base de datos.[1]
Características
Elementos
En una base de datos relacional, todos los datos se almacenan y se accede a ellos por medio de
relaciones. Las relaciones que almacenan datos son llamadas "relaciones base" y su
implementación es llamada "tabla". Otras relaciones no almacenan datos, pero son calculadas al
aplicar operaciones relacionales. Estas relaciones son llamadas "relaciones derivadas" y su
implementación es llamada "vista" o "consulta". Las relaciones derivadas son convenientes ya que
expresan información de varias relaciones actuando como si fuera una sola.
Restricciones
Una restricción es una condición que obliga el cumplimiento de ciertas condiciones en la base de
datos. Algunas no son determinadas por los usuarios, sino que son inherentemente definidas por el
simple hecho de que la base de datos sea relacional. Algunas otras restricciones las puede definir
el usuario, por ejemplo, usar un campo con valores enteros entre 1 y 10.
Las restricciones proveen un método de implementar reglas en la base de datos. Las restricciones
restringen los datos que pueden ser almacenados en las tablas. Usualmente se definen usando
expresiones que dan como resultado un valor booleano, indicando si los datos satisfacen la
restricción o no.
Las restricciones no son parte formal del modelo relacional, pero son incluidas porque juegan el rol
de organizar mejor los datos. Las restricciones son muy discutidas junto con los conceptos
relacionales.
Dominios
Un dominio describe un conjunto de posibles valores para cierto atributo. Como un dominio
restringe los valores del atributo, puede ser considerado como una restricción. Matemáticamente,
atribuir un dominio a un atributo significa "todos los valores de este atributo deben de ser
elementos del conjunto especificado".
Distintos tipos de dominios son: enteros, cadenas de texto, fecha, no procedurales etc.
Clave única
Cada tabla puede tener uno o más campos cuyos valores identifican de forma única cada registro
de dicha tabla, es decir, no pueden existir dos o más registros diferentes cuyos valores en dichos
campos sean idénticos. Este conjunto de campos se llama clave única.
Pueden existir varias claves únicas en una determinada tabla, y a cada una de éstas suele
llamársele candidata a clave primaria.
Clave primaria
Una clave primaria es una clave única elegida entre todas las candidatas que define unívocamente
a todos los demás atributos de la tabla, para especificar los datos que serán relacionados con las
demás tablas. La forma de hacer esto es por medio de claves foráneas.
Sólo puede existir una clave primaria por tabla y ningún campo de dicha clave puede contener
valores NULL.
Clave foránea
Una clave foránea es una referencia a una clave en otra tabla. Las claves foráneas no necesitan
ser claves únicas en la tabla donde están y sí a donde están referenciadas.
Por ejemplo, el código de departamento puede ser una clave foránea en la tabla de empleados,
obviamente se permite que haya varios empleados en un mismo departamento, pero existirá sólo
un departamento.
Clave índice
Las claves índices surgen con la necesidad de tener un acceso más rápido a los datos. Los índices
pueden ser creados con cualquier combinación de campos de una tabla. Las consultas que filtran
registros por medio de estos campos, pueden encontrar los registros de forma no secuencial
usando la clave índice.
Las bases de datos relacionales incluyen múltiples técnicas de ordenamiento, cada una de ellas es
óptima para cierta distribución de datos y tamaño de la relación.
Los índices generalmente no se consideran parte de la base de datos, pues son un detalle
agregado. Sin embargo, las claves índices son desarrolladas por el mismo grupo de
programadores que las otras partes de la base de datos.
Procedimientos almacenados
Los procedimientos almacenados no son parte del modelo relacional, pero todas las
implementaciones comerciales los incluyen.
Estructura
La base de datos se organiza en dos marcadas secciones; el esquema y los datos (o instancia).
Las bases de datos relacionales pasan por un proceso al que se le conoce como normalización, el
resultado de dicho proceso es un esquema que permite que la base de datos sea usada de manera
óptima.
Manipulación de la información
Para manipular la información utilizamos un lenguaje relacional, actualmente se cuenta con dos
lenguajes formales el álgebra relacional y el cálculo relacional. El álgebra relacional permite
describir la forma de realizar una consulta, en cambio, el cálculo relacional sólo indica lo que se
desea devolver.
El lenguaje más común para construir las consultas a bases de datos relacionales es SQL
(Structured Query Language), un estándar implementado por los principales motores o sistemas de
gestión de bases de datos relacionales.
Al contrario del modelo relacional, el estándar SQL requiere que las columnas tengan un orden
definido, lo cual es fácil de implementar en una computadora, ya que la memoria es lineal.
Es de notar, sin embargo, que en SQL el orden de las columnas y los registros devueltos en cierto
conjunto de resultado nunca está garantizado, a no ser que explícitamente sea especificado por el
usuario.
Existe software exclusivamente dedicado a tratar con bases de datos relacionales. Este software
se conoce como SGBD (Sistema de Gestión de Base de Datos relacional) o RDBMS (del inglés
Relational Database Management System).
Entre los gestores o manejadores actuales más populares encontramos: MySQL, PostgreSQL,
Oracle, DB2,INFORMIX, Interbase, FireBird, Sybase y Microsoft SQL Server.
Desventajas
Las bases de datos orientadas a objetos (BDOO) se propusieron con el objetivo de satisfacer las
necesidades de las aplicaciones anteriores y así, complementar pero no sustituir a las bases de
datos relacionales.
El primer paso para crear una base de datos, es planificar el tipo de información que se quiere
almacenar en la misma, teniendo en cuenta dos aspectos: la información disponible y la
información que necesitamos.
Los campos son los distintos tipos de datos que componen la tabla, por ejemplo: nombre, apellido,
domicilio. La definición de un campo requiere: el nombre del campo, el tipo de campo, el ancho del
campo, etc.
Los registros constituyen la información que va contenida en los campos de la tabla, por ejemplo: el
nombre del paciente, el apellido del paciente y la dirección de este. Generalmente los diferente
tipos de campos que su pueden almacenar son los siguientes: Texto (caracteres), Numérico
(números), Fecha / Hora, Lógico (informaciones lógicas si/no, verdadero/falso, etc.), imágenes.
En resumen, el principal aspecto a tener en cuenta durante el diseño de una tabla es determinar
claramente los campos necesarios, definirlos en forma adecuada con un nombre especificando su
tipo y su longitud.
Se utiliza para expresar relaciones entre relaciones o entre entidades y relaciones. Se representa
englobando la relación abstraída y las entidades que participan en ella en un rectángulo.
Objetivos
Independencia lógica. Las aplicaciones que utilizan la base de datos no deben ser
modificadas por que se modifiquen elementos de la base de datos. Es decir, añadir, borrar
y suprimir datos, no influye en las vistas de los usuarios.
Flexibilidad. La base de datos ofrece fácilmente distintas vistas en función de los usuarios y
aplicaciones.
Uniformidad. Las estructuras lógicas siempre tienen una única forma conceptual (las
tablas).
Sencillez.
Características
Refleja tan sólo la existencia de los datos, no lo que se hace con ellos.
Es independiente del sistema operativo y del DBMS que se emplee.
Es independiente de las restricciones de almacenamiento y de tiempo de ejecución.
Entidad
Se trata de cualquier objeto u elemento (real o abstracto) acerca del cual se pueda almacenar
información en la base de datos. Es decir, cualquier elemento informativo que tenga importancia
para una base de datos.
Cualquier tipo de objeto o concepto sobre el que se recoge información: cosa, persona, concepto
abstracto o suceso. Por ejemplo: coches, casas, empleados, clientes, empresas, oficios, diseños
de productos, conciertos, excursiones, etc.
Ejemplos de entidades son Pedro, la factura número 32456, el coche matrícula BBJ-OOJ. Una
entidad no es una propiedad concreta sino un objeto que puede poseer múltiples propiedades
(atributos). Es decir "Sánchez" es el contenido del atributo Primer Apellido de la entidad que
representa a la persona Pedro Sánchez Crespo con C.l. 12.345.678
Una entidad es un objeto concreto, no un simple dato: el carro que tenemos en el
estacionamiento es una entidad, "Hyundai" sin embargo es la marca de ese carro, es decir, es un
atributo de esa entidad.
Conjunto de Entidades: Las entidades que poseen las mismas propiedades forman
conjuntos de entidades. Ejemplos de conjuntos de entidades son los conjuntos: personas, facturas,
coches.
En el modelo entidad relación los conjuntos de entidades se representan con un rectángulo dentro
del cual se escribe el nombre de la entidad
Tipos de Entidades:
Fuertes o regulares. Son las entidades normales que tienen existencia por sí mismas sin
depender de otras. Su representación gráfica es la siguiente.
PERSONA
Débiles. Su existencia depende de otras. Por ejemplo la entidad tarea laboral sólo podrá
tener existencia si existe la entidad trabajo. Las entidades débiles se presentan de la
siguiente forma:
TAREAS
Relación LABORALES
Es una correspondencia o asociación entre dos o más entidades. Cada relación tiene un nombre
que describe su función. Las relaciones se representan gráficamente mediante rombos y su
nombre aparece en el interior.
Por ejemplo, en el caso de que tengamos una entidad personas y otra entidad trabajos. Ambas se
realizan ya que las personas trabajan y los trabajos son realizados por personas:
La representación gráfica de las entidades se realiza con un rombo al que se le unen líneas que se
dirigen a las entidades, las relaciones tienen nombre (se suele usar un verbo). En el ejemplo
anterior podría usarse como nombre de relación, trabajar:
Una relación también puede tener atributos de relación, o descriptivos, los cuales representan
PERSONAS
características propias de la asociación entre varias entidades. TRABAJOS
Relación Binaria
Relación Ternaria
Relación Doble
Relación Reflexiva
Relaciones Dobles. Se llaman así a dos relaciones distintas que sirven para relacionar a las
mismas relaciones. Son las más difíciles de manejar ya que al manipular las entidades hay
que elegir muy bien la relación a utilizar para relacionar los datos (enredado ¿no?).
Relación Reflexiva. Es una relación que sirve para relacionar ejemplares de la misma
entidad (personas con personas, piezas con piezas, etc.)
La cardinalidad con la que una entidad participa en una relación especifica el número mínimo y el
número máximo de correspondencias en las que puede tomar parte cada ocurrencia de dicha
entidad.
Indica el número de relaciones en las que una entidad puede aparecer, expresa el número máximo
de entidades de un conjunto que se relaciona con una entidad de otro conjunto y viceversa. Se
denota en términos de:
Cardinalidad mínima. Indica el número mínimo de asociaciones en las que aparecerá cada
ejemplar de la entidad (el valor que se anota es de cero o uno, aunque tenga una
cardinalidad mínima de más de uno, se indica sólo un uno).
Cardinalidad máxima. Indica el número máximo de relaciones en las que puede aparecer
cada ejemplar de la entidad. Puede ser uno, otro valor concreto mayor que uno (tres por
ejemplo) o muchos (se representa con n).
1:N
En el ejemplo un jugador tiene una cardinalidad mínima de 0 (puede no estar en ningún equipo) y
una máxima de 1 (como mucho está en un equipo, no puede estar en dos equipos a la vez).
Cada equipo tiene una cardinalidad mínima de uno (en realidad sería una cardinalidad mínima más
alta, pero se anota un uno), y una máxima de n (en cada equipo hay muchos jugadores).
También es muy frecuente, y la más usada, indicar la cardinalidad referida a la relación mediante
los símbolos: 1 y N. Indicando que la cardinalidad de la relación es:
1:1 -> uno a uno: Una entidad del primer conjunto sólo puede relacionarse con una
entidad del segundo conjunto y viceversa.
1:N -> uno a muchos: Una entidad del primer conjunto puede relacionarse con varias del
segundo, pero una entidad del segundo conjunto sólo puede relacionarse con una entidad
del primero.
N:N -> muchos a muchos: Una entidad del primer conjunto puede relacionarse con varias
entidades del segundo y viceversa.
En nuestro ejemplo la cardinalidad es 1:N porque un Equipo puede estar formado por muchos
Jugadores.
Muchos Uno
De cero a uno
Un ejemplo de este tipo seria el siguiente:
JUEGA JUGADOR
JUGADOR
ENTRENA
JUGADOR
En el ejemplo, la interpretación sería que cada equipo cuenta con varios jugadores. Un jugador
juega como mucho en un equipo y podría no jugar en ninguno. Cada entrenador entrena a un
equipo (podría no entrenar a ninguno), el cual tiene un solo entrenador como mucho y como poco.
Atributo
Es una característica de interés o un hecho sobre una entidad o sobre una relación. Los atributos
representan las propiedades básicas de las entidades y de las relaciones. Toda la información
extensiva es portada por los atributos. Gráficamente, se representan mediante bolitas que cuelgan
de las entidades o relaciones a las que pertenecen.
Tipos de Atributos:
Aparte de los atributos "normales" de los que ya hablamos en el ítem anterior, podemos encontrar
otros dos tipos adicionales a este, que son:
Atributos simples o atómicos. Son atributos no divisibles (normales).
Teléfono
Compuesto. Es cuando un atributo está formado a su vez por subatributos, o sea, que se
pueden dividir en sus componentes, pudiendo formar jerarquías.
Día
Fecha Mes
Años
Identificador
Un identificador de una entidad es un atributo o conjunto de atributos que determina de modo único
cada ocurrencia de esa entidad. Un identificador de una entidad debe cumplir dos condiciones:
1. No pueden existir dos ocurrencias de la entidad con el mismo valor del identificador.
2. Si se omite cualquier atributo del identificador, la condición anterior deja de cumplirse.
Toda entidad tiene al menos un identificador y puede tener varios identificadores alternativos. Las
relaciones no tienen identificadores.
Identificador o Clave: Se trata de uno o más campos cuyos valores son únicos en cada ejemplar
de una entidad. Se indican subrayando el nombre del identificador. Para que un atributo sea
considerado un buen identificador tiene que cumplir con lo siguiente:
Deben distinguir a cada ejemplar teniendo en cuenta las entidades que utiliza el modelo.
No tiene que ser un identificador absoluto.
Todos los ejemplares de una entidad deben tener el mismo identificador.
Cuando un atributo es importante aun cuando no tenga una entidad concreta
asociada, entonces se trata de una entidad y no de un atributo.
Identificador Alternativo: Se trata de uno o más campos cuyos valores son únicos para cada
ejemplar de una entidad, pero que no son identificadores ya que existen identificadores mejores
en la entidad. En este caso, los candidatos es aconsejable marcarlos con un subrayado
discontinuo.
Carece de un soporte formal y los SGBD no suelen implementarlo directamente. Normalmente hay
que transformarlo en un modelo de más bajo nivel.
DOMINIOS:
Un dominio contiene todos los posibles valores que puede tomar un determinado atributo. Dos
atributos distintos pueden tener el mismo dominio.
Ejemplos de Dominios:
RELACIÓN O TABLA:
En el Modelo Relacional, las relaciones se utilizan para almacenar información sobre los objetos
que se representan en la base de datos. Una relación se representa gráficamente como una tabla
bidimensional en la que las filas corresponden a registros individuales y las columnas
corresponden a los campos o atributos de esos registros.
Las entradas en la tabla tienen un solo valor, son atómicos; no se admiten valores
múltiples.
La información en las bases de datos son representados como datos explícitos, no existen
apuntadores o ligas entre las tablas.
VENTAJAS:
Puede crear formularios e informes que muestren sólo los datos que se quieren ver.
Puede crear cuestionarios para contestar preguntas que son difíciles e imposibles de ser
contestadas en las bases de datos más simples.
DESVENTAJAS:
ELEMENTOS DE LA RELACIÓN
Cuerpo de la relación: Representa el conjunto de m tuplas {t1, t2, tn} que forman la
relación.
Ejemplo:
Cliente
DNI
NOMBRE EDAD
1233344C
MARÍA 50
12374678G
DANIEL 25
28238232H
KARLA 30
Nombre: Cliente
Esquema: Cliente (DNI: DNI, NOMBRE: NOMBRE, EDAD: EDAD)
Cuerpo: {( DNI:” 1233344C”, NOMBRE:” MARÍA”, EDAD: 50);
( DNI:” 12374678G”, NOMBRE:” DANIEL”, EDAD: 25);
( DNI:” 28238232H”, NOMBRE:” KARLA”, EDAD: 30)}
TABLAS O RELACIONES
Las tablas o relaciones están constituidas por una o más tablas que contiene la información
ordenada de una forma organizada. Cumplen las siguientes reglas básicas:
Tipos de tablas:
Vistas: Son tablas que sólo almacenan información de consulta. Sí los datos de las tablas
base cambian, los de vista que utiliza esos datos también cambian.
Sólo modifican su resultado (actualiza los datos), siendo refrescadas por el sistema cada
cierto tiempo.
Posiblemente, la aplicación más compleja de la suite Office, sea Access, una base de datos
visual. Como todas las modernas bases de datos que trabajan en el entorno Windows, puede
manejarse ejecutando unos cuantos clics de mouse sobre la pantalla. Access contiene
herramientas de diseño y programación reservadas a los usuarios con mayor experiencia, aunque
incluye bases de datos listas para ser usadas; están preparadas para tareas muy comunes, que
cualquiera puede realizar en un momento determinado –ordenar libros, archivar documentación,
etc.
Este programa permite manipular datos en forma de tablas, realizar cálculos complejos con
fórmulas y funciones, incluso dibujar distintos tipos de gráficas.
Hay tres conceptos claves dentro de las tablas: campo, registro y dato.
Campo: Son los distintos tipos de datos que componen la tabla, por ejemplo: nombre,
apellido, domicilio. La definición de un campo requiere: el nombre del campo, el tipo de
campo, el ancho del campo, etc.
Elementos de Access:
Tablas: Las tablas contienen datos sobre algo o alguien, proveedores, clientes, libros en
una biblioteca, compras, ventas, etc.
Consultas: Las consultas se utilizan para localizar y depurar los datos en particular que
cumplen unas determinadas condiciones especificadas por el usuario. Las consultas
permiten realizar operaciones de muy diversa índole relacionadas con los datos contenidos
en la tabla. Por ejemplo, a partir de una tabla que contenga los registros de notas de
ciertos alumnos, mediante una consulta se puede depurar la tabla y saber la cantidad de
aprobados y reprobados.
Formularios: Los formularios son otra herramienta de Access que permite visualizar,
introducir y modificar los datos de las tablas de una manera muy sencilla e interactiva que
hace más ameno el trabajo al usuario. Al abrir un formulario, Access recupera en él los
datos de una o varias tablas y les muestra en un diseño de ficha creado, bien de forma
automática por el Asistente para Formularios, o manualmente por el usuario. Al mostrar los
datos, el usuario puede desplazarse en la tabla visualizando toda la información y
realizando operaciones sobre los registros.
Informes: Los Informes se utilizan primordialmente para presentar, resumir e imprimir los
datos de la forma que resulte más apropiada para cada proyecto. Permite realizar
impresiones personalizadas así también como etiquetas. Se pueden crear informes que
incorporen cálculos basados en los datos de las tablas para mostrar resultados totales o
promedios o bien para generar catálogos.
Ejemplo:
Elementos de Access
CLAVES
Clave candidata: Conjunto de atributos que identifica unívocamente cada tupla de la relación de la
relación. Es decir, columnas cuyos valores no se repiten en ninguna otra tupla de esa tabla.
Clave primaria: Clave candidata que se escoge como identificador de las tuplas. Se elige como
primaria la candidata que identifique mejor a cada tupla en el concepto de la base de datos. Por
ejemplo, un campo con el DNI sería clave candidata de una tabla de clientes, si esa relación tiene
un campo de código cliente éste sería mejor candidato y por lo tanto clave principal porque es
mejor identificador para ese contexto.
Clave externa, ajena o secundaria: Son los datos de atributos de una tabla cuyos valores están
relacionados con atributos de otra tabla.
Por ejemplo, en la Tabla Equipos se tienen los siguientes datos.
En la tabla anterior, la clave principal es el atributo No. Equipo. En esta tabla, se tiene los
siguientes datos:
No. Jugador Jugador No. Equipo
1 karanka 1
2 Ronaldinho 2
3 Raúl 1
4 Beckam 1
El atributo No. Equipo sirve para relacionar el jugador con el equipo al que pertenece. Ese campo
en la tabla de jugadores es una clase externa.
NULOS
Cuando en una tupla un atributo es desconocido, se dice que es nulo. Un nulo no representa el
valor cero ni la cadena vacía, éstos son valores que tienen significado. El nulo implica ausencia de
información, bien porque al insertar la tupla se desconocía el valor del atributo, o bien porque para
dicha tupla el atributo no tiene sentido.
Ya que los nulos no son valores, deben tratarse de modo diferente, lo que causa problemas
de implementación. De hecho, no todos los SGBD relacionales los soportan.
En los lenguajes de programación se utiliza el valor nulo para reflejar que un identificador no
tiene ningún contenido. Al programar en esos lenguajes, se trata de un valor que no permita
utilizarse en operaciones aritméticas o lógicas.
En las bases de datos relacionales se utiliza con más posibilidades, aunque su significado no
cambia: valor vacío, se utiliza para diversos fines. En claves secundarias indican que el registro
actual no está relacionado con ninguno. En otros atributos indica que no se puede rellenar ese
valor por la razón que sea. Es importante indicar que el texto vacío “, no es lo mismo que el nulo;
como tampoco el valor cero significa nulo. *
Puesto que ese valor se utiliza continuamente, resulta imprescindible saber cómo actúa
cuando se emplea operaciones lógicas sobre ese valor. Eso significa definir un tercer valor e la
lógica booleana, además de los clásicos verdadero y falso. Un valor nulo no es ni verdadero ni
falso; se suele interpretar como un quizás. Se utiliza un operador en todas las bases relacionales
llamado is null que devuelve verdadero si el valor con el que se compara es nulo. El uso de
operadores lógicos con el nulo da lugar a que:
Verdadero Y (AND) nulo da como resultado, nulo.
Falso Y (AND) nulo da como resultado, falso.
Verdadero O (OR) nulo da como resultado, verdadero.
Falso O nulo da como resultado, nulo.
RESTRICCIONES
Una restricción es una condición que obliga el cumplimiento de ciertas condiciones en los datos de
la base de datos, provee un método de implementar reglas y restringen los datos que pueden ser
almacenados en las tablas. Usualmente, se definen usando expresiones que dan como resultado
un valor booleano, indicando si los datos satisfacen la restricción o no. Las restricciones no son
parte formal del modelo relacional, pero son incluidas porque juegan el rol de organizar mejor los
datos.
Algunas restricciones las puede definir el usuario, por ejemplo, usar un campo con valores
enteros entre 1 y 10. Otras restricciones no son determinadas por los usuarios, sino que son
inherentemente definidas por el simple hecho de que la base de datos sea relacional. Entre los
tipos de restricciones se encuentran las siguientes:
Restricciones Inherentes: Son aquellas que no son determinadas por los usuarios, sino que son
definidas por el hecho de que la base de datos sea relacional. Entre las Restricciones Inherentes
más importantes se encuentran:
Clave primaria (primary key): Hace que los atributos marcados como clave primaria o puedan
repetir valores. Además, obliga a que esos atributos no puedan estar vacíos (nulos); es más, si la
clave primaria la forman varios atributos, ninguno de ellos podrá estar vacío.
Unicidad (unique): Impide que los valores de los atributos marcados de esa forma, puedan
repetirse. Esta restricción debe indicarse en todas las claves alternativas. Al marcar una clave
primaria se añade automáticamente sobre los atributos que forman la clave un criterio de unicidad.
Obligatoriedad (not null): Prohibe que el atributo marcado de esta forma no tenga ningún valor, es
decir, impide que pueda contener el valor nulo, null.
Integridad referencial: (foreign key): Sirve para indicar una clave externa. Cuando esa clave se
marca con integridad referencial, no se podrán introducir valores que no estén incluidos en los
campos relaciones con esa clave.
Por ejemplo, si hay una tabla de alquileres en la que cada fila es un alquiler, existirá un
atributo cod_cliente que indicará el código del cliente y que estará relacionado con una tabla de
clientes, e la que dicho atributo es la clave principal. De hecho no se podrá incluir un código que no
esté en la tabla clientes; eso es lo que prohíbe la integridad referencial.
Regla de validación (check): Condición que debe cumplir un dato concreto para que sea
actualizado. Puede afectar a una tabla o a varias. Por ejemplo, restringir el campo sueldo para que
siempre sea mayor de 1000, sería una regla de validación.
Disparadores (triggers): Permiten además de indicar una condición, especificar la acción que se
quiere que se ejecute, si la condición se cumple. En la actualidad, los disparadores lo soportan la
mayoría de los productos comerciales relacionales.
NORMALIZACIÓN
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:
Dependencias funcionales.
Una relación se compone de atributos y dependencias. Los atributos son fáciles de identificar,
ya que forman parte de la estructura de la relación, y además, los elegimos nosotros mismos como
diseñadores de la base de datos.
Estas dependencias son consecuencia de la estructura de la base de datos y de los objetos del
mundo real que describen, y no de los valores actualmente almacenados en cada relación.
Definición: Sean X e Y subconjuntos de atributos de una relación. Diremos que Y tiene una
dependencia funcional de X, o que X determina a Y, si cada valor de X tiene asociado siempre un
único valor de y.
Dependencia funcional transitiva: supongamos que tenemos una relación con tres conjuntos
de atributos: X, Y y Z, y las siguientes dependencias X → Y, Y → Z, Y → |X. Es decir, X determina
Y e Y determina Z, pero Y no determina X. En este caso decimos que Z tiene dependencia
transitiva con respecto a X, a través de Y.
Formas Normales
Definición: son reglas que permiten crear bases de datos libres de redundancias e
inconsistencias, que se ajusten a la definición de Edgar Codd de bases de datos relacional.
Las formas normales son aplicadas a las tablas de una base de datos. Decir que una base
de datos está en la forma normal N es decir que todas sus tablas están en la forma normal N.
En general, las primeras tres formas normales son suficientes para cubrir las necesidades
de la mayoría de las bases de datos. El creador de estas 3 primeras formas normales (o reglas) fue
Edgar F. Codd.
Una columna no puede tener múltiples valores. Los datos son atómicos. (Si a cada valor de X
le pertenece un valor de Y, entonces a cada valor de Y le pertenece un valor de X)
Esta forma normal elimina los valores repetidos dentro de una Base de Datos.
EJEMPLO:
Tenemos una empresa pública donde los puestos de trabajo están regulados por el Estado, de
modo que las condiciones salariales están determinadas por el puesto. Se ha creado el siguiente
esquema relacional
EMPLEADOS (nss, nombre, puesto, salario, emails) con nss como clave primaria.
Tendríamos el siguiente esquema para la nueva tabla EMPLEADOS'(a) con clave primaria
(nss, email):
Y además tendríamos una nueva tabla EMAILS con clave primaria (nss, email):
nss email
111 juanp@ecn.es
111 jefe2@ecn.es
222 jsanchez@ecn.es
333 adiaz@ecn.es
333 ana32@gmail.com
... ...
Tabla 4
Dependencia Funcional. Una relación está en 2FN si está en 1FN y si los atributos que no
forman parte de ninguna clave dependen de forma completa de la clave principal. Es decir que no
existen dependencias parciales.
Esta regla significa que en una relación sólo se debe almacenar información sobre un tipo
de entidad, y se traduce en que los atributos que no aporten información directa sobre la clave
principal deben almacenarse en una relación separada.
En otras palabras podríamos decir que la segunda forma normal está basada en el
concepto de dependencia completamente funcional. Una dependencia funcional X → Y es
completamente funcional si al eliminar los atributos A de X significa que la dependencia no es
mantenida, esto es que A Є X, (X – {A}) -x-> Y. Una dependencia funcional X → Y es una
dependencia parcial si hay algunos atributos que pueden ser eliminados de X y la
dependencia todavía se mantiene, esto es A Є X, (X – {A}) -> Y.
Para aplicar esta forma normal, lo primero es identificar las claves candidatas. Además, se
elige una clave principal, que se abrevia PK, las iniciales de Primary Key. Esto es optativo, el
modelo relacional no obliga a elegir una clave principal para cada relación, sino tan sólo a la
existencia de al menos una clave candidata.
La inexistencia de claves candidatas implica que la relación no cumple todas las normas
para ser parte de una base de datos relacional, ya que la no existencia de claves implica la
repetición de tuplas.
Siguiendo el ejemplo: las dependencias funcionales que tenemos son las siguientes:
puesto->salario
Como la clave es (nss, email), las dependencias de nombre, salario y email son
incompletas, por lo que la relación no está en 2FN.
En general, tendremos que observar los atributos no clave que dependan de parte de la
clave.
Para solucionar este problema, tenemos que hacer lo siguiente para los gupos de atributos
con dependencia incompleta M:
Eliminar de R el atributo M.
Crear una nueva relación N con el atributo M y la parte de la clave primaria K de la que
depende, que llamaremos K'.
Siguiendo el ejemplo anterior, crearíamos una nueva relación con los atributos que tienen
dependencia incompleta:
Tabla 5
nss email
111 juanp@ecn.es
111 jefe2@ecn.es
222 jsanchez@ecn.es
333 adiaz@ecn.es
333 ana32@gmail.com
... ...
Tabla 6
La tercera forma normal consiste en eliminar las dependencias transitivas. Esto significa
que se debe eliminar cualquier relación que permita llegar a un mismo dato de dos o más formas
diferentes.
Un ejemplo de este concepto sería que, una dependencia funcional X→Y en un esquema
de relación R es una dependencia transitiva si hay un conjunto de atributos Z que no es un
subconjunto de alguna clave de R, donde se mantiene X→Z y Z→Y.
puesto->salario
En la nueva tabla PUESTOS, la clave sería el puesto, que también queda como clave
ajena referenciando la tabla EMPLEADOS. El resto de las tablas quedan como estaban.
Reglas de Codd
Codd se percató de que existían bases de datos en el mercado las cuales decían ser
relacionales, pero lo único que hacían era guardar la información en las tablas, sin estar estas
tablas literalmente normalizadas; entonces éste publicó 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.
Regla No. 2 - La regla del acceso garantizado
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 o inaplicables
La descripción de la base de datos es almacenada de la misma manera que los datos ordinarios,
esto es, en tablas y columnas, y debe ser accesible a los usuarios autorizados.
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 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.
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
catalogo, no en el programa de aplicación.
1. Ningún componente de una clave primaria puede tener valores en blanco o nulos (ésta es
la norma básica de integridad).
2. Para cada valor de clave foránea deberá existir un valor de clave primaria concordante. La
combinación de estas reglas aseguran 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.
EJEMPLO 1:
Fecha: Cliente:
# Factura: Nombre:
CI:
Dirección:
Video Teléfono:
ID #Copia Título Costo
Subtotal:
IVA:
Total:
EJEMPLO 2:
Normalización de una base de datos para una empresa que vende productos por internet
# Factura:
Cliente Tarjeta Internet
Dirección: Banco:
Artículo
#Artículo Nombre Descripción Cant Solicitada PVS PVP Cant enviada
Subtotal:
IVA:
Total:
Ejemplo
En este ejemplo el atributo nombre_e de la relación LIBRO es clave ajena que referencia a
EDITORIAL, de modo que debe concordar con la clave primaria de la relación EDITORIAL o bien
ser nulo, porque los libros de nuestra base de datos deberán pertenecer a una editorial existente, o
si se desconoce la editorial, no se tendrá ningún valor para este atributo.
En este ejemplo la relación ESCRIBE posee dos claves ajenas: nombre, que referencia a
la relación AUTOR, y cod_libro, que referencia a la relación LIBRO; en este caso ninguna de las
dos claves ajenas puede tomar valores nulos, ya que forman parte de la clave primaria de la
relación ESCRIBE.
Operaciones Unitarias:
• Renombrado:
• Selección:
El operador de Selección (σ) es una operación que aplicada a una tabla obtiene un
subconjunto de filas de esa tabla en la que solo aparecen las filas que cumplan un
determinado criterio.
• Operadores de comparación.
• Operadores de lógicos.
∧(and),∨(or), ¬ (not)
• Formato de Uso:
σ (condición) (RELACION)
Ejemplo.
Los datos de los empleados con sueldo ≥ $500.000 que ingresaron después del 2003:
Proyección ( π ):
π nombre,apellidos(Cliente)
Por ejemplo: Se tiene la siguiente tabla:
tabla1
id apellido
123 Prierez
454 Sanchez
102 Lopez
554 Gomez
5 Gonzalez
nombre estado
Fulano soltero
Mengano soltero
Tulana casado
Tutulano viudo
Si R y S son dos relaciones del mismo grado y definidas sobre el mismo conjunto de atributos; R u
5 es una relación del mismo grado que R y S, y definida sobre el mismo conjunto de atributos,
donde Las tuplas de esa nueva relación son todas las tuplas de R y todas Las tuplas de S.
Ejemplo:
Id Nombre Apellido
15 Ángel Romero
34 Luis Hernández
12 Jesús Ríos
43 David Medina
Id Nombre Apellido
44 José Pérez
63 Enrique Páez
55 Raúl Marcano
TABLA1 U TABLA2
Id Nombre Apellido
15 Ángel Romero
34 Luis Hernández
12 Jesús Ríos
43 David Medina
44 José Pérez
63 Enrique Páez
55 Raúl Marcano
Diferencia (-):
Si R y S son dos relaciones del mismo grado y definidas sobre el mismo conjunto de atributos; R -
S es una relación del mismo grado y atributos formada por todas las tuplas de R que no están
presentes en S.
Ejemplo:
Id Nombre Color
10 Ángel Azul
20 Luis Rojo
30 Jesús Verde
40 David Amarillo
Id Nombre Color
20 Luis Rojo
25 Enrique Azul
30 Jesús Verde
TABLA1 - TABLA2
Id Nombre Color
10 Ángel Azul
40 David Amarillo
Intersección (∩):
Si R y S son dos relaciones del mismo grado y definidas sobre el mismo conjunto de atributos; R ∩
S es una relación del mismo grado y atributos formada por todas las tupias de R y están presentes
en S.
Ejemplo:
Id Nombre Color
10 Ángel Azul
20 Luis Rojo
30 Jesús Verde
40 David Amarillo
Id Nombre Color
20 Luis Rojo
25 Enrique Azul
30 Jesús Verde
TABLA1 ∩ TABLA2
Id Nombre Color
20 Luis Rojo
30 Jesús Verde
Si R es una relación de grado GI y S es una relación de grado G2; R x S es una relación de grado
GI +G2 cuyos GI primeros componentes forman una tupla de R y los siguientes G2 forman una
tupla de S. Es decir, el producto cartesiano es una relación que contiene todas Las tuplas que
resultan de combinar cada tupla de R con cada tupla de S.
Ejemplo:
Id Nombre Color
10 Ángel Azul
40 David Amarillo
TABLA2(id, numero)
Id Numero
20 1
25 2
30 3
TABLA1 X TABLA2
10 Ángel Azul 20 1
40 David Amarillo 25 2
10 Ángel Azul 30 3
40 David Amarillo 20 1
10 Ángel Azul 25 2
40 David Amarillo 30 3
Podemos ver que el grado resultante es: 3 + 2 = 5, y la cardinalidad será de: 2*3= 6.
• Combinación o Join (∞): es una de las más útiles del álgebra relacional y la empleada con
mayor frecuencia para combinar información de dos o mas relaciones.
cliente.dni = alquiler.dni
tabla1 (id,nombre,apellido)
tabla1
id nombre apellido
15 Fulginio Llepez
26 Cascanio Sanchez
tabla2(id, numero
tabla2
id numero
15 12345678
26 21222112
15 66525425
La composición de estas dos tablas, para una combinacion en que “id” sea igual en ambas sería:
• Combinación natural o Join natural: Es una combinación que no indica condición alguna y
que automáticamente obtiene las tuplas combinadas cuyos atributos comunes a ambas
tablas sean del mismo valor.
x y nombre
A 4 Fulginio
A 6 Cascanio
B 3 Melania
C 4 Juanita
tabla1 [tabla1.x = tabla2.x Y tabla1.y = tabla2.y] tabla2
C 7 Antonio
x y nombre número
D 2 Fernando
D 5 Ana
A 6 Cascanio 145
C 4 140
D 2 130
D 5 302
tabla S. Es decir, se obtienen las tupIas cuyos contenidos en los atributos comunes poseen todas
las combinaciones almacenadas en S.
Por ejemplo:
R S
R÷S
Las tablas del Sistema es una base de datos creada y mantenida de manera automática por el
propio DBMS que contiene información (descripción) de los objetos del propio sistema y de la
estructura de la base de datos, en otras palabras, es conocida como” la base de datos de la base
de datos”.
El catalogo del sistema acepta que se realicen consultas externas, pero evidentemente no
permite que se manipulen los datos que contienen (por ejemplo actualizarlos). Cabe destacar que
para manejar el catalogo de sistema se hace mediante el DBMS, el cual es un conjunto de
programas que se encarga de manejar la creación y todos los accesos a la base de datos. Así
como también es un medio de interfaz entre la base de datos, el usuario, y las aplicaciones que la
utilizan.
Ningún usuario debe modificar directamente las tablas del sistema. Por ejemplo, no intente
modificar tablas del sistema con las instrucciones DELETE, UPDATE o INSERT, ni con
desencadenadores definidos por el usuario. Se permite hacer referencia a columnas
documentadas en las tablas del sistema. Sin embargo, muchas de las columnas de las tablas del
sistema no están documentadas. No deben escribirse aplicaciones que consulten directamente
columnas no documentadas. En su lugar, las aplicaciones deben usar cualquiera de los
componentes siguientes para recuperar la información almacenada en las tablas del sistema:
Estos componentes conforman una API publicada para obtener información del sistema de
SQL Server. Microsoft mantiene la compatibilidad de estos componentes entre versiones. El
formato de las tablas del sistema depende de la arquitectura interna de SQL Server y puede
cambiar de una versión a otra. Por tanto, puede ser necesario modificar las aplicaciones que tienen
acceso directo a columnas no documentadas de las tablas del sistema para que puedan tener
acceso a una versión posterior de SQL Server.
Las tablas del sistema se forman dependiendo de diversos tipos de gestores resaltando que
un gestor es una herramienta de una base de datos. En este caso utilizaremos dos tipos de
gestores los cuales son SQLServer y MySQL.
Las tablas del sistema se organizan según las siguientes áreas de características:
Transact-SQL
Backupfile: Contiene una fila por cada archivo de datos o de registro de una base de
datos. Las columnas describen la configuración del archivo en el momento en que se
realizó la copia de seguridad. La columna is_present determina si el archivo se va a incluir
en la copia de seguridad. Esta tabla se almacena en la base de datos msdb.
Backupfilegroup: Contiene una fila para cada grupo de archivos de una base de datos en
el momento de realizar la copia de seguridad. La tabla backupfilegroup se almacena en la
base de datos msdb.
Backupmediafamily: Contiene una fila por cada familia de medios. Si una familia de
medios reside en un conjunto de medios reflejado, la familia tiene una fila independiente
para cada reflejo del conjunto de medios. Esta tabla se almacena en la base de datos
msdb.
Backupmediaset: Contiene una fila por cada conjunto de medios de copia de seguridad.
Esta tabla se almacena en la base de datos msdb.
Restorefile: Contiene una fila por cada archivo restaurado, incluidos los restaurados
indirectamente por el nombre de grupo de archivos. Esta tabla se almacena en la base de
datos msdb.
Restorefilegroup: Contiene una fila por cada grupo de archivos restaurado. Esta tabla se
almacena en la base de datos msdb.
Restorehistory: Contiene una fila por cada operación de restauración. Esta tabla se
almacena en la base de datos msdb.
suspect_pages: Contiene una fila por página en la que se produjo un error pequeño 823 o
un error 824. Se hace una lista de páginas en esta tabla porque se sospecha que estén
dañadas, pero es posible que, en realidad, sean correctas. Cuando se repara una página
sospechosa, su estado se actualiza en la columna event_type.
La siguiente tabla, con un límite de 1.000 filas, se almacena en la base de datos msdb.
Sysopentapes: Contiene una fila por cada dispositivo de cinta abierto. Esta vista
se almacena en la base de datos maestra.
Tablas de captura de datos de cambio (Transact-SQL)
cdc.ddl_history: Devuelve una fila para cada cambio del lenguaje de definición de
datos (DDL) realizado en las tablas que se habilitan para la captura de datos de cambio.
cdc.lsn_time_mapping: Devuelve una fila para cada transacción que tiene filas en
una tabla de cambios. Esta tabla se utiliza para las asignaciones entre los valores de
confirmación de número de secuencia de registro (LSN) y la hora de confirmación de la
transacción.
sysdbmaintplan_databases: Contiene una fila por cada base de datos que tiene
un plan de mantenimiento de bases de datos actualizado asociado.
Los temas de esta sección describen las tablas del sistema que almacenan
información utilizada en las operaciones de trasvase de registros.
Las tablas base del sistema son las tablas subyacentes que almacenan los
metadatos para una base de datos específica. La base de datos maestra es especial al
respecto porque contiene algunas tablas adicionales que no se encuentran en ninguna de
las demás bases de datos. Estas tablas contienen metadatos persistentes con un ámbito
para todo el servidor
Las tablas base del sistema se utilizan sólo en SQL Server Database Engine
(Motor de base de datos de SQL Server) y no son para el uso general de los clientes.
Están sujetas a cambios y no se garantiza su compatibilidad.
En la tabla siguiente se enumeran y describen algunas de las tablas base del sistema de
SQL Server.
Tipo de mensaje
Contrato de servicio
Servicio
Ensamblado
Dispositivo de copia de seguridad
Catálogo de texto completo
Función de partición
Esquema de partición
Grupo de archivos
Clave de ofuscación
My SQL:
CARACTERISTICAS DE My SQL:
SQL SERVER:
Este tipo de gestor almacenan los datos que definen la configuración del servidor y
de todas sus tablas en un conjunto de tablas especial, conocida como tablas del sistema.
Si se quieren ver datos de base del sistema no se debe utilizar en los programas
instrucciones Transact-SQL que consulten directamente las tablas del sistema, a menos
que ése sea el único modo de obtener la información que requiere la aplicación. En su
lugar, las aplicaciones deben obtener información de catálogo y del sistema mediante el
uso de:
A continuación se muestran las tablas del sistema que almacenan la información utilizada por el
agente SQL Server.
SQL Server proporciona las siguientes tipos de tablas que permiten llevar a cabo
objetivos especiales en una base de datos.
Tablas con particiones: Son tablas cuyos datos se han dividido horizontalmente
entre unidades que pueden repartirse por más de un grupo de archivos de una base,
facilitan la administración de las tablas y los índices grandes porque permiten obtener
acceso y administrar subconjuntos de datos con rapidez y eficacia al mismo tiempo que
mantienen la integridad del conjunto.
Tablas temporales:
Las tablas temporales locales: son visibles solo para sus creadores durante la
misma conexión a una instancia de SQLServer, las tablas locales se eliminan cuando el
usuario se desconecta de la instancia de SQLServer.
Las tablas globales: están visibles para cualquier usuario y conexión una vez
creadas, y se eliminan cuando todos los usuarios que hacen referencia a la tabla se
desconectan de la instancia de SQLServer.
Tablas persistentes:
Son aquellas que permiten que los registros sean eliminados o borrados
manualmente y tenemos de tres tipos: base, vistas, instantáneos.
Base: es en donde se encuentra toda la información de todos los registros sin que
se haga ninguna validación adicional.
Vistas: en una vista o relación que se hace en referencia a una fila o columna
específica.
Instantáneos: son aquellos registros que se puede ver de manera inmediata con
solo una referencia.
Las vistas de catálogo devuelven información utilizada por el SQL Server Database
Engine (Motor de base de datos de SQL Server). Se recomienda utilizar las vistas de
catálogo porque son la interfaz más general para los metadatos del catálogo y
proporcionan el método más eficaz para obtener, transformar y presentar formas
personalizadas de esta información. Todos los metadatos del catálogo disponibles para el
usuario se exponen mediante las vistas de catálogo.
La transacción consiste en todas las operaciones que se ejecutan entre inicio transacción
y el fin transacción. Para asegurar la integridad de los datos se necesita que el sistema de base
de datos mantenga las siguientes propiedades de las transacciones:
Permanencia. Es la propiedad de las transacciones que asegura que una vez que una
transacción finaliza exitosamente, sus resultados son permanentes y no pueden ser borrados de la
base de datos por alguna falla posterior
Confiabilidad. Puesto que los sistemas de base de datos en línea no pueden fallar.
Disponibilidad. Debido a que los sistemas de base de datos en línea deben estar
actualizados correctamente todo el tiempo.
Rendimiento. Los sistemas de base de datos en línea requieren procesar miles de
transacciones por segundo.
Atomicidad: El sistema de base de datos mantiene los valores antiguos (en disco) de
aquellos datos sobre los que una transacción realiza una escritura y, si la transacción no completa
su ejecución, los valores antiguos se recuperan para que parezca que la transacción no se ha
ejecutado.
Durabilidad: una vez que se completa con éxito la ejecución de una transacción, y
después de comunicar al usuario que inició la transacción que se ha realizado la transferencia de
fondos, no debe suceder que un fallo en el sistema produzca la pérdida de datos correspondientes
a dicha transferencia. La propiedad de durabilidad asegura que, una vez que se completa con éxito
una transacción, persisten todas las modificaciones realizadas en la base de datos, incluso si hay
un fallo en el sistema después de completarse la ejecución de dicha transacción. A partir de ahora
se asume que un fallo en la computadora del sistema produce una pérdida de datos de la memoria
principal, pero los datos almacenados en disco nunca se pierden. Se puede garantizar la
durabilidad si se asegura que:
1. Las modificaciones realizadas por la transacción se guardan en disco antes de que finalice la
transacción.
2. La información de las modificaciones realizadas por la transacción guardada en disco es
suficiente para permitir a la base de datos reconstruir dichas modificaciones cuando el sistema se
reinicie después del fallo. La responsabilidad de asegurar la durabilidad es de un componente del
sistema de base de datos llamado componente de gestión de recuperaciones.
El componente de gestión de transacciones y el componente de gestión de recuperaciones
están estrechamente relacionados, y su implementación.
Aislamiento: incluso si se aseguran las propiedades de consistencia y de atomicidad para
cada transacción, si varias transacciones se ejecutan concurrentemente, se pueden entrelazar sus
operaciones de un modo no deseado, produciendo un estado inconsistente. Por ejemplo, como se
ha visto antes, la base de datos es inconsistente temporalmente durante la ejecución de la
transacción para transferir fondos de la cuenta A a la cuenta B, con el total deducido escrito ya en
A y el total incrementado todavía sin escribir en B. Si una segunda transacción que se
ejecuta concurrente lee A y B en este punto intermedio y calcula A + B, observará un valor
inconsistente. Además, si esta segunda transacción realiza después modificaciones en A y B
basándose en los valores leídos, la base de datos puede permanecer en un estado inconsistente
aunque ambas transacciones terminen.
Una solución para el problema de ejecutar transacciones concurrentemente es ejecutarlas
secuencialmente, es decir, una tras otra. Sin embargo, la ejecución concurrente de transacciones
produce notables beneficios en el rendimiento, Se han desarrollado otras soluciones que permiten
la ejecución concurrente de varias transacciones.
La propiedad de aislamiento asegura que el resultado obtenido al ejecutar
concurrentemente las transacciones es un estado del sistema equivalente a uno obtenido al
ejecutar una tras otra en algún orden. La responsabilidad de asegurar la propiedad de aislamiento
es de un componente del sistema de base de datos llamado componente de control de
concurrencia.
ESTADOS DE UNA TRANSACCIÓN
Después pasa al estado abortada. En este punto, el sistema tiene dos opciones:
La mayoría de las bases de datos se utilizan en entornos multi-usuario, en los que muchos
clientes utilizando la misma aplicación, o muchas aplicaciones cada una con uno o muchos clientes
acceden a la misma Base de Datos. Cada una de esas aplicaciones enviará consultas al gestor, y
normalmente cada hilo de ejecución será una transacción diferente. En la mayoría de los sistemas
operativos actuales, las diferentes tareas o hilos se ejecutan de forma intercalada (incluso en el
caso de máquinas con varios procesadores). Es decir, el sistema operativo decide por su cuenta
cuando suspender una de las tareas y darle un poco de tiempo de ejecución a otra. Si hay tareas
simultáneas o concurrentes sobre la misma Base de Datos, esta intercalación puede resultar en
que las lecturas y escrituras de las diferentes tareas o aplicaciones en el medio físico se realicen
en cualquier orden y secuencia.
Existen varias técnicas para controlar la concurrencia. Los bloqueos son los más
conocidos, aunque también se utiliza el control multi-versión y otras técnicas como las marcas de
tiempo.
Una forma de controlar la concurrencia es hacer que cada transacción deba adquirir un
derecho de acceso exclusivo a cada fragmento de datos que necesite modificar. A estos
“derechos” se les denomina bloqueos.
BLOQUEOS BINARIOS
La forma más simple de bloquear es utilizar Bloqueos Binarios. En este cada transacción
debe solicitar el bloqueo de cada fragmento de datos A que vaya a utilizar antes de acceder a él
(sea para leerlo o escribirlo), mediante una operación bloquear(A). Deberá liberar todos los
bloqueos, mediante una operación desbloquear(A) de modo que otras tareas puedan tomarlos.
Este sistema de bloqueos tiene una implementación muy simple, ya que solo requiere
mantener una tabla que indica qué partes de los datos está bloqueada y por qué transacción.
BLOQUEOS DE LECTURA/ESCRITURA
LECTURA ESCRITURA
LECTURA Compatible Incompatible
ESCRITURA Incompatible Incompatible
SERIALIZACIÓN DE LOS BLOQUEOS DE LECTURA/ESCRITURA
La Serialización de las operaciones de lectura y escritura consiste en ordenar esas
operaciones para un conjunto de transacciones concurrentes de modo que los resultados de las
operaciones sean correctos.
Los bloqueos garantizan el acceso exclusivo a un dato o fragmento de información
(evitando ciertos problemas), pero los problemas asociados a la intercalación de las operaciones
compuestas aún pueden darse.
BLOQUEOS COMPARTIDOS
Los Bloqueos Compartidos permiten que varias transacciones simultáneas lean (SELECT)
un recurso en situaciones de control de simultaneidad pesimista. Ninguna otra transacción podrá
modificar los datos mientras el Bloqueo Compartido exista en el recurso. Los Bloqueos
Compartidos en un recurso se liberan tan pronto como finaliza la operación de lectura, a menos
que se haya establecido el nivel de aislamiento de la transacción como REPEATABLE READ o
más alto, o bien se utilice una sugerencia de bloqueo para mantener los bloqueos compartidos
durante la transacción.
BLOQUEOS EXCLUSIVOS
Los Bloqueos Exclusivos evitan que transacciones simultáneas tengan acceso a un
recurso. Al utilizar un Bloqueo Exclusivo, el resto de las transacciones no pueden modificar los
datos; las operaciones de lectura sólo se pueden realizar si se utiliza la sugerencia NOLOCK o el
nivel de aislamiento de lectura no confirmada.
Las instrucciones para modificar datos, como INSERT, UPDATE y DELETE combinan las
operaciones de modificación con las de lectura. En primer lugar, la instrucción lleva a cabo
operaciones de lectura para adquirir los datos antes de proceder a ejecutar las operaciones de
modificación necesarias. Por tanto, las instrucciones de modificación de datos suelen solicitar
bloqueos compartidos y exclusivos. Por ejemplo, una instrucción UPDATE puede modificar las filas
de una tabla a partir de una combinación con otra tabla. En este caso, la instrucción UPDATE
solicita bloqueos compartidos para las filas leídas en la tabla de combinación, además de bloqueos
exclusivos para las filas actualizadas.
Estructura del sistema operativo: las mismas ventajas de estructuración son aplicables a
los programadores de sistemas y se ha comprobado que algunos sistemas operativos
están implementados como un conjunto de procesos o hilos.
SEMÁFOROS: Un semáforo nos sirve para poder permitir o restringir a los procesos o
hilos el acceso a algún recurso compartido. También es una estructura formada por una posición
de memoria y dos instrucciones, una para reservarlo y otra para liberarlo, ellas son: semwait
(espera) que decrementa el valor del semáforo si el valor pasa a ser negativo entonces el proceso
que está ejecutando semwait se se bloquea, en otro caso el proceso continua su ejecución, y
semsignal (señal) esta incrementa el valor del semáforo si el valor es menor o igual a cero
entonces se desbloquea unos de los proceso bloqueados en la operación semwait, y por ultimo un
semáforo no puede comenzar en un valor negativo.
Los datos contenidos en el monitor pueden ser globales (accesibles a todos los
procedimientos dentro del monitor), o locales (accesibles a un procedimiento específico). Estos
datos sólo son accesibles dentro del monitor; no hay forma de que un proceso fuera del monitor
pueda acceder a dichos datos