elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.


 


Tema destacado: ¿Eres nuevo? ¿Tienes dudas acerca del funcionamiento de la comunidad? Lee las Reglas Generales


+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web
| | |-+  Bases de Datos (Moderador: Carloswaldo)
| | | |-+  Para que sirven las foreign key
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Para que sirven las foreign key  (Leído 2,517 veces)
4dr14n31t0r

Desconectado Desconectado

Mensajes: 85



Ver Perfil
Para que sirven las foreign key
« en: 6 Febrero 2016, 19:41 »

Cuando hago una consulta en mysql que conlleva el uso de varias tablas utilizo
Código:
SELECT NombrePeliculas, NombreGeneros
FROM Peliculas, Generos
WHERE Peliculas.idGeneros = Generos.idGeneros;
Aunque tambien podria utilizar los JOIN
Código:
SELECT NombrePeliculas JOIN NombreGeneros
ON Peliculas.idGeneros = Generos.idGeneros;
Pero en cualquiera de los dos casos el uso de las foreign key es completamente innecesario, ya que tanto si indico que es una clave ajena como si no, funciona igualmente.
Entonces, ¿Cual es la verdadera escencia de las foreign key?

Sospecho que habrá alguna forma de unir tablas con las foreign key que todavia no he visto, pero por mas que busco en internet no encuentro nada  :(


En línea

sodark

Desconectado Desconectado

Mensajes: 81


Ver Perfil WWW
Re: Para que sirven las foreign key
« Respuesta #1 en: 6 Febrero 2016, 20:03 »

Imagina que tienes un usuario en el foro y que cuando quieres borrar a ese usuario, tambien quieres eliminar todo lo que este haya puesto (post, mensajes, etc..)

Con la foreign key puedes decirle a la  tabla de comentarios que el user_id es un FK de la tabla usuarios, etc... de manera que si vieras un esquema E/R verias una linea de una tabla a la otra.
Pero ademas al definir una FK tambien puedes indicar que accion se toma cuando el dato es cambiado o borrado.

Si seleccionamos ON DELETE -> CASCADE lo que hara es que al borrar al usuario de la tabla de usuarios automáticamente se borran los registros de la tabla que tiene como FK al usuario, y se borran los de ese usuario.

De esta forma te aseguras que cuando eliminas algo, se elimina en todos lados, en vez de tener que tu ir por codigo y lanzar varias query de delete a varias tablas (todas las que quisieras borrar).

No es obligatorio borrar, tambien puedes poner a null o no hacer nada, si no recuerdo mal


En línea

4dr14n31t0r

Desconectado Desconectado

Mensajes: 85



Ver Perfil
Re: Para que sirven las foreign key
« Respuesta #2 en: 6 Febrero 2016, 20:17 »

Vale, pero... ¿Entonces las foreign key no sirven para consultas?
¿solo sirve para los on delete y on update?
En línea

sodark

Desconectado Desconectado

Mensajes: 81


Ver Perfil WWW
Re: Para que sirven las foreign key
« Respuesta #3 en: 6 Febrero 2016, 21:40 »

Básicamente como puedes ver en el post que te pongo debajo, sirve para restringir los posibles datos en ese campo y lo que te he dicho.

No sirve para consultas como tal.

https://firebird21.wordpress.com/2013/05/26/entendiendo-a-las-foreign-keys/
En línea

Carloswaldo
Traductor
Moderador Global
***
Desconectado Desconectado

Mensajes: 4.741


Nos reservamos el derecho de ban.


Ver Perfil WWW
Re: Para que sirven las foreign key
« Respuesta #4 en: 7 Febrero 2016, 05:45 »

Aunque tambien podria utilizar los JOIN

Lo que hiciste primero también es un JOIN

Vale, pero... ¿Entonces las foreign key no sirven para consultas?
¿solo sirve para los on delete y on update?

DELETE y UPDATE son consultas.

Como el ejemplo de sodark, si no usas foreign keys y eliminas un usuario, todos los mensajes y otros registros "relacionados" con el usuario quedarán intactos (digo "relacionados" porque la relación solo existiría en tu mente y no en la base de datos), haciendo que queden muchos registros huérfanos y en una base de datos grandes esto te volvería loco. Mejor aprender a hacer las cosas bien en lo pequeño.

Además podrías crear, por ejemplo, un mensaje asignado a un usuario que no existe y la base no se quejará.

Un foreign key también exige que la columna referenciada tenga un índice, lo que sí afecta al rendimiento de los SELECTs.
« Última modificación: 7 Febrero 2016, 05:48 por Carloswaldo » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
para que sirven los puos en en un dvd?
Multimedia
druguito 1 987 Último mensaje 13 Julio 2006, 09:58
por CHI<`;´>NO©
Punteros ** y *** en C. ¿Para que sirven?
Programación C/C++
Agente Naranja 3 34,349 Último mensaje 25 Noviembre 2012, 06:15
por theinzide
Para que sirven los Punteros?
Programación C/C++
..:ALT3RD:.. 6 7,380 Último mensaje 16 Octubre 2011, 19:59
por pucheto
¿¿Para que sirven??
Hacking Básico
xpuns 2 794 Último mensaje 19 Agosto 2015, 16:05
por xpuns
para que sirven los ficheros httml
Desarrollo Web
www.infosuburbana.net 8 959 Último mensaje 8 Marzo 2017, 14:48
por Franny
Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines