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

tablas relacionas en mysql aclarar conceptos

Estas en el tema de tablas relacionas en mysql aclarar conceptos en el foro de Mysql en Foros del Web. Hola necesito ayuda para poder relacionar tablas una vez las creo, con programas como mysql workbench consigo relacionarlas pero no me queda claro, tambien estube ...
  #1 (permalink)  
Antiguo 09/05/2013, 11:42
 
Fecha de Ingreso: mayo-2011
Mensajes: 1.201
Antigüedad: 12 años, 11 meses
Puntos: 10
tablas relacionas en mysql aclarar conceptos

Hola necesito ayuda para poder relacionar tablas una vez las creo, con programas como mysql workbench consigo relacionarlas pero no me queda claro, tambien estube mirando la documentacion pero no me aclaro, pongo las tablas creadas por si me quereis ayudar a comprender como se relacionan.

se trata de 4 tablas usuario, perfil , aficiones y compatibles.

donde la tabla usuario tiene que ir relaciona con perfil y aficiones, teniendo estas dos las claves foraneas, y luego aficiones tiene que estar relaciona con compatibles la estructura la cree de esta forma pero no se si es correcta para hacer esta relacion de tablas.

Código MySQL:
Ver original
  1. CREATE TABLE IF NOT EXISTS `usuarios` (
  2.   `nick` char(10) NOT NULL,
  3.   `pwd` char(12) NOT NULL,
  4.   PRIMARY KEY (`id_usuario`),
  5. ) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_spanish_ci AUTO_INCREMENT=1;
  6.  
  7. CREATE TABLE IF NOT EXISTS `perfil` (
  8.   `nombre` char(10) NOT NULL,
  9.   `edad` int unsigned NOT NULL,
  10.   PRIMARY KEY (`id_perfil`),
  11.   FOREIGN KEY (`id_usuario`),
  12. ) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_spanish_ci AUTO_INCREMENT=1;
  13.  
  14. CREATE TABLE IF NOT EXISTS `aficiones` (
  15.   `id_aficiones` int unsigned NOT NULL AUTO_INCREMENT,
  16.   `ocio` char(10) NOT NULL,
  17.   PRIMARY KEY (`ocio`),
  18.   FOREIGN KEY (`id_usuario`),
  19.   UNIQUE (`id_aficiones`),
  20. ) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_spanish_ci AUTO_INCREMENT=1;
  21.  
  22.  
  23. CREATE TABLE IF NOT EXISTS `compatibles` (
  24.   `id_compatibles` int unsigned NOT NULL AUTO_INCREMENT,
  25.   `ocio` char(10) NOT NULL,
  26.   `amigos` char(10) NOT NULL,
  27.   FOREIGN KEY (`ocio`),
  28. ) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_spanish_ci AUTO_INCREMENT=1;


Aparte no se como tendria que hacerlo para crear esa relacion espero que me podais ayudar.

Saludos.
  #2 (permalink)  
Antiguo 09/05/2013, 22:05
sjj
 
Fecha de Ingreso: octubre-2008
Mensajes: 213
Antigüedad: 15 años, 5 meses
Puntos: 12
Respuesta: tablas relacionas en mysql aclarar conceptos

¿En dónde quieres relacionar las tablas? Si lo que quieres hacer es recuperar datos mediante la relación de tablas para eso hay que usar el inner join en las consultas SQL, no es necesario establecer relaciones o algo así. Por ejemplo para traer el id_usuario, el nick y el nombre haces:

Código MySQL:
Ver original
  1. SELECT usuarios.id_usuario,  usuarios.nick, perfil.nombre
  2. FROM usuarios
  3. INNER JOIN perfil ON usuarios.id_usuario=perfil.idusuario;

Alcanza con declarar ciertos campos como claves primarias o foráneas y que los campos en común sean del mismo tipo.
  #3 (permalink)  
Antiguo 10/05/2013, 03:13
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: tablas relacionas en mysql aclarar conceptos

Las relaciones permiten controlar los contenidos, pero no afectan las consultas....

Es decir tu puedes tener tablas relacionadas y consultarlas por separado o combinadas con join através de los campos que construyen las relaciones e incluso através de otros campos... siempre que el resultado que obtengas tenga sentido... pero ese sentido lo encuentras tu no el sql... mientras los campos que uses para combinar tablas cumplan con la condición de ser del mismo tipo sql te permitirá combinarlas.


Las relaciones permiten controlar por ejemplo que no registres aficiones de usuarios inexistentes pero si no lo pides explícitamente en la consulta no se van a mostrar combinadas.

Supongo que tienes una tabla "afición", que no nos muestras, que completa la relación n:m entre usuarios y esa tabla usando la tabla "aficiones" como tabla de relación. si no la tienes deberías....


Usuarios

idUsuario PK
...

aficiones
idAficion FK
idUsuario FK
...?..
PRIMARY KEY (idAficion,idUsuario)

Aficion
idAficion PK
nombre (UNIQUE)
...
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.

Última edición por quimfv; 10/05/2013 a las 03:22

Etiquetas: sql, tabla, 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 18:33.