MySQL - Duplicidad de datos en MySQL

 
Vista:
sin imagen de perfil
Val: 1
Ha disminuido su posición en 60 puestos en MySQL (en relación al último mes)
Gráfica de MySQL

Duplicidad de datos en MySQL

Publicado por Eduardo (2 intervenciones) el 14/06/2016 00:49:34
Buenas tardes o buenas noches estoy haciendo un proyecto donde tengo dos tablas maestro una llamada estudiantes y otra llamada materia, donde forman una tercera tabla relacional llamada curso_estudiante

etu-materia-maestro

Como se ve en la tercera tabla relacional se inserta la materia a cada estudiante dependiendo al paralelo que pertenezca.
La materia se va relacionando automáticamente con el alumno que le corresponde tal materia.
relacional-cursoestu

Como sabemos cada estudiante pertenece a un paralelo, un semestre y a una carrera determinada, por el cual se le asignan distintas materias que son las que debe cursar.

Ejemplo: A un estudiante de una carrera se le asignan sus materias las cual debe tomar durante ese semestre como algebra, calculo, administración,contabilidad..etc, pero ese mismo alumno no puede tener dos veces asignada la misma materia(idMateria) (porque si tiene la materia Algebra no la puede tener dos o más veces en el mismo semestre porque ya se le asignó una vez).

Ya que no sé cómo ingresar al estudiante (idEstudiante) y a la materia (idMateria) al mismo tiempo con sus respectivos parámetros (paralelo, semestre, carrera) a la tabla curso_estudiante.

Lo que he hecho es: Primero ingreso al estudiante con un INSERT INTO manualmente en la tabla curso_estudiante. Y luego al insertar la materia (con sus condiciones paralelo, semestre) a la tabla materia, esta automáticamente utilizando un disparador (Trigger) se envía a la tabla curso_estudiante que con un UPDATE actualiza y le asigna la materia que le corresponde a cada estudiante utilizando como parámetro de condición el paralelo y el semestre en la query UPDATE.

1
2
3
4
5
6
CREATE TRIGGER `cursoParaleloSemestre`
AFTER INSERT ON  `materia`FOR EACH ROW
BEGIN
UPDATE curso_estudiante SET idMateria = NEW.idMateria
WHERE (paralelo = NEW.paralelo AND semestre = NEW.semestre);
END

Para que así no me inserte dicha materia a los demás estudiantes que no corresponden ni al paralelo ni al semestre de la materia(idMateria) que fue insertada a la tabla materia con esas condiciones.

Ejemplo: Si ingresamos una materia(idMAteria)
materia

Se envía al estudiante
null-1-materia

Al enviar la materia con el Trigger a la tabla curso_estudiante va todo bien ya que automáticamente diferencia he inserta la materia al alumno que le corresponde por su paralelo y semestre.

Pero lo que esta malo es que si al alumno ya se le asignó una materia, se vuelva asignar o repetir todas las veces que el alumno aparezca, duplicando el dato ingresado, y por lo cual no deja que se puedan introducir las otras materias que debe tomar el alumno en ese semestre.

Ejemplo: Lo que no puedo hacer es que si al USUARO11 ya tiene asignada la materia Algebra en una de sus filas, que no se vuelva a repetir en otra fila más abajo del mismo USUARIO11 ya que si la siguiente materia que debe cursar es Calculo u otra sea asignada en la fila siguiente que tenga el USUARIO11, y en la siguiente otra materia diferente y así sucesivamente hasta que el estudiante no tenga más materias en ese semestre. Ya que un alumno solamente tiene asignado un grupo de asignaturas distintas en un semestre.

¿Qué puedo hacer para solucionar estos problemas de duplicidad de datos a un mismo usuario?

Está bien utilizar disparadores (Trigger), si alguien me pudiera orientar o me diga que estoy haciendo mal en mi pequeño código o si se puede hacer de otra manera o utilizar procedimientos almacenados, etc.

Me ayudaría bastante ya que me quede trabado en esta parte por mi poco conocimiento en MySQL
Desde ya muchas gracias por su tiempo y disculpen si es muy extensa la explicación, lo quise dejar de una forma que se entendiera de que se trata
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder