Bases de Datos - 2o Estadística

El modelo de datos relacional

La teoría del modelo de datos relacional es obra del investigador de IBM Edgar Codd en 1970. Goza de una fuerte base matemática. El modelo relacional se caracteriza a muy grandes rasgos por disponer que toda la información debe estar contenida en tablas, y las relaciones entre datos deben ser representadas explícitamente en esos mismos datos.


Estructura de las bases de datos relacionales

[Estructura de una base de datos relacional]

Tablas


Claves


Restricciones

El modelo relacional de datos contempla tres tipos de restricciones:

1. Integridad de la clave. Ningún atributo de una clave candidata puede tomar valores nulos. Lógicamente, los atributos que forman una clave candidata han de tomar siempre valores distintos para cada posible tupla.

2. Integridad de referencia o referencial. Sea T1.a un atributo de la tabla T1 que forma parte de una clave ajena para la tabla T2. Es decir, que en T2 existe un atributo definido con el mismo dominio, aunque no obligatoriamente con igual nombre, y que es parte de su clave primaria. Entonces, T1.a debe ser siempre igual a algún valor ya contenido en el atributo referenciado en la tabla T2, o bien tomar un valor nulo.

3. Otras restricciones de acuerdo con la semántica concreta del problema. Pueden ser sencillas, como la especificación de valores mínimos o máximos que puede tomar un atributo numérico, lista de valores permitidos de un atributo, o más complejas: condiciones sobre valores de los atributos en función de valores de otros atributos de esa u otras tablas.


Ejemplo

Se desea almacenar información sobre alumnos universitarios.

Se pide: esquema conceptual (modelo E-R) y esquema relacional (tablas, atributos, claves y restricciones).


Restricciones en el ejemplo

1. Integridad de clave

  1. El atributo ALUMNO.dni no puede tomar valor nulo.
  2. El atributo PROVINCIA.cod_prov no puede tomar valor nulo.
  3. El atributo PROVINCIA.nombre no puede tomar valor nulo.
  4. El atributo UNIVERSIDAD.cod_univ no puede tomar valor nulo.
  5. El atributo FACULTAD.cod_univ no puede tomar valor nulo.
  6. El atributo FACULTAD.cod_fac no puede tomar valor nulo.
  7. El atributo ALUMNO_FACULTAD.dni no puede tomar valor nulo.
  8. El atributo ALUMNO_FACULTAD.cod_univ no puede tomar valor nulo.
  9. El atributo ALUMNO_FACULTAD.cod_fac no puede tomar valor nulo.

2. Integridad referencial

  1. El atributo ALUMNO.cod_prov siempre debe tener un valor que se encuentre en PROVINCIA.cod_prov, o bien ser nulo (p.e. si se desconoce la provincia donde vive un alumno).

  2. El atributo FACULTAD.cod_univ siempre debe tener un valor que se encuentre en UNIVERSIDAD.cod_univ. No puede ser nulo por la restricción de integridad de clave número 5.

  3. El atributo ALUMNO_FACULTAD.dni siempre debe tener un valor que se encuentre en ALUMNO.dni. No puede ser nulo por la restricción de integridad de clave número 7.

  4. La agregación de los atributos ALUMNO_FACULTAD.cod_univ y ALUMNO_FACULTAD.cod_fac siempre debe tener un valor que se encuentre en la agregación de los atributos FACULTAD.cod_univ y FACULTAD.cod_fac. No vale cada atributo por separado.

3. Otras restricciones

  1. El atributo ALUMNO.dni solo puede tomar valores numéricos enteros de 8 cifras.
  2. El atributo ALUMNO.edad solo puede tomar valores numéricos enteros de 2 cifras, mayores que 15.
  3. El atributo PROVINCIA.nombre no puede tomar valores repetidos.
  4. El atributo UNIVERSIDAD.tipo solo puede tomar uno de dos valores posibles: 1 (pública) o 2 (privada).
  5. El atributo FACULTAD.num_cursos solo puede tomar un valor numérico entero en el intervalo [4,6].
  6. El atributo ALUMNO_FACULTAD.curso_inicio solo puede tomar valores numéricos no menores que 1998.

Problemas con las restricciones durante las operaciones

1. Inserción

Inserción de una nueva tupla en una tabla.

  1. Solo se puede insertar una tupla si todos los atributos de la clave primaria tienen valor no nulo. Ejemplo: No se puede insertar un alumno con dni nulo.

  2. Solo se puede insertar una tupla si la agregación de todos los atributos que forman la clave primaria toma un valor único e inédito hasta el momento en la tabla. Ejemplo: No se puede insertar una nueva provincia si ya existe su cod_prov en la tabla.

  3. Solo se puede insertar una tupla si todos los atributos que son claves ajenas de otras tablas toman valores ya presentes en dichas tablas o bien nulos. Ejemplo: No se puede insertar una nueva facultad si no existe previamente la universidad a la que pertenece. Opción alternativa: Antes de dar por válida la inserción de la nueva facultad, se obliga al usuario a introducir los datos correctos de la nueva universidad.

  4. Solo se puede insertar una tupla si los valores de los atributos satisfacen todas las restricciones adicionales que pudieran concernirles. Ejemplo: No se puede insertar una nueva universidad cuyo atributo tipo tome el valor 7.

2. Modificación

Modificación del valor de algún atributo de una o varias tuplas de una tabla.

  1. Si el atributo a modificar es primo, su valor no puede modificarse a nulo. Ejemplo: No puede cambiarse el valor del atributo cod_univ a nulo.

  2. Si el atributo a modificar es primo, su valor no puede modificarse a otro tal que la agregación de todos los atributos que forman la clave primaria no tome un valor único e inédito en la tabla. Ejemplo: No puede modificarse el dni de un alumno a un nuevo valor que ya existiera en la tabla.

  3. Solo se puede modificar el valor de un atributo si el nuevo valor satisface todas las restricciones adicionales que pudieran afectarle. Ejemplo: No puede modificarse la edad de un alumno si la nueva edad es menor o igual que 15.

  4. Si el atributo a modificar es parte de una clave ajena en otra tabla, entonces hay que modificar automáticamente el viejo valor que tomaba en dicha tabla por el nuevo valor. Ejemplo: Si se modifica el valor previo V1 del atributo cod_prov de la tabla PROVINCIA a un nuevo valor V2, entonces el atributo cod_prov de todas las tuplas de la tabla ALUMNO cuyo valor fuera V1 ha de modificarse al nuevo valor V2.

3. Borrado

Borrado de una o varias tuplas de una tabla. Al borrar una tupla hay que tener en cuenta que se deben verificar las restricciones de integridad referencial.

Ejemplo: Supongamos que se borra una tupla de la tabla PROVINCIA cuyo valor de cod_prov es V. Si en la tabla ALUMNO no hay ninguna tupla cuyo valor del atributo cod_prov sea V, entonces no hay problema. Pero si no es así habría (al menos temporalmente) un problema de consistencia de la información almacenada en la base de datos, ya que existirán alumnos residentes en una provincia que no existe. Dos posibles soluciones para mantener la consistencia:

  1. Borrar todas las tuplas de ALUMNO afectadas. A su vez esto puede suponer una serie de borrados sucesivos en otras tablas, debido igualmente a problemas de integridad y consistencia, como en ALUMNO_FACULTAD.

  2. No permitir el borrado de la tupla de PROVINCIA si en ALUMNO hay tuplas que se verían afectadas. El procedimiento a seguir es primero borrar en la tabla ALUMNO todas aquellas tuplas cuyo atributo cod_prov tome valor V, y luego realizar la misma operación de borrado en la tabla PROVINCIA.

Otros ejemplos: borrado en la tabla ALUMNO (afecta a la tabla ALUMNO_FACULTAD), en la tabla UNIVERSIDAD (afecta a la tabla FACULTAD) y en la tabla FACULTAD (afecta a la tabla ALUMNO_FACULTAD).


SGBD relacionales

La implementación en un SGBD del modelo relacional no es sencilla dada la potencia teórica del modelo. Requiere un relativamente elevado espacio en disco y memoria de ordenador para su funcionamiento. Las características que debe tener un SGBD relacional son las siguientes:
  1. Poder manejar la base de datos como un todo. Es decir, la capacidad de realizar operaciones sobre varias tuplas a la vez, sin necesidad de procesar individualmente cada tupla por separado de manera expresa.

  2. A nivel lógico, todos los datos se representan mediante valores contenidos en tablas.

  3. Un dato debe ser accesible especificando un valor de clave primaria, un nombre de tabla y un nombre de atributo.

  4. Puede haber valores nulos.

  5. La descripción del diseño de la base de datos (catalog) se considera también a nivel lógico como valores tabulares y debe ser manipulable de la misma manera que la propia información de la base de datos.

  6. Los datos deben ser físicamente independientes de los programas de aplicación que trabajen sobre la base de datos.

  7. En lo posible, las aplicaciones deben ser independientes de los cambios realizados en las tablas.

  8. La definición de reglas y restricciones de integridad debe ser inherente al sistema y debe poder realizarse mediante el DDL. No se debe dejar a las aplicaciones el mantenimiento de la integridad.

  9. Se debe lograr, en o posible, independencia respecto a la distribución física de los datos.

  10. Un SGBD relacional puede tener asociado un DML con procedimientos que permita tratamientos tupla a tupla por separado (registro a registro), pero debe impedirse que mediante un tratamiento de este tipo puedan soslayarse o ignorarse las restricciones de integridad.

Bases de Datos - 2o Estadística