Buenas, tengo una duda que nunca me habia planteado despues de mucho tiempo con el SQL y el PHP.
Voy a poner ejemplos simples para que os situeis en mi duda.
Resulta que hasta ahora si tenia una tabla para almacenar discos y otra de autores y queria sacar el listado de discos con sus autores hacia una consulta del tipo:
SELECT loquesea FROM discos LEFT JOIN autores ON discos.idautor=autores.id
o
SELECT loquesea FROM discos, autores WHERE autores.idautor=autores.id
Lo que fuera segun la necesidad.
Es decir que la relacion la hacia a traves de la misma consulta sql.
Pero ahora me encuentro con una cosa llamada: Restricciones FOREIGN KEY ,que al parecer se deberían hacer siempre y no se como lo omití y que dice algo como:
ALTER TABLE `discos`
ADD CONSTRAINT `loquesea` FOREIGN KEY (`idautor`) REFERENCES `autores` (`ID`) ON DELETE CASCADE ON UPDATE CASCADE;
¿QUe signfica esta consulta exactamente? por otro lado...¿Una relacion quita la otra? no lo creo pero por si acaso. ¿Que quiere decir referenciar las tablas? Quiere decir que irá más rapido cuando se hagá la consulta? está mas optimizada?
¿son como los indices internos de la tabla pero para tablas externas? Por que de ser asi supongo que la explicación a una de las preguntas es para que valla más rapido. De ser asi ¿Es recomendable su uso? o es una tonteria de la que casi no hay que preocuparse??
¿en phpmyadmin como se haria de forma grafica? solo por curiosidad por que no lo veo, ni en la creacion de indices.
Vamos, supongo que no haberlo usado antes no será un delito en optimización pero si es recomendable me gustaria saber la mayor info que pueda sobre ello y hacerlo de forma correcta a partir de ahora.
Otra duda que tengo (Sigo con el ejemplo de los discos y los autores pero ahora con una tabla mas de usuarios y favoritos) es cuando quieres saber los discos favoritos de un usuario. Yo normalmente usaba una tabla que relacionase los discos con el usuario.
Es decir tenemos la tabla discos, usuarios y favoritos.
la tabla favoritos solo tiene los campos ID_USUARIO y ID_DISCO con INT los dos
Si por ejemplo queria saber los discos favoritos del usuario PEPE hacia algo del tipo:
SELECT discos.nombre FROM discos,favoritos,usuarios WHERE usuarios.NOMBRE='PEPE' AND usuarios.ID=favoritos.ID_USUARIO AND favoritos.ID_DISCO=discos.ID
He puesto algo rapido pero supongo que os haceis a la idea. Entonces mi duda es: como se hace para usar la forma de relacionar que comento arriba en este ejemplo?? tendria que hacerlo en la tabla favoritos diciendole que el ID_USUARIO es el ID de usuarios y lo mismo con discos?? ¿No se utiliza en estos casos?
Bueno creo que hay demasiadas preguntas así que paro y a ver si alguien pudiese aclararme las dudas o almenos alguna.
Un saludo!!