Cita:
Iniciado por linuxfilo
Soy realmente nuevo en esao de bases de datos, apenas y he creado las tablas, la cuestion es la siguiente:
tengo una tabla con usuarios y el id del ususario, tengo otras tablas donde pongo las calificaciones de los usuarios que se relacionan con el id, o sea yo quiero que al buscar por id se muestre el contenido de la tabla relacionado con el id, pero no quiero escribir el id en la tabla de calificaciones siendo que ya está en la tabla de usuarios.
Utilizo mysql, cómo le hago?
No se entiende muy bien el planteo, pero el tema parece que pasa por faltarte , tal vez, alguna que otra tabla para que la cosa esté más sencilla.
Me explico:
El ejemplo de los exámenes de un alumnos es un ejemplo típico de los ejercicios de Bases de Datos en la Facultad. En este ejercicio, siempre aparecen dos tablas básicas, Usuarios y Calificación. En ese contexto, lo que debes plantearte es cómo se relacionan los usuarios con las calificaciones:
- Un usuario tiene una sola calificación (1 a 1).
- Un usuario puede tener muchas calificaciones (1 a N).
- Una calificación es para un sólo y único tema. SI: La tabla es única. NO: La calificación se relaciona con una tercera tabla, digamos "Temas".
Lo dejo allí, pero el modelado final para aplicar en una institución educativa implica alrededor de 12 tablas.
Ahora bien. Supongamos que el modelo sea de sólo calificar usuarios por un único rubro:
- En las relaciones de tipo 1 a 1, la clave de una tabla va en la otra tabla como FK. Como la relación es 1:1, no importa cual vaya en cual, con pasar una alcanza. Usualmente es preferible que el ID del Usuario esté en la tabla de Calificación, lo que daría:
Usuario(
IDUser, NombreUser)
Calificacion(
IDCalificacion, IDUser, Denominacion, Calificacion)
Lo que requeriría un
Código sql:
Ver originalSELECT NombreUser, Denominacion, Calificacion
FROM Usuario INNER JOIN Calificacion USING (IDUser);
- Si las relaciones son 1 a N, la cosa se complica, porque a) la clave foránea va siempre en la tabla de cardinalidad N, y b)la sola inclusión de las dos calves no es suficiente para identificar un registro, porque puede aparecer varias veces, por ejemplo, en diferentes fechas:
Esto daría un modelo, por ejemplo:
Usuario(
IDUser, NombreUser)
Calificacion(
IDCalificacion, IDUser, FechaCalif, Denominacion, Calificacion)
y requeriría:
Código sql:
Ver originalSELECT NombreUser, fechaCalif, Denominacion, Calificacion
FROM Usuario INNER JOIN Calificacion USING (IDUser)
ORDER BY fechaCalif;
¿Me estoy acercando o no se entiende?