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

Duda con relacion entre dos tablas

Estas en el tema de Duda con relacion entre dos tablas en el foro de Mysql en Foros del Web. Hola, Tengo una duda con una base de datos que he creado. He escrito lo siguiente en mysql: Código: mysql> CREATE TABLE usuario( -> curso ...
  #1 (permalink)  
Antiguo 28/07/2008, 15:41
 
Fecha de Ingreso: enero-2008
Mensajes: 42
Antigüedad: 16 años, 2 meses
Puntos: 2
Duda con relacion entre dos tablas

Hola,

Tengo una duda con una base de datos que he creado. He escrito lo siguiente en mysql:
Código:
mysql> CREATE TABLE usuario(
    -> curso varchar(30) NOT NULL,
    -> edad int NOT NULL,
    -> nombre varchar(30) NOT NULL,
    -> numero_lista int NOT NULL,
    -> primer_apellido varchar(30) NOT NULL,
    -> segundo_apellido varchar(30) NOT NULL,
    -> PRIMARY KEY (curso,numero_lista));

mysql> CREATE TABLE calificaciones(
    -> curso varchar(30) NOT NULL,
    -> numero_lista int NOT NULL,
    -> nivel varchar(15) NOT NULL,
    -> ejercicio1 int NOT NULL,
    -> ejercicio2 int NOT NULL,
    -> ejercicio3 int NOT NULL,
    -> ejercicio4 int NOT NULL,
    -> ejercicio5 int NOT NULL,
    -> ejercicio6 int NOT NULL,
    -> ejercicio7 int NOT NULL,
    -> ejercicio8 int NOT NULL,
    -> ejercicio9 int NOT NULL,
    -> ejercicio10 int NOT NULL,
    -> FOREIGN KEY(curso) REFERENCES usuario(curso)
    -> ON DELETE CASCADE ON UPDATE CASCADE,
    -> FOREIGN KEY(numero_lista) REFERENCES usuario(numero_lista)
    -> ON DELETE CASCADE ON UPDATE CASCADE);
Lo que quiero hacer, es que al insertar un nuevo usuario en la tabla usuario se actualice la tabla calificaciones rellenando los campos curso y numero_lista, he estado mirando por Internet y a lo máximo que he llegado ha sido a lo que he escrito de mysql, pero el resultado es el siguiente:
Código:
mysql> INSERT INTO usuario VALUES('2primaria',5,'Pedro',1,'Martínez','Sanchez');
Query OK, 1 row affected (0.02 sec)

mysql> select * from usuario;
+-----------+------+--------+--------------+-----------------+------------------+
| curso     | edad | nombre | numero_lista | primer_apellido | segundo_apellido |
+-----------+------+--------+--------------+-----------------+------------------+
| 2primaria |    5 | Pedro  |            1 | Martínez       | Sanchez          | 
+-----------+------+--------+--------------+-----------------+------------------+
1 row in set (0.00 sec)

mysql> select * from calificaciones;
Empty set (0.00 sec)
¿Alguien me puede echar una mano con ello?

Gracias.

Saludos
  #2 (permalink)  
Antiguo 02/08/2008, 14:30
 
Fecha de Ingreso: agosto-2008
Mensajes: 9
Antigüedad: 15 años, 8 meses
Puntos: 0
Respuesta: Duda con relacion entre dos tablas

Hola:
Mira quizás no entendía bien lo que preguntas pero me parece que tiene un error de concepto respecto al diseño de bases de datos relacionales.
Que la tabla usuario este relacionada con calificaciones no significa que se inserten datos en calificaciones cada vez que se inserta un usuario. La relación de llave foránea lo que significa es que para poder insertar un curso y un numero_lista en la tabla calificaciones este ya debe existir en la tabla usuario.
Ejmplo: si partimos de la db bacía
mysql> INSERT INTO usuario VALUES('2primaria',5,'Pedro',1,'Martínez','Sanchez ');

+-----------+------+--------+--------------+-----------------+------------------+
| curso | edad | nombre | numero_lista | primer_apellido | segundo_apellido |
+-----------+------+--------+--------------+-----------------+------------------+
| 2primaria | 5 | Pedro | 1 | Martínez | Sanchez |
+-----------+------+--------+--------------+-----------------+------------------+
Lo normal es la tabla calificaciones siga bacía.
Tendremos que insertar después los datos de las calificaciones para este usuario.
mysql> INSERT INTO calificaciones
VALUES('2primaria',1,'nivel',1,3,8……


Lo único que garantiza la relación es que si no existe un usuario con el curso=2primaria y numero_lista=1 no se puede insertar calificaciones con ese curso y numero_lista.

Te sugiero que en cada tabla pongas un id numérico de llave primaria porque facilita las cosas :
mysql> CREATE TABLE usuario(
-> id_usuario int NOT NULL,
-> curso varchar(30) NOT NULL,
-> edad int NOT NULL,
-> nombre varchar(30) NOT NULL,
-> numero_lista int NOT NULL,
-> primer_apellido varchar(30) NOT NULL,
-> segundo_apellido varchar(30) NOT NULL,
-> PRIMARY KEY (id_usuario));

mysql> CREATE TABLE calificaciones(
-> id_usuario int NOT NULL,
-> nivel varchar(15) NOT NULL,
-> ejercicio1 int NOT NULL,
-> ejercicio2 int NOT NULL,
-> ejercicio3 int NOT NULL,
-> ejercicio4 int NOT NULL,
-> ejercicio5 int NOT NULL,
-> ejercicio6 int NOT NULL,
-> ejercicio7 int NOT NULL,
-> ejercicio8 int NOT NULL,
-> ejercicio9 int NOT NULL,
-> ejercicio10 int NOT NULL,
-> FOREIGN KEY(id_usuario) REFERENCES usuario(id_usuario)
-> ON DELETE CASCADE ON UPDATE CASCADE);

Cualquier cosa mes escribes a [email protected]
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 23:36.