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

Por favor ayuda con modelo de BD

Estas en el tema de Por favor ayuda con modelo de BD en el foro de Mysql en Foros del Web. Hola a todos, Estoy en un problema el cual no he podido resolver (supongo que se debe a mi poca experiencia en MySql y en ...
  #1 (permalink)  
Antiguo 10/03/2011, 19:08
 
Fecha de Ingreso: febrero-2010
Mensajes: 8
Antigüedad: 14 años, 2 meses
Puntos: 0
Por favor ayuda con modelo de BD

Hola a todos,
Estoy en un problema el cual no he podido resolver (supongo que se debe a mi poca experiencia en MySql y en base de datos).
Resulta que tengo cinco tablas: “Curso”, “Usuarios”, “Videos”, “usuarios por curso” y “vio video”. Un usuario puede pertenecer de uno a muchos cursos y un curso puede tener de uno a muchos usuarios, por lo tanto cree un “NAV” entre ambas tablas. Un curso puede tener de uno a muchos videos, por lo tanto cursos es una llave foránea en videos, hasta ahí todo bien. Mi problema surge cuando se debe indicar si el usuario vio o no el video, para esto necesito un booleano o bit que me indique este dato (0=Falso, 1=Verdadero). El problema que la tabla que genere para solucionar este problema podría generar muchos errores puesto a que puedo colocar un video asignado a un usuario el cual no pertenece a este curso.

Mi pregunta es: ¿ hay una forma mediante MySql de controlar esto?, además encuentro contraproducente volver a relacionar a usuario con videos siendo que este ya está asignado a un curso y a su vez un video ya tiene asignado al curso al cual pertenece.

Cualquier sugerencia estructural de la BD o cualquier otra solución será muy bien recibida

Espero haberme expresado bien, de todas formas les dejo el modelo relacional.






Agradezco mucho su ayuda
  #2 (permalink)  
Antiguo 11/03/2011, 15:29
 
Fecha de Ingreso: febrero-2010
Mensajes: 8
Antigüedad: 14 años, 2 meses
Puntos: 0
Respuesta: Por favor ayuda con modelo de BD

nadie puede tenderme una mano?
  #3 (permalink)  
Antiguo 11/03/2011, 15:56
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Por favor ayuda con modelo de BD

En realidad, el problema no es tan complejo como parece, tiene que ver con modelar ajustandose al modelo E-R ortodoxamente.
Me explico:
La relación Video - Curso - Usuario es una relación ternaria de tipo N:N:N. Por definición, toda relación N:N genera una tabla cuya PK está constituída por la PK de las tablas involucradas. No necesita de por sí ninguna clave propia (allí le estás pifiando), ya que el conjunto asegura la unicidad. Sólo requiere como mucho un atributo discriminador si y sólo si existe la posibilidad de que el mismo grupo de FK puedan aparecer en más de una ocasión, que no es el caso.
Incluso, si lo estudias correctamente, las únicas tablas que deben poseer su propia PK no dependiente de otras son Usuario, Video y Curso. Todo el resto no requieren PK propia (pifiada general).
Si un Usuario sólo puede hacer un curso una sola vez, entonces la tabla Usuarios_Curso sólo requeriría como PK las FK de usuario_id y curso_id. En ese contexto, si el Usuario sólo puede ver un video si y sólo si está en un curso, entonces la relación es entre la tabla Usuario_Curso y Video con cardinalidad N:N. De esa forma, la tabla hereda a su vez sólo dos claves: Una clave compuesta desde Usuario_Curso y la FK de Video.
¿Se va entendiendo?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #4 (permalink)  
Antiguo 12/03/2011, 14:39
 
Fecha de Ingreso: febrero-2010
Mensajes: 8
Antigüedad: 14 años, 2 meses
Puntos: 0
Respuesta: Por favor ayuda con modelo de BD

Muchas gracias por tu ayuda gnzsoloyo (parece que tenía la media cagada XD). Todos los problemas que mencionaste de mi modelos corregí, a si que reitero los agradecimientos por qué no tenía ni idea de estos fallos.

Ahora mi problema (o no sé si problema) sigue siendo lo que mencione arriba, y es que si mi tabla “viovideo” tiene una PK compuesta por las FK videos y usuariosxcurso sigo sin tener como controlar que esos datos sean correctos. Mi problema surge porque un curso puede tener muchos videos asociados y perfectamente podría poner en la tabla “viovideo” un usuario al cual el video que se le asigna no corresponde a su curso.

¿puedo controlar esto desde MySQL ?
  #5 (permalink)  
Antiguo 12/03/2011, 16:07
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Por favor ayuda con modelo de BD

Cita:
si mi tabla “viovideo” tiene una PK compuesta por las FK videos y usuariosxcurso sigo sin tener como controlar que esos datos sean correctos.
Si las tablas son InnoDB, y los campos se definieron como FK hacia sus respectivas tablas, es absolutamente imposible que puedas poner un valor que no exista previamente en su tabla referida. Eso es parte de la restricción de una FK.
Lo que la base no puede controlar es que si lo que pones en el INSER es lo que realmente quieres poner. Sólo puede verificar que sean valores válidos como FK.
Cita:
y perfectamente podría poner en la tabla “viovideo” un usuario al cual el video que se le asigna no corresponde a su curso.
Ahora bien, la insistencia de que no pongas una ID propia es para que la clave primaria de esa tabla quede definida como (IDVideo, IDUsuario, IDCurso), de esa forma jamás podrá suceder que un mismo usuario pueda ver dos veces el mismo video en el mismo curso... porque una PK tiene como restricción básica ser única, lo que quiere decir simplemente que no puede darse el mismo conjunto de valores combinado dos veces.
¿Se entiende el concepto de PK compuesta?
Precisamente por eso te dije que la FK de esa tabla debe ser heredada no de cada tabla base, sino de la tabla Usuario_Cruso. De ese modola PK en realidad es: (IDVideo), (IDUsuario, IDCurso), es decir, esa tabla depende de las PK de Video y de Usuario_Curso, de modo que un video se relacione con un usuario siempre que primero se registre en un curso.
¿Se entiende la idea?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: bd, favor, modelo
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 06:14.