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

Ayuda para hacer cosultas!

Estas en el tema de Ayuda para hacer cosultas! en el foro de Mysql en Foros del Web. Hola, estoy diseñando un pequeño programa simulando un colegio donde requiero que en una tabla se guarden los datos del alumno y en otra las ...
  #1 (permalink)  
Antiguo 08/01/2008, 20:38
Avatar de Hazek  
Fecha de Ingreso: julio-2002
Ubicación: En mi casa :D ó ?
Mensajes: 418
Antigüedad: 21 años, 8 meses
Puntos: 3
Ayuda para hacer cosultas!

Hola, estoy diseñando un pequeño programa simulando un colegio donde requiero que en una tabla se guarden los datos del alumno y en otra las materias posibles que pueda llevar pues un alumno puede llevar N materias pero resulta que no entiendo bien como crear las relaciones pues tampoco se en que tabla deberia ir el atributo de calificacion, segun yo la tabla HORARIOS es la que hace la relacion y creo que no deberia ir ahi el atributo de calificacion pero es que como dije antes no tengo claro donde deberia ir.


ESTRUCTURA QUE USE GRACIAS A HUARLO
create table alumnos
(
cuenta int(5),
nombre varchar(20),
edad int(2),
primary key(cuenta)
);


insert into alumnos values(12,'david',23);
insert into alumnos values(34,'ana',23);
insert into alumnos values(56,'mony',22);

create table materias
(
id_materia int(5),
nombre varchar(20),
primary key(id_materia)
);

insert into materias values(123,'matematicas');
insert into materias values(456,'microcontroladores');
insert into materias values(798,'calculo');
insert into materias values(012,'español');



create table alumnos_materias
(
cuenta int(5),
id_materia int(5),
calificacion int(2),

primary key(cuenta,id_materia),
foreign key(cuenta) references alumnos(cuenta),
foreign key(id_materia) references metrias(id_materia)
);


insert into alumnos_materias values(12,123,8);
insert into alumnos_materias values(12,798,9);
insert into alumnos_materias values(12,012,7);



TRATE DE HACER EL SIGUIENTE QUERY PARA OBTENER LAS MATERIAS QUE LLEVA DAVID PERO ESTA MAL Y CREO QUE ESTA MAL DESDE EL DISEÑO DE LA BASE DE DATOS y EL QUERY :(

#MATERIAS QUE LLEVA DAVID (corregido)
select materias.nombre from materias, alumnos_materias, alumnos where alumnos.cuenta = alumnos_materias.cuenta and materias.id_materia = alumnos_materias.id_materia and alumnos.nombre = 'david';
__________________
Tecnologias: Flash Platform, Java (Spring, HB, Struts, Grails), iOS, Android, JavaScript, PHP, SQL (MySQL, Oracle), Prolog, Assembler (PIC's) y Arduino - Electronica.

Última edición por Hazek; 09/01/2008 a las 00:34 Razón: Correcciones!
  #2 (permalink)  
Antiguo 08/01/2008, 23:28
 
Fecha de Ingreso: enero-2008
Mensajes: 197
Antigüedad: 16 años, 2 meses
Puntos: 10
Re: Ayuda para hacer cosultas!

Hola Hazek,

Te muestro a continuación un esquema sencillo para que te des una idea:



En el esquema te muestro lo que es una relación muchos a muchos (alumnos_materias) ya que un alumno puede tener 1 o más materias y a su vez una materia puede tener 1 o más alumnos por lo tanto nos sale esa relación y pues ahí mismo le metemos un campo de calificación ya que las tuplas que se forman de esa relación son únicas y deben tener su calificación asignada. por ejemplo suponiendo que tienes el alumno con id 1 que se llama Juan, y la Materia con id 1 que es la de MySQL, un registro de esa relación (alumnos_materias) podría ser el siguiente:

Código:
-----------+------------+--------------
alumno_id   materia_id   calificación
-----------+------------+--------------
1                1            10
y así puedes tener relacionados los alumnos con sus materias y las calificaciones que sacaron para cada materia:

Código:
-----------+------------+--------------
alumno_id   materia_id   calificación
-----------+------------+--------------
1                1            10
1                2            8
1                3            8
1                4            9
Por otro lado está la relación que tiene la entidad Materia, ya que está relacionada con un Profesor y un Horario, como te comentaba es un ejemplo sencillo en el que suponemos que sólo hay materias únicas sin secciones es decir, hay solo una materia de Español, Matemáticas etc en este equema no cabe el hecho de tener Español Sección 1,2,3.
Estas relaciones son de uno a muchos es decir una materia tiene un solo horario (o en un horario hay varias materias )así mismo una materia la imparte un solo profesor (Un profesor puede impartir varias materias)por lo tanto le pasamos las claves foráneas (FK)a la entidad Materia. Espero estarme explicándo ...

Y pues bueno... a grandes rasgos ese sería el equema (sencillo repito).

Finalmente Unas recomendaciones técnicas:

Los campos identificadores de cada Entidad defínelos numéricos (int) auto increment sobra decir que son primary key.

Espero haberte ayudado saludos y suérte cualquier cosa aquí estamos

Última edición por hualro; 08/01/2008 a las 23:36
  #3 (permalink)  
Antiguo 09/01/2008, 00:29
Avatar de Hazek  
Fecha de Ingreso: julio-2002
Ubicación: En mi casa :D ó ?
Mensajes: 418
Antigüedad: 21 años, 8 meses
Puntos: 3
De acuerdo Re: Ayuda para hacer cosultas!

Muchas gracias hualro, despues de todo no estaba tan perdido pero no cabe duda que sin tu grandiosa ayuda no hubiera podido solucionar mi problema ;)

Contestandome yo solo, el query para obtener las materias que lleva David (osea yo jaja) me quedo asi:


select materias.nombre from materias, alumnos_materias, alumnos where alumnos.cuenta = alumnos_materias.cuenta and materias.id_materia = alumnos_materias.id_materia and alumnos.nombre = 'david';

Gracias de nueva cuenta ;)

Si hay una forma mas optima de obtener el mismo resultado (bueno ya se que puedo usar alias para mis tablas) ojala puedna comentarmela ;)
__________________
Tecnologias: Flash Platform, Java (Spring, HB, Struts, Grails), iOS, Android, JavaScript, PHP, SQL (MySQL, Oracle), Prolog, Assembler (PIC's) y Arduino - Electronica.
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 02:10.