Ver Mensaje Individual
  #2 (permalink)  
Antiguo 27/06/2011, 09:12
leonardo_josue
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: Relacionar dos tablas

Hola karles200:

En lo particular te propondría un modelo con tres tablas en lugar de dos:

Una tabla de PREGUNTAS tal y como lo propones, una tabla de TESTS donde almacenes el id, el nombre y el tiempo para el test y una tercer tabla TESTS_PREGUNTAS donde puedas asignar las preguntas de cada test.

Código MySQL:
Ver original
  1. mysql> create table preguntas (id_pregunta int, enunciado varchar(50),
  2.     -> respuesta_1 varchar(30),respuesta_2 varchar(30),
  3.     -> respuesta_3 varchar(30),respuesta_4 varchar(30),respuesta_correcta int);
  4. Query OK, 0 rows affected (0.05 sec)
  5.  
  6. mysql> insert into preguntas values
  7.     -> (1, '¿Quién descubrió América?', 'Cristobal Colón',
  8.     -> 'Napoleón Bonaparte', 'Aristóteles', 'Américo Vespicio', 1),
  9.     -> (2, '¿Quién logró la conquista de México?', 'Cristobal Colón',
  10.     -> 'Hernán Cortés', 'Napoleón Bonaparte', 'Hugo Sánchez', 2),
  11.     -> (3, '¿De que color es caballo blanco de Napoléon?', 'Negro',
  12.     -> 'Café', 'Blanco', 'Gris', 3),
  13.     -> (4, '¿En qué país nació Napoleón Bonaparte?', 'España',
  14.     -> 'Alemania', 'México', 'Francia', 4);
  15. Query OK, 4 rows affected (0.03 sec)
  16. Records: 4  Duplicates: 0  Warnings: 0
  17.  
  18. mysql> create table tests(id_test int, nombre varchar(30), duracion int);
  19. Query OK, 0 rows affected (0.08 sec)
  20.  
  21. mysql> insert into tests values
  22.     -> (1, 'Historia de México', 60),
  23.     -> (2, 'Historia Universal', 60);
  24. Query OK, 2 rows affected (0.03 sec)
  25. Records: 2  Duplicates: 0  Warnings: 0
  26.  
  27. mysql> create table tests_preguntas (id_t_p int, id_test int, id_pregunta int);
  28. Query OK, 0 rows affected (0.08 sec)
  29.  
  30. mysql> insert into tests_preguntas values (1,1,1), (2,1,2),
  31.     -> (2,2,1),(3,2,2),(4,2,3),(5,2,4);
  32. Query OK, 6 rows affected (0.03 sec)
  33. Records: 6  Duplicates: 0  Warnings: 0
  34.  
  35. mysql> #Para obtener las preguntas del Test "Historia de México"
  36. mysql> select P.Enunciado from preguntas P inner join tests_preguntas TP
  37.     -> on TP.id_pregunta = P.id_pregunta where TP.id_test = 1;
  38. +--------------------------------------+
  39. | Enunciado                            |
  40. +--------------------------------------+
  41. | ¿Quién descubrió América?            |
  42. | ¿Quién logró la conquista de México? |
  43. +--------------------------------------+
  44. 2 rows in set (0.01 sec)
  45.  
  46. mysql> #Para obtener las preguntas del Test "Historia Universal"
  47. mysql> select P.Enunciado from preguntas P inner join tests_preguntas TP
  48.     -> on TP.id_pregunta = P.id_pregunta where TP.id_test = 2;
  49. +----------------------------------------------+
  50. | Enunciado                                    |
  51. +----------------------------------------------+
  52. | ¿Quién descubrió América?                    |
  53. | ¿Quién logró la conquista de México?         |
  54. | ¿De que color es caballo blanco de Napoléon? |
  55. | ¿En qué país nació Napoleón Bonaparte?       |
  56. +----------------------------------------------+
  57. 4 rows in set (0.00 sec)

Como verás de esta manera puedes reutilizar el banco de preguntas para distintos exámenes. Por cuestiones de presentación en el select sólo estoy recuperando el enunciado, pero podrías recuperar todos los campos de tu tabla preguntas poniendo simplemente P.* en lugar de P.Enunciado

Espero sinceramente que esto te pueda ser de ayuda.

Saludos
Leo.