Comunidad de diseño web y desarrollo en internet online

Ayuda con una BD

Citar            
MensajeEscrito el 11 Dic 2009 04:51 am
hola a todos :)

quisiera que me recomendaran y guiaran en una forma de realizar una base de datos en mysql con lo siguiente

- Alumnos (datos personales, cursos que esta llevando)
- Cursos (nombre del curso, nota de cada alumno)
- Aula (se pueden dicatar varios cursos en un mismo aula)
- Profesores (datos personales, cursos que dicta)

y que todos estos datos esten enlazados por ejemplo que

al buscar a un alumno X salgan los cursos que ha llevado, sus notas, el aula y el profesor de cada curso

al buscar a un profesor Y salgan los cursos que dicta y en qué aula

espero haber sido lo más claro posible y espero que por favor pudieran ayudarme en este proyecto :D

Por julioli

21 de clabLevel



 

msie8
Citar            
MensajeEscrito el 11 Dic 2009 04:47 pm
Bueno amigo lo que tendrias que hacer es lo siguiente:
Crear las siguientes tablas maestras:
alumos- cursos y nota.
Luego las siguientes:
aulas y profesor como la relacion entre ellas es de muchas a muchas para poder asignar una aula a un curso y un profesor a un curso u aula debes hacer una tabla intermedia que llamaremos: asignaaulaprofe.

CREATE TABLE `alumnos` (
`idalumno` int(9) NOT NULL,
`nombre` varchar(60) character set latin1 collate latin1_general_ci NOT NULL,
`idcurso` int(9) NOT NULL,
PRIMARY KEY (`idalumno`),
KEY `idcurso` (`idcurso`),
KEY `idcurso_2` (`idcurso`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;

CREATE TABLE `asignaaulaprofe` (
`idasigna` int(11) NOT NULL auto_increment,
`idcurso` int(9) NOT NULL,
`idaula` int(9) NOT NULL,
`idprofesor` int(9) NOT NULL,
PRIMARY KEY (`idasigna`),
KEY `idcurso` (`idcurso`),
KEY `idaula` (`idaula`),
KEY `idprofesor` (`idprofesor`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci AUTO_INCREMENT=9 ;

CREATE TABLE `aulas` (
`idaula` int(9) NOT NULL,
`nombre` varchar(25) collate latin1_general_ci NOT NULL,
`capacidad` int(2) NOT NULL,
PRIMARY KEY (`idaula`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci;


CREATE TABLE `cursos` (
`idcurso` int(9) NOT NULL,
`nombre` varchar(25) collate latin1_general_ci NOT NULL,
PRIMARY KEY (`idcurso`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci;



CREATE TABLE `notas` (
`idnota` int(9) NOT NULL auto_increment,
`nota` int(2) NOT NULL,
`idcurso` int(9) NOT NULL,
`idalumno` int(9) NOT NULL,
PRIMARY KEY (`idnota`),
KEY `idcurso` (`idcurso`),
KEY `idalumno` (`idalumno`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci AUTO_INCREMENT=5 ;



CREATE TABLE `profesor` (
`idprofesor` int(9) NOT NULL,
`nombre` varchar(60) collate latin1_general_ci NOT NULL,
PRIMARY KEY (`idprofesor`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci;



(Relaciones de las Tablas)


ALTER TABLE `alumnos`
ADD CONSTRAINT `alumnos_ibfk_1` FOREIGN KEY (`idcurso`) REFERENCES `cursos` (`idcurso`);

ALTER TABLE `asignaaulaprofe`
ADD CONSTRAINT `asignaaulaprofe_ibfk_3` FOREIGN KEY (`idprofesor`) REFERENCES `profesor` (`idprofesor`),
ADD CONSTRAINT `asignaaulaprofe_ibfk_1` FOREIGN KEY (`idcurso`) REFERENCES `cursos` (`idcurso`),
ADD CONSTRAINT `asignaaulaprofe_ibfk_2` FOREIGN KEY (`idaula`) REFERENCES `aulas` (`idaula`);

ALTER TABLE `notas`
ADD CONSTRAINT `notas_ibfk_1` FOREIGN KEY (`idcurso`) REFERENCES `cursos` (`idcurso`),
ADD CONSTRAINT `notas_ibfk_2` FOREIGN KEY (`idalumno`) REFERENCES `alumnos` (`idalumno`);


En cuanto a las consultas se pueden hacer por alumno y profesor y luego enlasarlas.
Cualquier cosa escribe

"El servir nos hace grandes" :cool:

Por crmauricio

52 de clabLevel



 

firefox
Citar            
MensajeEscrito el 11 Dic 2009 09:16 pm
gracias por tu respuesta :D

pero como seria para que el alumno este en varios cursos (numero no definido)
porque si no me equivoco en la tabla de alumnos solo tiene para 1 curso

Por julioli

21 de clabLevel



 

msie8
Citar            
MensajeEscrito el 12 Dic 2009 12:36 am
Te convendría crear una relación más, que sea el idAlumno, idCurso. De esta forma puedes tener múltiples alumnos asignados a múltiples cursos.

Saludos, Hernán . -

Por Hernán

BOFH

6148 de clabLevel

19 tutoriales
23 articulos

Genero:Masculino   REC Desarrollador de GAIA

Marketing & IT

firefox
Citar            
MensajeEscrito el 12 Dic 2009 02:10 pm
Amigo cuando tu Tienes una relación muchos a muchos lo que debes hacer es una tabla auxiliar que te resuelva esta situación, como asi:Por ejemplo, un Alumno puede estar en vario Cursos y varios Cursos pueden tener muchos Alumnos, Entoces creamos una tabla auxiliar , por ejemplo,AsignaCursosAlumnos(Podrias colocar el nombre en siglas, para que sea mas corta),y creas un idasigna(que es el id unico o primary key, de la tabla auxiliar) luego colocas el id del Curso y el id del Alumno(Que serian id foraneos al relacionar las tablas respectivas Alumnos y Cursos),Asi podras asignar a varios Alumnos a diferentes Cursos y varios Cursos a muchos Alumnos.
Cualquier cosa escribe estamos para ayudar.


"El servir nos hace Grandes" :cool:

Por crmauricio

52 de clabLevel



 

firefox
Citar            
MensajeEscrito el 12 Dic 2009 02:34 pm
bueno he estado creando las tablas de la base de datos y al momento de realizar la consulta:

Código MySQL :

SELECT * 
FROM alumnos, relaciones
WHERE relaciones.idinstructor =3


me bota esto

Código :

1 nombre1 1 1 1 3 
1 nombre1 2 2 1 3 
1 nombre1 3 3 1 3 
2 nombre2 1 1 1 3 
2 nombre2 2 2 1 3 
2 nombre2 3 3 1 3 
3 nombre3 1 1 1 3 
3 nombre3 2 2 1 3 
3 nombre3 3 3 1 3 
[idalumno] [nombrealumno] [idrelaciones] [idalumno] [idcurso] [idinstructor]

es esto correcto o he hecho algo mal ??

Por julioli

21 de clabLevel



 

msie8
Citar            
MensajeEscrito el 12 Dic 2009 09:57 pm
Pues lo que estas diciendole ahi, es que te traiga todos los alumnos que este ncon el profesor cuyo id sea 3. Me parece que hay un error lógico, lo que tu quieres es todos los alumanos dentro de un curso. Debería ser idcursor o algo así. ¿No te parece?

Saludos, Hernán . -

Por Hernán

BOFH

6148 de clabLevel

19 tutoriales
23 articulos

Genero:Masculino   REC Desarrollador de GAIA

Marketing & IT

firefox
Citar            
MensajeEscrito el 13 Dic 2009 12:11 am
ups creo que me exprese mal
lo que pasa es que me muestra a todos los alumnos y en la tabla de relaciones he establecido la relacion solo para los 3 primeros alumnos
osea seria algo asi mas o menos

Código :

1 nombre1 1 1 1 3 
1 nombre1 2 2 1 3 
1 nombre1 3 3 1 3 
2 nombre2 1 1 1 3 
2 nombre2 2 2 1 3 
2 nombre2 3 3 1 3 
3 nombre3 1 1 1 3 
3 nombre3 2 2 1 3 
3 nombre3 3 3 1 3 
4 nombre4 1 1 1 3 
4 nombre4 2 2 1 3 
4 nombre4 3 3 1 3 
5 nombre5 1 1 1 3 
5 nombre5 2 2 1 3 
5 nombre5 3 3 1 3 

Por julioli

21 de clabLevel



 

msie8
Citar            
MensajeEscrito el 13 Dic 2009 05:09 am
Quizá sea mejor para obtener data de las dos tablas, además de mucho más eficiente y rápido, usar un Select Join ¿No crees?

Saludos, Hernán . -

Por Hernán

BOFH

6148 de clabLevel

19 tutoriales
23 articulos

Genero:Masculino   REC Desarrollador de GAIA

Marketing & IT

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.