Bienvenido(a), Visitante. Favor de ingresar o registrarse.
Enero 07, 2009, 06:30:50
Inicio Ayuda Buscar Ingresar Registrarse
Noticias: Foro de Java, C++ y más.

Nuevo foro de Base de datos.

+  Foros Java y C/Linux
|-+  Varios
| |-+  Varios
| | |-+  Duda con relacion entre dos tablas de Mysql
« anterior próximo »
Páginas: [1] Enviar tema Imprimir
Autor Tema: Duda con relacion entre dos tablas de Mysql  (Leído 583 veces)
Niubi
Full Member
***
Mensajes: 154


Ver Perfil


« en: Julio 29, 2008, 09:45:32 »

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
En línea
chuidiang
Administrator
Hero Member
*****
Mensajes: 2022



Ver Perfil WWW Email
« Respuesta #1 en: Julio 29, 2008, 10:19:51 »

Hola:

Automáticamente no se va a hacer, debes hacer dos inserts.

Si quieres liarte con algo avanzado, puedes usar triggers. Es una característica de las bases de datos que permiten ejecutar alguna acción cuando una tabla se modifica. Tendrías que poner un trigger de forma que al hacer un insert en la tabla usuario, se haga el insert en la tabla calificaciones. Tendrás que investigar un poco el tema a ver si te vale

http://dev.mysql.com/doc/refman/5.0/es/triggers.html

Se bueno.
En línea

Niubi
Full Member
***
Mensajes: 154


Ver Perfil
« Respuesta #2 en: Julio 30, 2008, 12:03:30 »

Hola,

Gracias por la respuesta, pensaba que se podía hacer lo que quería simplemente con la creación de las tablas.

Otra pregunta: ¿la segunda tabla está bien relacionada con la primera? Es decir, que curso y numero_lista de calificaciones se relacionan con la clave primaria de usuario que es curso y numero_lista conjuntamente.

Saludos.
« Última modificación: Julio 30, 2008, 12:06:36 por Niubi » En línea
chuidiang
Administrator
Hero Member
*****
Mensajes: 2022



Ver Perfil WWW Email
« Respuesta #3 en: Julio 30, 2008, 12:27:59 »

Hola:

¿Qué quiere decir "se relacionan bien"?

Se bueno.
En línea

Niubi
Full Member
***
Mensajes: 154


Ver Perfil
« Respuesta #4 en: Julio 30, 2008, 08:38:45 »

Hola,

¿Qué quiere decir "se relacionan bien"?

A lo que me referia con ello, es que si la clave foranea de la tabla calificaciones coincide con la clave primaria de la tabla usuario.

Saludos.
En línea
chuidiang
Administrator
Hero Member
*****
Mensajes: 2022



Ver Perfil WWW Email
« Respuesta #5 en: Julio 30, 2008, 08:41:40 »

Lo siento, pero no se bastante de base de datos como para contestarte a esa pregunta. De todas formas, si lo del foreign key no da error, supongo que está bien.

Se bueno.
En línea

Niubi
Full Member
***
Mensajes: 154


Ver Perfil
« Respuesta #6 en: Julio 30, 2008, 10:32:05 »

Ok,

Gracias  Giñar
En línea
manix
Full Member
***
Mensajes: 240


manix_10@hotmail.com mamfrey@yahoo.com
Ver Perfil WWW Email
« Respuesta #7 en: Agosto 01, 2008, 05:40:14 »

hola

amigo mira:
Citar
PRIMARY KEY (curso,numero_lista));

eso no es lo mejor, es decir, no es bien hecho que lo hagas, porque en el momento que no hayan cursos tu base colapsa. Para las entidades fuertes (en este caso usuarios) es mejor que hagas un id_usuario para que tu primary key quede bien fundamentada y no haya problemas. Con respecto a la relacion se ve puesto que estan compuestas por un mismo fomato, de hecho, en una consulta como por ejemplo "listar todas las calificaciones de un usuario"  solo es cuestion de usar ese atributo y listo

saludos
« Última modificación: Agosto 01, 2008, 07:04:21 por manix » En línea

Niubi
Full Member
***
Mensajes: 154


Ver Perfil
« Respuesta #8 en: Septiembre 01, 2008, 06:47:03 »

Hola,

Hacía mucho tiempo que no pasaba por aquí, gracias por la respuesta, en su momento fue lo que hice, jejeje

Saludos
En línea
Páginas: [1] Enviar tema Imprimir 
« anterior próximo »
Ir a:  


Ingresar con nombre de usuario, contraseña y duración de la sesión

Powered by MySQL Powered by PHP Powered by SMF 1.1.5 | SMF © 2006-2007, Simple Machines LLC XHTML 1.0 válido! CSS válido!