You are on page 1of 14

Departamento de Informtica Ctedra de Base de Datos I

Facultad Politcnica Seccin NA


Universidad Nacional de Asuncin Docente: os !o"as Dvalos
Unidad #: Dise$o de %ases de datos relacionales
#&#& Inte'ridad de %ases de datos
Documentos de consulta
Fuente: http://es.wikipedia.org/wiki/Integridad_de_datos
Inte'ridad de datos
El trmino inte'ridad de datos se refiere a la correccin y completitud de los datos en una base de
datos. Cuando los contenidos se modifican con sentencias INSERT DELETE o UPDATE la
integridad de los datos almacenados puede perderse de muchas maneras diferentes. !ueden a"adirse
datos no #$lidos a la base de datos tales como un pedido %ue especifica un producto no e&istente.
!ueden modificarse datos e&istentes tomando un #alor incorrecto como por e'emplo si se reasigna
un #endedor a una oficina no e&istente. (os cambios en la base de datos pueden perderse debido a
un error del sistema o a un fallo en el suministro de energ)a. (os cambios pueden ser aplicados
parcialmente como por e'emplo si se a"ade un pedido de un producto sin a'ustar la cantidad
disponible para #ender.
*na de las funciones importantes de un +,-. relacional es preser#ar la integridad de sus datos
almacenados en la mayor medida posible.
(ipos de restricciones de inte'ridad /editar0
Datos !e)ueridos: establece %ue una columna tenga un #alor no 1*((. .e define
efectuando la declaracin de una columna es 123 1*(( cuando la tabla %ue contiene las
columnas se crea por primera #e4 como parte de la sentencia C5E63E 36,(E.
C*e)ueo de +alide,: cuando se crea una tabla cada columna tiene un tipo de datos y el
+,-. asegura %ue solamente los datos del tipo especificado sean ingresados en la tabla.
Inte'ridad de entidad: establece %ue la cla#e primaria de una tabla debe tener un #alor
7nico para cada fila de la tabla8 si no la base de datos perder$ su integridad. .e especifica en
la sentencia C5E63E 36,(E. El +,-. comprueba autom$ticamente la unicidad del #alor
de la cla#e primaria con cada sentencia I1.E53 9 *!+63E. *n intento de insertar o
actuali4ar una fila con un #alor de la cla#e primaria ya e&istente fallar$.
Inte'ridad referencial: asegura la integridad entre las cla#es a'enas y primarias :relaciones
padre/hi'o;. E&isten cuatro actuali4aciones de la base de datos %ue pueden corromper la
integridad referencial:
(a insercin de una fila hi'o se produce cuando no coincide la cla#e a'ena con la
cla#e primaria del padre.
(a actuali4acin en la cla#e a'ena de la fila hi'o donde se produce una actuali4acin
en la cla#e a'ena de la fila hi'o con una sentencia *!+63E y la misma no coincide
con ninguna cla#e primaria.
(a supresin de una fila padre con la %ue si una fila padre <%ue tiene uno o m$s
hi'os< se suprime las filas hi'os %uedar$n hurfanas.
=/=> ?@/A@/=A A>:=@:=B /media/C52C6.+/fpuna/?A=?<
?/bd=na/unidadD/documentosdeconsulta/dAD<AD.odt
Departamento de Informtica Ctedra de Base de Datos I
Facultad Politcnica Seccin NA
Universidad Nacional de Asuncin Docente: os !o"as Dvalos
Unidad #: Dise$o de %ases de datos relacionales
#&#& Inte'ridad de %ases de datos
Documentos de consulta
Fuente: http://www.aulaclic.es/s%l/b_E_=_=.htm

Conceptos %sicos de inte'ridad referencial&
Introduccin

(a inte'ridad referencial es un sistema de re'las %ue utili4an la mayor)a de las bases de datos
relacionales para ase'urarse )ue los re'istros de ta%las relacionadas son vlidos y %ue no se
borren o cambien datos relacionados de forma accidental produciendo errores de integridad.
!rimero repasemos un poco los tipos de relaciones.

3ipos de relaciones.

Entre dos tablas de cual%uier base de datos relacional pueden haber dos tipos de relaciones
relaciones uno a uno y relaciones uno a muchos:
!elacin Uno a Uno: Cuando un re'istro de una ta%la slo puede estar relacionado con un
-nico re'istro de la otra ta%la . viceversa.
!or e'emplo: tenemos dos tablas una de profesores y otra de departamentos y %ueremos saber %u
profesor es 'efe de %u departamento tenemos una relacin uno a uno entre las dos tablas ya %ue un
departamento tiene un solo 'efe y un profesor puede ser 'efe de un solo departamento.
!elacin Uno a +arios: Cuando un re'istro de una ta%la :tabla secundaria; slo puede estar
relacionado con un -nico re'istro de la otra ta%la :tabla principal; . un re'istro de la ta%la
principal puede tener ms de un re'istro relacionado en la ta%la secundaria/ en este caso se
suele hacer referencia a la tabla principal como tabla FpadreF y a la tabla secundaria como tabla
Fhi'oF entonces la regla se con#ierte en Fun padre puede tener #arios hi'os pero un hi'o solo tiene un
padre :regla m$s f$cil de recordar;.
!or e'emplo: tenemos dos tablas una con los datos de diferentes poblaciones y otra con los
habitantes una poblacin puede tener m$s de un habitante pero un habitante pertenecer$ :estar$
empadronado; en una 7nica poblacin. En este caso la tabla principal ser$ la de poblaciones y la
tabla secundaria ser$ la de habitantes. *na poblacin puede tener #arios habitantes pero un
habitante pertenece a una sola poblacin. Esta relacin se representa incluyendo en la tabla Fhi'oF
?/=> ?@/A@/=A A>:=@:=B /media/C52C6.+/fpuna/?A=?<
?/bd=na/unidadD/documentosdeconsulta/dAD<AD.odt
Departamento de Informtica Ctedra de Base de Datos I
Facultad Politcnica Seccin NA
Universidad Nacional de Asuncin Docente: os !o"as Dvalos
Unidad #: Dise$o de %ases de datos relacionales
#&#& Inte'ridad de %ases de datos
Documentos de consulta
una columna %ue se corresponde con la cla#e principal de la tabla FpadreF esta columna es lo
denominamos cla#e for$nea :o cla#e a'ena o cla#e e&terna;.
*na cla#e for$nea es pues un campo de una tabla %ue contiene una referencia a un registro de otra
tabla. .iguiendo nuestro e'emplo en la tabla habitantes tenemos una columna poblacin %ue
contiene el cdigo de la poblacin en la %ue est$ empadronado el habitante esta columna es cla#e
a'ena de la tabla habitantes y en la tabla poblaciones tenemos una columna codigo de poblacion
cla#e principal de la tabla.
!elacin +arios a +arios: Cuando un re'istro de una ta%la puede estar relacionado con ms
de un re'istro de la otra ta%la . viceversa. En este caso las dos tablas no pueden estar
relacionadas directamente se tiene %ue a"adir una tabla entre las dos %ue incluya los pares de
#alores relacionados entre s).
!or e'emplo: tenemos dos tablas una con los datos de clientes y otra con los artculos %ue se
#enden en la empresa un cliente podr$ reali4ar un pedido con #arios art)culos y un art)culo podr$
ser #endido a m$s de un cliente.
1o se puede definir entre clientes y artculos hace falta otra tabla :por e'emplo una tabla de
pedidos; relacionada con clientes y con art)culos. (a tabla pedidos estar$ relacionada con cliente
por una relacin uno a muchos y tambin estar$ relacionada con art)culos por un relacin uno a
muchos.
D/=> ?@/A@/=A A>:=@:=B /media/C52C6.+/fpuna/?A=?<
?/bd=na/unidadD/documentosdeconsulta/dAD<AD.odt
Departamento de Informtica Ctedra de Base de Datos I
Facultad Politcnica Seccin NA
Universidad Nacional de Asuncin Docente: os !o"as Dvalos
Unidad #: Dise$o de %ases de datos relacionales
#&#& Inte'ridad de %ases de datos
Documentos de consulta
Integridad referencial

Cuando se define una columna como cla#e for$nea las filas de la tabla pueden contener en esa
columna o bien el #alor nulo :ning7n #alor; o bien un #alor %ue e&iste en la otra tabla un error
ser)a asignar a un habitante una poblacin %ue no est$ en la tabla de poblaciones. Eso es lo %ue se
denomina inte'ridad referencial y consiste en %ue los datos )ue referencian otros 0claves
forneas1 de%en ser correctos. (a inte'ridad referencial hace %ue el sistema gestor de la base de
datos se asegure de %ue no hayan en las cla#es for$neas #alores %ue no estn en la tabla principal.
2a inte'ridad referencial se activa en cuanto creamos una clave fornea y a partir de ese
momento se comprueba cada #e4 %ue se modifi%uen datos %ue puedan alterarla.
3 Cundo se pueden producir errores en los datos4
Cuando insertamos una nueva fila en la ta%la secundaria . el valor de la clave fornea no
e5iste en la ta%la principal. insertamos un nue#o habitante y en la columna poblacion escribimos
un cdigo de poblacion %ue no est$ en la tabla de poblaciones :una poblacin %ue no e&iste;.
Cuando modificamos el valor de la clave principal de un re'istro )ue tiene 6*i"os6
modificamos el codigo de Galencia sustituimos el #alor %ue ten)a :=; por un nue#o #alor :=A; si
Galencia ten)a habitantes asignados %u pasa con esos habitantes no pueden seguir teniendo el
codigo de poblacin = por%ue la poblacin = ya no e&iste en este caso hay dos alternati#as no
de'ar cambiar el codigo de Galencia o bien cambiar el codigo de poblacin de todos los habitantes
de Galencia y asignarles el cdigo =A.
Cuando modificamos el valor de la clave fornea/ el nuevo valor de%e e5istir en la ta%la
principal. !or e'emplo cambiamos la poblacin de un habitante ten)a asignada la poblacin =
:por%ue estaba empadronado en #alencia; y ahora se le asigna la poblacin ? por%ue cambia de
lugar de residencia. (a poblacin ? debe e&istir en la tabla de poblaciones.
Cuando )ueremos %orrar una fila de la ta%la principal . ese re'istro tiene 6*i"os6 por
e'emplo %ueremos borrar la poblacin = :Galencia; si e&isten habitantes asignados a la poblacin =
estos no se pueden %uedar con el #alor = en la columna poblacin por%ue tendr)an asignada una
poblacin %ue no e&iste. En este caso tenemos dos alternati#as no de'ar borrar la poblacin = de la
>/=> ?@/A@/=A A>:=@:=B /media/C52C6.+/fpuna/?A=?<
?/bd=na/unidadD/documentosdeconsulta/dAD<AD.odt
Departamento de Informtica Ctedra de Base de Datos I
Facultad Politcnica Seccin NA
Universidad Nacional de Asuncin Docente: os !o"as Dvalos
Unidad #: Dise$o de %ases de datos relacionales
#&#& Inte'ridad de %ases de datos
Documentos de consulta
tabla de poblaciones o bien borrarla y poner a #alor nulo el campo poblacion de todos sus Fhi'osF.
6sociada a la integridad referencial est$n los conceptos de actuali4ar los registros en cascada y
eliminar registros en cascada.

6ctuali4acin y borrado en cascada

El actuali4ar y/o eliminar registros en cascada son opciones %ue se definen cuando definimos la
cla#e for$nea y %ue le indican al sistema gestor %u hacer en los casos comentados en el punto
anterior.
Actuali,ar re'istros en cascada:
Esta opcin le indica al sistema gestor de la base de datos %ue cuando se cam%ie un valor del
campo clave de la ta%la principal autom$ticamente cam%iar el valor de la clave fornea de
los re'istros relacionados en la ta%la secundaria.
!or e'emplo si cambiamos en la tabla de poblaciones :la tabla principal; el #alor = por el #alor =A
en el campo codigo :la cla#e principal; autom$ticamente se actuali4an todos los habitantes :en la
tabla secundaria; %ue tienen el #alor = en el campo poblacion :en la cla#e a'ena; de'ando =A en #e4
de =.
.i no se tiene definida esta opcin no se puede cambiar los #alores de la cla#e principal de la tabla
principal. En este caso si intentamos cambiar el #alor = del codigo de la tabla de poblaciones no
se produce el cambio y el sistema nos de#uel#e un error o un mensa'e %ue los registros no se han
podido modificar por infracciones de cla#e.
7liminar re'istros en cascada:
Esta opcin le indica al sistema gestor de la base de datos %ue cuando se elimina un re'istro de la
ta%la principal autom$ticamente se %orran tam%in los re'istros relacionados en la ta%la
secundaria.
!or e'emplo: .i borramos la poblacin 2nteniente en la tabla de poblaciones autom$ticamente
todos los habitantes de 2nteniente se borrar$n de la tabla de habitantes.
.i no se tiene definida esta opcin no se pueden borrar registros de la tabla principal si estos tienen
registros relacionados en la tabla secundaria. En este caso si intentamos borrar la poblacin
2nteniente no se produce el borrado y el sistema nos de#uel#e un error o un mensa'e %ue los
@/=> ?@/A@/=A A>:=@:=B /media/C52C6.+/fpuna/?A=?<
?/bd=na/unidadD/documentosdeconsulta/dAD<AD.odt
Departamento de Informtica Ctedra de Base de Datos I
Facultad Politcnica Seccin NA
Universidad Nacional de Asuncin Docente: os !o"as Dvalos
Unidad #: Dise$o de %ases de datos relacionales
#&#& Inte'ridad de %ases de datos
Documentos de consulta
registros no se han podido eliminar por infracciones de cla#e.
Fuente: http://msdn.microsoft.com/es<es
Inte'ridad de los datos
(a e&igencia de integridad de los datos garanti4a la calidad de los datos de la base de datos. !or
e'emplo si se especifica para un empleado el #alor de identificador de 89# la base de datos no debe
permitir %ue ning7n otro empleado tenga el mismo #alor de identificador. .i tiene una columna
emplo.ee:ratin' para la %ue se pre#ean #alores entre 8 y ; la base de datos no debe aceptar
#alores fuera de ese inter#alo. .i en la tabla hay una columna dept:id en la %ue se almacena el
n7mero de departamento del empleado la base de datos slo debe permitir #alores %ue
correspondan a los n7meros de departamento de la empresa.
+os pasos importantes en el dise"o de las tablas son la identificacin de #alores #$lidos para una
columna y la determinacin de cmo for4ar la integridad de los datos en la columna. (a integridad
de datos pertenece a una de las siguientes categor)as:
Integridad de entidad
Integridad de dominio
Integridad referencial
Integridad definida por el usuario
Inte'ridad de entidad
(a integridad de entidad define una fila como entidad 7nica para una tabla determinada. (a
H/=> ?@/A@/=A A>:=@:=B /media/C52C6.+/fpuna/?A=?<
?/bd=na/unidadD/documentosdeconsulta/dAD<AD.odt
Departamento de Informtica Ctedra de Base de Datos I
Facultad Politcnica Seccin NA
Universidad Nacional de Asuncin Docente: os !o"as Dvalos
Unidad #: Dise$o de %ases de datos relacionales
#&#& Inte'ridad de %ases de datos
Documentos de consulta
integridad de entidad e&ige la integridad de las columnas de los identificadores o la cla#e principal
de una tabla mediante )ndices y restricciones *1II*E o restricciones !5I-659 JE9.
Inte'ridad de dominio
(a integridad de dominio #iene dada por la #alide4 de las entradas para una columna determinada.
!uede e&igir la integridad de dominio para restringir el tipo mediante tipos de datos el formato
mediante reglas y restricciones CKECJ o el inter#alo de #alores posibles mediante restricciones
L25EIM1 JE9 restricciones CKECJ definiciones +EL6*(3 definiciones 123 1*(( y reglas.
Inte'ridad referencial
(a integridad referencial protege las relaciones definidas entre las tablas cuando se crean o se
eliminan filas. En .I( .er#er la integridad referencial se basa en las relaciones entre cla#es
e&ternas y cla#es principales o entre cla#es e&ternas y cla#es e&clusi#as mediante restricciones
L25EIM1 JE9 y CKECJ.(a integridad referencial garanti4a %ue los #alores de cla#e sean
coherentes en las distintas tablas. !ara conseguir esa coherencia es preciso %ue no haya referencias
a #alores ine&istentes y %ue si cambia el #alor de una cla#e todas las referencias a ella se cambien
en consecuencia en toda la base de datos.
Cuando se e&ige la integridad referencial .I( .er#er impide a los usuarios:
6gregar o cambiar filas en una tabla relacionada si no hay ninguna fila asociada en la tabla
principal.
Cambiar #alores en una tabla principal %ue crea filas hurfanas en una tabla relacionada.
Eliminar filas de una tabla principal cuando hay filas relacionadas coincidentes.
!or e'emplo en las tablas Sales&Sales<rderDetail y Production&Product de la base de datos
Adventure=or>s la integridad referencial se basa en la relacin entre la cla#e e&terna
:ProductID; de la tabla Sales&Sales<rderDetail y la cla#e principal :ProductID; de la tabla
Production&Product. Esta relacin garanti4a %ue un pedido de #entas no pueda nunca hacer
referencia a un producto %ue no e&iste en la tabla Production&Product.
N/=> ?@/A@/=A A>:=@:=B /media/C52C6.+/fpuna/?A=?<
?/bd=na/unidadD/documentosdeconsulta/dAD<AD.odt
Departamento de Informtica Ctedra de Base de Datos I
Facultad Politcnica Seccin NA
Universidad Nacional de Asuncin Docente: os !o"as Dvalos
Unidad #: Dise$o de %ases de datos relacionales
#&#& Inte'ridad de %ases de datos
Documentos de consulta
Inte'ridad definida por el usuario
(a integridad definida por el usuario permite definir reglas de empresa espec)ficas %ue no
pertenecen a ninguna otra categor)a de integridad. 3odas las categor)as de integridad admiten la
integridad definida por el usuario. Esto incluye todas las restricciones de ni#el de columna y ni#el
de tabla en C5E63E 36,(E procedimientos almacenados y desencadenadores.
75i'ir la inte'ridad de datos
!lanear y crear tablas re%uiere identificar los #alores #$lidos para las columnas y decidir cmo
e&igir la integridad de los datos en las columnas. .I( .er#er proporciona los siguientes
mecanismos para e&igir la integridad de los datos en una columna:
5estricciones !5I-659 JE9
*na tabla suele tener una columna o una combinacin de columnas cuyos #alores identifican de
forma 7nica cada fila de la tabla. Estas columnas se denominan cla#es principales de la tabla y
e&igen la integridad de entidad de la tabla. !uede crear una cla#e principal mediante la definicin de
una restriccin !5I-659 JE9 cuando cree o modifi%ue una tabla.
*na tabla slo puede tener una restriccin !5I-659 JE9 y ninguna columna a la %ue se apli%ue
una restriccin !5I-659 JE9 puede aceptar #alores 1*((. +ebido a %ue las restricciones
!5I-659 JE9 garanti4an datos 7nicos con frecuencia se definen en una columna de identidad.
Cuando especifica una restriccin !5I-659 JE9 en una tabla +atabase Engine :-otor de base
de datos; e&ige la unicidad de los datos mediante la creacin de un )ndice 7nico para las columnas
de cla#e principal.Este )ndice tambin permite un acceso r$pido a los datos cuando se utili4a la
cla#e principal en las consultas. +e esta forma las cla#es principales %ue se eligen deben seguir las
reglas para crear )ndices 7nicos.
.i se define una restriccin !5I-659 JE9 para m$s de una columna puede haber #alores
E/=> ?@/A@/=A A>:=@:=B /media/C52C6.+/fpuna/?A=?<
?/bd=na/unidadD/documentosdeconsulta/dAD<AD.odt
Departamento de Informtica Ctedra de Base de Datos I
Facultad Politcnica Seccin NA
Universidad Nacional de Asuncin Docente: os !o"as Dvalos
Unidad #: Dise$o de %ases de datos relacionales
#&#& Inte'ridad de %ases de datos
Documentos de consulta
duplicados dentro de la misma columna pero cada combinacin de #alores de todas las columnas
de la definicin de la restriccin !5I-659 JE9 debe ser 7nica.
Como se muestra en la siguiente ilustracin las columnas ProductID y +endorID de la tabla
Purc*asin'&Product+endor forman una restriccin !5I-659 JE9 compuesta para esta tabla.
6s) se garanti4a %ue la combinacin de ProductID y +endorID es 7nica.
Cuando traba'a con combinaciones las restricciones !5I-659 JE9 relacionan una tabla con otra.
!or e'emplo para determinar los pro#eedores %ue suministran determinados productos puede
utili4ar una combinacin de tres elementos entre las tablas Purc*asin'&+endor
Production&Product y Purc*asin'&Product+endor. !uesto %ue Product+endor contiene las
columnas de ProductID y +endorID se puede obtener acceso a las tablas Product y +endor
mediante su relacin con Product+endor.
5estricciones L25EIM1 JE9
*na cla#e e&terna :LJ; es una columna o combinacin de columnas %ue se utili4a para establecer y
e&igir un #)nculo entre los datos de dos tablas. !uede crear una cla#e e&terna mediante la definicin
de una restriccin L25EIM1 JE9 cuando cree o modifi%ue una tabla.
En una referencia de cla#e e&terna se crea un #)nculo entre dos tablas cuando las columnas de una
de ellas hacen referencia a las columnas de la otra %ue contienen el #alor de cla#e principal. Esta
columna se con#ierte en una cla#e e&terna para la segunda tabla.
!or e'emplo la tabla Sales&Sales<rder?eader de la base de datos Adventure=or>s9@@A!9 tiene
un #)nculo a la tabla Sales&SalesPerson por%ue e&iste una relacin lgica entre pedidos de #entas y
personal de #entas. (a columna SalesPersonID de la tabla Sales<rder?eader coincide con la
columna de cla#e principal de la tabla SalesPerson. (a columna SalesPersonID de la tabla
Sales<rder?eader es la cla#e e&terna para la tabla SalesPerson.
B/=> ?@/A@/=A A>:=@:=B /media/C52C6.+/fpuna/?A=?<
?/bd=na/unidadD/documentosdeconsulta/dAD<AD.odt
Departamento de Informtica Ctedra de Base de Datos I
Facultad Politcnica Seccin NA
Universidad Nacional de Asuncin Docente: os !o"as Dvalos
Unidad #: Dise$o de %ases de datos relacionales
#&#& Inte'ridad de %ases de datos
Documentos de consulta
1o es necesario %ue una restriccin L25EIM1 JE9 est #inculada 7nicamente a una restriccin
!5I-659 JE9 de otra tabla8 tambin puede definirse para %ue haga referencia a las columnas de
una restriccin *1II*E de otra tabla. *na restriccin L25EIM1 JE9 puede contener #alores
1*(( pero si alguna columna de una restriccin L25EIM1 JE9 compuesta contiene #alores
1*(( se omitir$ la comprobacin de los #alores %ue componen la restriccin L25EIM1 JE9.
!ara asegurarse de %ue todos los #alores de la restriccin L25EIM1 JE9 compuesta se
comprueben especifi%ue 123 1*(( en todas las columnas %ue participan.
Nota:
=A/=> ?@/A@/=A A>:=@:=B /media/C52C6.+/fpuna/?A=?<
?/bd=na/unidadD/documentosdeconsulta/dAD<AD.odt
Departamento de Informtica Ctedra de Base de Datos I
Facultad Politcnica Seccin NA
Universidad Nacional de Asuncin Docente: os !o"as Dvalos
Unidad #: Dise$o de %ases de datos relacionales
#&#& Inte'ridad de %ases de datos
Documentos de consulta
*na restriccin L25EIM1 JE9 puede hacer referencia a columnas de tablas de la misma base de
datos o a columnas de una misma tabla. .e denominan tablas con referencia a s mismas. .uponga
por e'emplo una tabla de empleados con tres columnas: emplo.ee:num%er emplo.ee:name y
mana'er:emplo.ee:num%er. +ado %ue el responsable tambin es un empleado hay una relacin
de cla#e e&terna desde la columna mana'er:emplo.ee:num%er a la columna emplo.ee:num%er.
Integridad referencial
6un%ue el fin principal de una restriccin L25EIM1 JE9 es controlar los datos %ue pueden
almacenarse en la tabla de la cla#e e&terna8 tambin controla los cambios reali4ados en los datos de
la tabla de la cla#e principal. !or e'emplo si se elimina la fila de un #endedor de la tabla
Sales&SalesPerson y el identificador del #endedor se utili4a para pedidos de #entas en la tabla
Sales&Sales<rder?eader se rompe la integridad relacional entre ambas tablas: los pedidos del
#endedor eliminado %uedar$n sin correspondencia en la tabla Sales<rder?eader sin ning7n
#)nculo con los datos de la tabla SalesPerson.
Con una restriccin L25EIM1 JE9 se e#ita esta situacin. Esta restriccin e&ige la integridad
referencial al garanti4ar %ue no se puedan reali4ar cambios en los datos de la tabla de la cla#e
principal si esos cambios anulan el #)nculo con los datos de la tabla de la cla#e e&terna. .i se intenta
eliminar la fila de una tabla de la cla#e principal o cambiar un #alor de cla#e principal la accin no
progresar$ si el #alor de la cla#e principal cambiado o eliminado corresponde a un #alor de la
restriccin L25EIM1 JE9 de otra tabla. !ara cambiar o eliminar una fila de una restriccin
L25EIM1 JE9 debe antes eliminar o cambiar los datos de cla#e e&terna de la tabla de cla#e
e&terna lo %ue #incula la cla#e e&terna con otros datos de cla#e principal.
Indi4ar restricciones L25EIM1 JE9
(a creacin de un )ndice en una cla#e e&terna suele ser 7til por las siguientes ra4ones:
(os cambios en las restricciones !5I-659 JE9 se comprueban con restricciones
L25EIM1 JE9 en las tablas relacionadas.
(as columnas de cla#e e&terna suelen utili4arse en los criterios de combinacin cuando los
datos de las tablas relacionadas se combinan en consultas mediante la correspondencia de la
columna o columnas de la restriccin L25EIM1 JE9 de una tabla y la columna o columnas
de la cla#e 7nica o principal de la otra. *n )ndice permite al +atabase Engine :-otor de base
de datos; buscar con rapide4 datos relacionados en la tabla de cla#e e&terna.1o obstante no
es necesario crear este )ndice. !ueden combinarse los datos de dos tablas relacionadas
aun%ue no se hayan definido restricciones !5I-659 JE9 o L25EIM1 JE9 entre ellas
pero una relacin de cla#e e&terna entre dos tablas indica %ue stas se han optimi4ado para
su combinacin en una consulta %ue utilice las cla#es como criterio. !ara obtener m$s
informacin acerca de cmo usar restricciones L25EIM1 JE9 con combinaciones #ea
6spectos b$sicos de las combinaciones y 3ipos de consultas e )ndices.
==/=> ?@/A@/=A A>:=@:=B /media/C52C6.+/fpuna/?A=?<
?/bd=na/unidadD/documentosdeconsulta/dAD<AD.odt
Departamento de Informtica Ctedra de Base de Datos I
Facultad Politcnica Seccin NA
Universidad Nacional de Asuncin Docente: os !o"as Dvalos
Unidad #: Dise$o de %ases de datos relacionales
#&#& Inte'ridad de %ases de datos
Documentos de consulta
17mero de restricciones L25EIM1 JE9 en una tabla
.I( .er#er no establece un l)mite predefinido en el n7mero de restricciones L25EIM1 JE9 %ue
una tabla puede incluir :%ue hagan referencia a otras tablas; ni el n7mero de restricciones
L25EIM1 JE9 pertenecientes a otras tablas %ue hagan referencia a determinada tabla. 1o
obstante el n7mero real de restricciones L25EIM1 JE9 se #e limitado por la configuracin de
hardware y el dise"o de la base de datos y la aplicacin. .e recomienda %ue una tabla no contenga
m$s de ?@D restricciones L25EIM1 JE9 y %ue no sea referencia para m$s de ?@D restricciones
L25EIM1 JE9. 3enga en cuenta el costo de e&igir restricciones L25EIM1 JE9 cuando dise"e la
base de datos y las aplicaciones.
5estricciones *1II*E
!uede utili4ar restricciones *1II*E para garanti4ar %ue no se escriben #alores duplicados en
columnas espec)ficas %ue no forman parte de una cla#e principal. 3anto la restriccin *1II*E
como la restriccin !5I-659 JE9 e&igen la unicidad8 sin embargo debe utili4ar la restriccin
*1II*E y no !5I-659 JE9 si desea e&igir la unicidad de una columna o una combinacin de
columnas %ue no forman la cla#e principal.
En una tabla se pueden definir #arias restricciones *1II*E pero slo una restriccin !5I-659
JE9.
6dem$s a diferencia de las restricciones !5I-659 JE9 las restricciones *1II*E admiten
#alores 1*((. .in embargo de la misma forma %ue cual%uier #alor incluido en una restriccin
*1II*E slo se admite un #alor 1*(( por columna.
Es posible hacer referencia a una restriccin *1II*E con una restriccin L25EIM1 JE9.
5estricciones CKECJ
(as restricciones CKECJ e&igen la integridad del dominio mediante la limitacin de los #alores
%ue puede aceptar una columna. .on similares a las restricciones L25EIM1 JE9 por%ue controlan
los #alores %ue se colocan en una columna. (a diferencia reside en la forma en %ue determinan %u
#alores son #$lidos: las restricciones L25EIM1 JE9 obtienen la lista de #alores #$lidos de otra
tabla mientras %ue las restricciones CKECJ determinan los #alores #$lidos a partir de una
e&presin lgica %ue no se basa en datos de otra columna. !or e'emplo es posible limitar el
inter#alo de #alores para una columna salar. creando una restriccin CKECJ %ue slo permita
datos entre =@.AAA y =AA.AAA dlares. +e este modo se impide %ue se escriban salarios superiores al
inter#alo de salario normal.
!uede crear una restriccin CKECJ con cual%uier e&presin lgica :booleana; %ue de#uel#a 35*E
:#erdadero; o L6(.E :falso; bas$ndose en operadores lgicos. !ara el e'emplo anterior la
e&presin lgica ser)a:
!uede aplicar #arias restricciones CKECJ a una sola columna. 3ambin puede aplicar una sola
restriccin CKECJ a #arias columnas si se crea en el ni#el de la tabla. !or e'emplo una restriccin
=?/=> ?@/A@/=A A>:=@:=B /media/C52C6.+/fpuna/?A=?<
?/bd=na/unidadD/documentosdeconsulta/dAD<AD.odt
Departamento de Informtica Ctedra de Base de Datos I
Facultad Politcnica Seccin NA
Universidad Nacional de Asuncin Docente: os !o"as Dvalos
Unidad #: Dise$o de %ases de datos relacionales
#&#& Inte'ridad de %ases de datos
Documentos de consulta
CKECJ para #arias columnas se puede utili4ar para confirmar %ue cual%uier fila con un #alor USA
en la columna countr.Bre'ion tiene tambin un #alor de dos caracteres en la columna state. 6s) se
pueden comprobar #arias condiciones en un mismo sitio.
(imitaciones de las restricciones CKECJ
(as restricciones CKECJ recha4an los #alores %ue se e#al7an como L6(.E. !uesto %ue los #alores
nulos se e#al7an como *1J12O1 su presencia en las e&presiones puede reempla4ar una
restriccin. !or e'emplo supongamos %ue coloca una restriccin en una columna intC.Column
%ue especifica %ue C.Column slo puede contener el #alor =A :C.ColumnD8@;. .i inserta el
#alor 1*(( en C.Column +atabase Engine :-otor de base de datos; inserta 1*(( y no
de#uel#e un error.
*na restriccin CKECJ de#uel#e 35*E cuando la condicin %ue est$ comprobando no es L6(.E
para ninguna fila de la tabla. .i una tabla recin creada no tiene filas cual%uier restriccin CKECJ
en esta tabla se considerar$ #$lida. Esta situacin puede generar resultados inesperados como en el
siguiente e'emplo.
CREATE TABLE CheckTbl (col1 int, col2 int);
GO
CREATE FUNCTION CheckFnctn()
RETURNS int
AS
BEGIN
ECLARE !"et#$l int
SELECT !"et#$l % COUNT(&) FRO' CheckTbl
RETURN !"et#$l
EN;
GO
ALTER TABLE CheckTbl
A CONSTRAINT chkRo(Co)nt C*EC+ (,bo-CheckFnctn() .% 1 );
GO
(a restriccin CHECK %ue se agrega especifica %ue como m)nimo debe e&istir una fila en la tabla
CheckTbl. .in embargo puesto %ue no hay filas en la tabla contra la %ue se comprueba la
condicin de esta restriccin la instruccin 6(3E5 36,(E ser$ correcta.
(as restricciones CKECJ no se #alidan durante las instrucciones +E(E3E. !or lo tanto la
e'ecucin de instrucciones +E(E3E en las tablas con ciertos tipos de restricciones CKECJ puede
generar resultados inesperados. !or e'emplo imaginemos %ue las siguientes instrucciones se
e'ecutan en la tabla CheckTbl.
INSERT INTO CheckTbl /ALUES (10, 10)
GO
ELETE CheckTbl 1*ERE col1 % 10;
=D/=> ?@/A@/=A A>:=@:=B /media/C52C6.+/fpuna/?A=?<
?/bd=na/unidadD/documentosdeconsulta/dAD<AD.odt
Departamento de Informtica Ctedra de Base de Datos I
Facultad Politcnica Seccin NA
Universidad Nacional de Asuncin Docente: os !o"as Dvalos
Unidad #: Dise$o de %ases de datos relacionales
#&#& Inte'ridad de %ases de datos
Documentos de consulta
(a instruccin DELETE ser$ correcta aun%ue la restriccin CHECK especifi%ue %ue la tabla
CheckTbl debe tener al menos 1 fila.
+efiniciones +EL6*(3
Cada columna de un registro debe contener un #alor aun%ue sea un #alor 1*((. !uede haber
situaciones en las %ue deba cargar una fila de datos en una tabla pero no cono4ca el #alor de una
columna o el #alor ya no e&ista. .i la columna acepta #alores 1*(( puede cargar la fila con un
#alor 1*((. !ero dado %ue puede no resultar con#eniente utili4ar columnas %ue acepten #alores
1*(( una me'or solucin podr)a ser establecer una definicin +EL6*(3 para la columna siempre
%ue sea necesario. !or e'emplo es habitual especificar el #alor cero como #alor predeterminado
para las columnas numricas o 1/+ :no disponible; como #alor predeterminado para las columnas
de cadenas cuando no se especifica ning7n #alor.
6l cargar una fila en una tabla con una definicin +EL6*(3 para una columna se indica
impl)citamente a +atabase Engine :-otor de base de datos; %ue cargue un #alor predeterminado en
la columna en la %ue no se haya especificado ning7n #alor.
!ermitir #alores 1*((
(a nulabilidad de una columna determina si las filas de una tabla pueden contener un #alor 1*((
en esa columna. *n #alor 1*(( no es lo mismo %ue cero :A; en blanco o %ue una cadena de
caracteres de longitud cero como PP. 1*(( significa %ue no hay ninguna entrada. (a presencia de
un #alor 1*(( suele implicar %ue el #alor es desconocido o no est$ definido. !or e'emplo un #alor
1*(( en la columna Sell7ndDate de la tabla Production&Product de la base de datos
Adventure=or>s9@@A!9 no implica %ue el art)culo no tenga una fecha de #enta final. El #alor
1*(( significa %ue se desconoce la fecha o %ue no se ha establecido.
.i se inserta una fila pero no se incluye ning7n #alor para una columna %ue permita #alores 1*((
+atabase Engine :-otor de base de datos; proporcionar$ el #alor 1*(( a menos %ue e&ista una
definicin o un ob'eto +EL6*(3. *na columna definida con la palabra cla#e 1*(( tambin acepta
una entrada e&pl)cita de 1*(( por parte del usuario independientemente del tipo de datos de %ue
se trate o de si tiene un #alor predeterminado asociado. El #alor 1*(( no debe ponerse entre
comillas por%ue no ser$ interpretado como un #alor 1*(( sino como la cadena de caracteres
P1*((P.
.i se configura una columna para %ue no permita #alores 1*(( ser$ m$s f$cil mantener la
integridad de los datos ya %ue se garanti4a %ue una columna de una fila siempre contendr$ datos. .i
no se aceptan #alores 1*(( el usuario %ue escriba los datos en la tabla deber$ especificar un #alor
para la columna8 de lo contrario no se podr$ aceptar la fila de la tabla en la base de datos.
Fin del documento
=>/=> ?@/A@/=A A>:=@:=B /media/C52C6.+/fpuna/?A=?<
?/bd=na/unidadD/documentosdeconsulta/dAD<AD.odt

You might also like