Académique Documents
Professionnel Documents
Culture Documents
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.
$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.
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.