Vous êtes sur la page 1sur 4

Integridad Referencial de MySQL MySQL por "tradicin" no ha soportado la integridad referencial. Existen en las versiones recientes, como la 4.

0, n tipo de ta!las " e no son las " e sa MySQL por defecto, " e s# permiten $ntegridad %eferencial &$%' y a cam!io son n poco m(s lentas. MySQL 4.0 soporta cinco tipos de ta!las) My$S*M, $S*M, +E*,, -.- &-ase de datos -er/eley', e $nno.-. -.- e $nno.- son am!as tipos de ta!las transaccionales. *dem(s de poder tra!a0ar con transacciones en MySQL, las ta!las del tipo $nno.tam!i1n tienen soporte para la definicin de claves for(neas, por lo " e se nos permite definir reglas o restricciones " e garanticen la integridad referencial de los registros. ,ara dar n enfo" e de integridad referencial, podemos decir " e c ando n registro en na ta!la haga referencia a n registro en otra ta!la, el registro correspondiente de!e existir

Claves primarias
Las claves 0 egan n papel m y importante no slo en MySQL, sino en c al" ier !ase de datos relacional. .e manera simple, las claves ay dan a indexar los datos en las ta!las y proporcionan na manera r(pida y eficiente de ! scar los datos en las mismas, adem(s de " e permiten preservar la integridad de los datos. 2na clave candidata es n campo, o na com!inacin de campos, " e identifican de manera 3nica n registro de na ta!la. 4stas no p eden contener valores n los, y s valor de!e ser 3nico, es decir no p ede !a0o ning na circ nstancia ser repetido o d plicado de manera " e garanticen " e na fila de na ta!la p eda ser siempre referenciada a trav1s de s clave primaria. Entonces na clave primaria, es na clave candidata, " e ha sido dise5ada para identificar de manera 3nica a los registros de na ta!la a trav1s de toda la estr ct ra de la !ase de datos. .e esa manera, para poder esta!lecer na relacin entre dos ta!las, es necesario asignar n campo en com3n a las dos ta!las La seleccin de na clave primaria es m y importante en el dise5o de na ta!la y m(s a3n en el de na !ase de datos, ya " e es n elemento clave de los datos, " e facilita la nin de ta!las y el concepto total de na !ase de datos relacional.

Claves Forneas
2na clave for(nea, es na clave primaria copiada en otra ta!la, es decir n campo en na ta!la " e se corresponde con la clave primaria de otra ta!la, con el fin de poder relacionar y a la ve6 referenciar am!as para as# poder !icar los datos m(s r(pido. Las relaciones de claves for(neas se descri!en como relaciones padre7hi0o, y se dice " e n registro es h 1rfano c ando s padre ya no existe. 8 ando en na !ase de datos se da na sit acin como esta, se dice " e se tiene na integridad referencial po!re. 9eneralmente esto va ligado a n mal dise5o, y p ede

generar otro tipo de pro!lemas en la !ase de datos, por lo tanto de!emos evitar esta sit acin siempre " e sea posi!le. En versiones anteriores a MySQL 4.0 no se esfor6a!a en evitar este tipo de sit aciones, y la responsa!ilidad pasa!a a la aplicacin, " e de!ia de controlar esas sit aciones. ,ara m chos desarrolladores, esta no era na sit acin del todo grata, y por lo tanto no se considera!a a MySQL para ser sado en proyectos grandes y serios. Las claves for(neas tienen " e ver precisamente con la integridad referencial, lo " e significa " e si na clave for(nea contiene n valor, ese valor se refiere a n registro existente en la ta!la relacionada.

Claves forneas en MySQL


Estrictamente ha!lando, para " e n campo sea na clave for(nea, 1ste necesita ser definido como tal al momento de crear na ta!la. Se p eden definir claves for(neas en c al" ier tipo de ta!la de MySQL, pero 3nicamente tienen sentido c ando se san ta!las del tipo $nno.-. * partir de la versin :.;:.4:!, se p eden definir restricciones de claves for(neas con el so de ta!las $nno.-. $nno.- es el primer tipo de ta!la " e permite definir estas restricciones para garanti6ar la integridad de los datos. ,ara tra!a0ar con claves for(neas, necesitamos hacer lo sig iente) 8rear am!as ta!las del tipo $nno.-. 2sar la sintaxis <=%E$9> ?E@&campoAf/' %E<E%E>8ES nom!reAta!la &nom!reAcampo' 8rear n #ndice en el campo " e ha sido declarado clave for(nea.

$nno.- no crea de manera a tom(tica #ndices en las claves for(neas o en las claves referenciadas, as# " e se de!er( crearlos de manera expl#cita. Los #ndices son necesarios para " e la verificacin de las claves for(neas sea m(s r(pida. * contin acin se m estra como definir las dos ta!las de e0emplo con na clave for(nea.
CREATE TABLE cliente ( id_cliente INT NOT NULL, nombre VARCHAR(30), RI!AR" #E" (id_cliente) ) T" E $ INNO%B& CREATE TABLE 'ent( ( id_)(ct*r( INT NOT NULL, id_cliente INT NOT NULL, c(ntid(d INT, RI!AR" #E"(id_)(ct*r(), IN%E+ (id_cliente), ,OREI-N #E" (id_cliente) RE,ERENCE. cliente(id_cliente) ) T" E $ INNO%B&

Las col mnas correspondientes en la clave for(nea y en la clave referenciada de!en tener tipos de datos similares para " e p edan ser comparadas sin la necesidad de hacer na conversin de tipos. El tama5o y el signo de los tipos enteros de!e ser el mismo. En

las col mnas de tipo char, el tama5o no tiene " e ser el mismo necesariamente. Si en na ta!la, n registro contiene na clave for(nea con n valor >2L=, significa " e no existe ning na relacin con otra ta!la. En las versiones :.;:.B0 y menores no de!en sarse las sentencias *LCE% C*-LE o 8%E*CE $>.ED en ta!las " e ya tienen definidas restricciones de claves for(neas o !ien, " e son referenciadas en restricciones de claves for(neas) c al" ier sentencia *LCE% C*-LE elimina todas las restricciones de claves for(neas definidas para la ta!la. >o de!e sarse na sentencia *LCE% C*-LE en na ta!la " e est( siendo referenciada, si se " iere modificar el es" ema de la ta!la, se recomienda eliminar la ta!la y volverla a crear con el n evo es" ema. 8 ando MySQL hace n *LCE% C*-LE, p ede " e se de manera interna n %E>*ME C*-LE, y por lo tanto, se conf ndan las restricciones de clave for(nea " e se refieren a la ta!la. Esta restriccin aplica tam!i1n en el caso de la sentencia 8%E*CE $>.ED, ya " e MySQL la procesa como n *LCE% C*-LE.

Insercin de registros con claves forneas


La integridad referencial se p ede comprometer !(sicamente en tres sit aciones) E. 8 ando se est( insertando n n evo registro. ;. 8 ando se est( eliminando n registro. :. 8 ando se est( act ali6ando n registro. La restriccin de clave for(nea aseg ra " e n estros datos mantienen s integridad. Sin em!argo, F" 1 s cede c ando eliminamos alg3n registroG .e!ido a n estra restriccin de clave for(nea, MySQL no permite " e eliminemos el registro " e contiene la clave primaria, ya " e 1sta hace referencia a otro registro, " e en este caso es la clave for(nea en la ta!la Hhi0aI. .e n evo, se mantiene la integridad de n estros datos.

Eliminacin de na clave fornea


,ara eliminar la clave for(nea se tiene " e especificar el $. " e ha sido generado y asignado internamente por MySQL a la clave for(nea.

Eliminacin de registros con claves forneas


2na de las principales !ondades de las claves for(neas es " e permiten eliminar y act ali6ar registros en cascada, en donde todos los registros relacionados son eliminados o act ali6ados de ac erdo a las relaciones de clave for(nea 8on las restricciones de clave for(nea podemos eliminar n registro de la ta!la HpadreI &la " e contiene la clave primaria' y a la ve6 eliminar n registro de la ta!la Hhi0aI &la " e contiene la clave for(nea' sando slo na sentencia .ELECE.

Las opciones est(ndar c ando se elimina na registro con clave for(nea son) => .ELECE %ESC%$8C => .ELECE >= *8C$=> => .ELECE 8*S8*.E => .ELECE SEC >2LL

=> .ELECE %ESC%$8C o => .ELECE >= *8C$=> son las acciones predeterminadas, y no permiten reali6ar na eliminacin si existe n registro asociado. Si se especifica => .ELECE 8*S8*.E, y na fila en la ta!la HpadreI es eliminada, entonces se eliminar(n las filas de la ta!la Hhi0aI c ya clave for(nea sea ig al al valor de la clave referenciada en la ta!la padre. Si se especifica => .ELECE SEC >2LL, las filas en la ta!la Hhi0aI son act ali6adas a tom(ticamente poniendo en las col mnas de la clave for(nea el valor >2LL. Si se especifica na accin SEC >2LL, de!emos aseg rarnos de no declarar las col mnas en la ta!la como >=C >2LL.

!ct ali"acin de registros con claves forneas


Las opciones correspondientes a => 2,.*CE est(n disponi!les a partir de la versin 4.0.J. Estas opciones son m y similares c ando se e0ec ta na sentencia 2,.*CE, en l gar de na sentencia .ELECE. Estas son) => 2,.*CE 8*S8*.E => 2,.*CE SEC >2LL => 2,.*CE %ESC%$8C

Vous aimerez peut-être aussi