[anterior] [home] [siguiente]

2.3.1. Base de datos relacional

Un schema de Base de Datos (BD) relacional es un conjunto de schemas de relación S = (R1, R2, ..., Rm) y un conjunto RI de restricciones de integridad.

Una instancia de BD relacional db de S es un conjunto de instancias de relación db = {r1, ..., rn} tal que cada ri es una instancia de Ri y tal que las relaciones ri satisfacen las restricciones de integridad especificadas en RI.

Ejemplo:

EMPLEADO
NPILAAPPATAPMATRUTFNAC DIRECCIONSEXOSUELDORUTSUPERVNDEPTO

DEPARTAMENTO
DNOMBREDNUMERORUTGERENTEGERFECHAINIC

UBICACIONES_DEPTO
DNUMERODUBICACION

PROYECTO
PNOMBREPNUMEROPUBICACIONDNUM

TRABAJA_EN
ERUTPNOHORAS

CARGA
ERUTNOMBRE_CARGASEXOFNAC PARENTESCO


Los siguientes datos corresponden a una instancia de la base de datos.

EMPLEADONPILAAPPATAPMATRUT FNACDIRECCIONSEXOSUELDORUTSUPERV NDEPTO
JuanPérezGarcía12345678 9-1-55Toesca 965M12033344555 5
AliciaZelayaRoa99988777 19-7-58Blanco 2120F10598765432 4
JuanaBesaMartínez98765432 20-6-31Mapocho 2540F24088866555 4
FranciscoCeaDaza33344555 8-12-45Condell 221M31088866555 5
JaimeRamosSalas88866555 10-11-30Vitacura 1015M360nulo 1

DEPARTAMENTODNOMBREDNUMERORUTGERENTE GERFECHAINIC
Of. Central18886655519-6-71
Administración4987654321-1-85
Investigación53334455522-5-78

UBICACIONES_DEPTODNUMERODUBICACION
1Providencia
4Ñuñoa
5La Florida
5Pirque

PROYECTOPNOMBREPNUMEROPUBICACIONDNUM
Producto X1La Florida5
Producto Y2Pirque5
Computarización10Ñuñoa4
Reorganización20Providencia1

TRABAJA_ENERUTPNOHORAS
12345678132.5
1234567827.5
33344555210.0
999887771010.0
987654321010.0
987654322015.0
8886655520nulo

CARGAERUTNOMBRE_CARGASEXOFNAC PARENTESCO
33344555AliciaF5-4-86Hija
33344555TeodoroM25-10-83Hijo
33344555XimenaF3-5-54Cónyuge
98765432RodolfoM28-2-32Cónyuge
12345678AliciaF5-5-57cónyuge


Observemos que DNUMERO es el mismo para DEPARTAMENTO y PROYECTO. Pero el mismo concepto se llama DNO en EMPLEADO y DNUM en PROYECTO. No hay problema.

La restricción de integridad de entidad establece que ningún valor de llave primaria puede ser nulo. Esto es porque ellas identifican tuplas de la relación.

La restricción de integridad referencial se especifica entre dos relaciones y se usa para mantener la consistencia entre tuplas de las dos relaciones. Informalmente, una tupla en una relación que hace referencia a otra relación debe referirse a una tupla existente en esa relación. Por ejemplo, NDEPTO de EMPLEADO debe coincidir con el DNUMERO de alguna tupla de la relación DEPARTAMENTO. Para una definición formal, necesitamos el concepto de llave foránea.

Def. Un conjunto de atributos LF en el schema de relación R1 es una llave foránea de R1 si satisface las siguientes reglas:

Ejemplo: NDEPTO en una tupla t1 de EMPLEADO debe coincidir con el valor de una llave primaria DNUMERO en alguna tupla t2 de la relación DEPARTAMENTO, o el valor de DNO puede ser nulo si el empleado no pertenece a un departamento.

Las restricciones anteriores no consideran las restricciones semánticas que quizás puedan especificarse y sostenerse en una BD relacional. Por ejemplo, "el sueldo de un empleado no puede exceder el de su supervisor", "el número máximo de horas que puede trabajar un empleado en todos los proyectos es 56".

Operaciones de actualización

La operación Insert provee una lista de valores de atributos para una nueva tupla t que se va a insertar en una relación R. Ejemplo:

Insert <"Cecilia", "Rodríguez", "Kolonsky", "67767898", "5-4-50", "Ejército 565", "F", 100, nulo, "4"> en EMPLEADO. Esta inserción satisface todas las restricciones, así que es aceptable.

Insert <"Alicia", "Zelaya", "Roa", "99988777", "15-3-50", "Gay 1315", "F", 120, "98765432", "4"> en EMPLEADO. Viola la restricción de clave porque otra tupla con el mismo Rut ya existe en la relación. Inaceptable.

Insert <"Cecilia", "Rodríguez", "Kolonsky", nulo, "5-4-50", "Ejército 565", "F", 100, nulo, 4> en EMPLEADO. Viola la restricción de integridad (nulo para clave primaria Rut). Inaceptable.

Insert <"Cecilia", "Rodríguez", "Kolonsky", "67767898", "5-4-50", "Ejército 565", "F", 100, "98765432", 7> en EMPLEADO. Viola la restricción de integridad referencial porque no existe una tupla en DEPARTAMENTO con DNUMERO = 7.

El SABD puede hacer dos opciones cuando hay violación de restricciones. Una es rechazar la inserción. La otra es intentar corregir la razón de rechazo de la inserción.

Operaciones de borrado

La operación Delete borra tuplas de una relación. Es posible que se viole la integridad referencial cuando una tupla que se quiere borrar es referenciada por las llaves foráneas de otras tuplas de la BD. Las tuplas a borrar se especifican a través de condiciones sobre los atributos de la relación. Ejemplos:

Delete tupla con ERUT = "99988777" AND PNO = 10 en la relación TRABAJA_EN. Esta operación es aceptable.

Delete tupla con RUT = "99988777" en la relación EMPLEADO. Inaceptable porque dos tuplas en TRABAJA_EN se refieren a esta tupla. Si se borra, hay violaciones a la integridad referencial.

Hay tres opciones con respecto a una operación de borrado que causa una violación. La primera es rechazar la operación. La segunda es intentar propagar el borrado. Una tercera opción es modificar los valores de los atributos referenciantes que causan la violación (cada uno de estos valores puede ser puesto en nulo o cambiado para referenciar otra tupla válida). Hay que observar que si un atributo referenciante que causa una violación, es parte de la llave primaria, no puede ser nulo, pues se violaría la integridad de entidad.

Operaciones de modificación

La operación Modify se usa para cambiar valores a uno o más atributos en una tupla (o tuplas) de una relación R. Es necesario especificar una condición sobre los atributos de R para seleccionar la o las tuplas a modificar. Ejemplos:

Modify SUELDO de la tupla de EMPLEADO con RUT = "99988777" a 135. Aceptable.

Modify NDEPTO de la tupla de EMPLEADO con RUT = "99988777" a 1. Aceptable.

Modify NDEPTO de la tupla de EMPLEADO con RUT = "99988777" a 7. Inaceptable pues viola la integridad referencial.

Modify RUT de la tupla de EMPLEADO con RUT = "99988777" a "98765432". Inaceptable pues viola restricciones de clave primaria e integridad referencial.

El modificar un atributo que no es llave primaria ni llave foránea no tiene problemas. El modificar una llave primaria es similar a borrar una tupla e insertar otra en su lugar. Por tanto, es relevante la discusión anterior (Insert y Delete). Si se modifica un atributo de una llave foránea, el Sistema Administrador de Base de Datos (SABD) debe asegurarse que el nuevo valor se refiere a una tupla existente en la relación referenciada.

Ejercicios:

Discuta todas las restricciones de integridad que viola cada una de las siguientes operaciones (si es que las hay), y las maneras más apropiadas de resolver estas violaciones.

Insert <"Producto A", 4, "La Florida", 2> en PROYECTO.

Insert <"Producción", 4, "94377554", "1-oct-98"> en DEPARTAMENTO.

Delete tupla con PNOMBRE = "Producto X" en la relación PROYECTO.

Modify RUTGERENTE y GERFECHAINIC de la tupla DEPARTAMENTO con DNUMERO = 5 a "12345678" y "01-10-93", respectivamente.

Modify HORAS de la tupla de TRABAJA_EN con RUT = "99988777" y PNO = 10 a "50".


[anterior] [home] [siguiente]