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