Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

¿relacionar tablas en mysql?

Estas en el tema de ¿relacionar tablas en mysql? en el foro de Mysql en Foros del Web. Hola!! Hace unos años cree una web con una base de datos mysql y ahora, pasado esos añitos estoy remodelandola. El caso es que en ...
  #1 (permalink)  
Antiguo 04/05/2011, 15:57
 
Fecha de Ingreso: octubre-2007
Mensajes: 68
Antigüedad: 16 años, 6 meses
Puntos: 6
¿relacionar tablas en mysql?

Hola!!

Hace unos años cree una web con una base de datos mysql y ahora, pasado esos añitos estoy remodelandola.

El caso es que en su dia yo cree las tablas pero no las relacioné, simplemente cuando requiero de dos tablas uso la opción inner join con los dos campos que hacen referencia en cada tabla.

Documentandome para la optimización veo que existe FOREIGN KEY que relaciona las tablas, pero en mi ignoracia... ¿que diferencia habría? ¿las consultas son más rapidas? Pues al final aunque esten relacionadas tengo que usar la opcion innerjoin a la hora de consultar varias tablas.

Gracias y perdonar mi ignorancia
  #2 (permalink)  
Antiguo 04/05/2011, 16:11
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: ¿relacionar tablas en mysql?

Es una pregunta de fundamentos de las bases de datos. Parte de la info la puedes sacar de Wikipedia, porque se trata de un tema basico: Wikipedia::Clave foránea.
En una forma simple, se trata de una restricción que se impone a las tablas para asegurar la consistencia, integridad y evitar la redundancia de datos.
Su uso no es necesariamente rapidez, pero sí implica un modelado de mayor precisión y más sencillo de mantener, precisamente porque no es posible, en presencia de FK, que existan datos mal almacenados en los campos críticos, no pueden existir relaciones "huérfanas" y tampoco datos que no se actualicen debidamente.
La existencia de una FK no trae diferencias a las consultas de SELECT en cuanto al uso de INNER JOIN, pero entre otras cosas te asegura que jamás queden datos sin aparecer, porque siempre estarán correctamente vinculados.
Pueden, si, a la hora de realizar consultas basadas en campos que sean FK, cierta mejora en la rapidez de ejecución, por cuanto toda FK genera un índice donde se vinculan los valores de ambas tablas (cardinalidad N.N), o sobre la tabla hija (cardinalidad 1:N).
El tema de las FK es fundamental en varias de las asignaturas de las carreras universitarias de Sistemas, especialmente en Bases de Datos. No puedes trabajar correctamente en esta área sin conocerlo porque es parte del modelo de todos los DBMS en el mercado.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 04/05/2011, 16:26
 
Fecha de Ingreso: octubre-2007
Mensajes: 68
Antigüedad: 16 años, 6 meses
Puntos: 6
Respuesta: ¿relacionar tablas en mysql?

Muchas gracias, te has explicado de 10!!

Entiedo pues que en principio es de caracter más de seguridad, orden y efectividad de las bases de datos más que de rapidez.

Una ultima duda, al ser el campo FK ya no es necesario que sea indice?

Gracias
  #4 (permalink)  
Antiguo 04/05/2011, 16:40
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: ¿relacionar tablas en mysql?

Son conceptos diferentes. MySQL crea indices para administrar las FK, pero no son índices comunes. Sólo los usa para mantener la integridad y la relación, pero no se pueden invocar.
Por su lado, las FK (mira el link), deben forzosamente estar referidas a la PK de la otra tabla, o en su defecto a una clave candidata, caso en el cual esa clave debe haber sido definida como índice UNIQUE. No se puede hacer una FK que apunte a un campo o conjunto de campos que no sean PK o UNIQUE.
Además, las FK tienen otro requisito fundamental: Si son numéricas, deben ser del mismo tipo y rango que la PK de origen, si son te texto (CHAR o VARCHAR), deben ser de la misma longitud y CHARSET y COLLATION, si son de fecha y hora, deben ser del mismo tipo de dato, y si son compuestas, deben declararse todos sus campos en bloque, en el mismo orden y del mismo tipo de datos que su PK de origen.
¿Se entiende?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 04/05/2011, 16:45
 
Fecha de Ingreso: octubre-2007
Mensajes: 68
Antigüedad: 16 años, 6 meses
Puntos: 6
Respuesta: ¿relacionar tablas en mysql?

Perfectamente!! Hace unos añitos di SQL y por eso estoy reciclándome!!

Entiendo que si te pido una recomendación me dirías lógicamente que relacione las tablas ¿verdad?

muchas gracias
  #6 (permalink)  
Antiguo 04/05/2011, 16:57
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: ¿relacionar tablas en mysql?

En general, si. Pero hay que ver el esquema de la base (el DER físico o diagrama de tablas) para ver qué es lo que realmente hay que relacionar, qué se puede descartar y qué está faltando.
O sea, sin saber qué base es, no se puede hacer muchas recomendaciones...
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: relacionar, tablas
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:06.