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

Tabla con 4 foreign keys iguales

Estas en el tema de Tabla con 4 foreign keys iguales en el foro de Mysql en Foros del Web. Me explico, se trata de un sistema de puntuación, en el cual cada persona vota a otras 3 con 3 puntuaciones distintas. Estoy haciendo la ...
  #1 (permalink)  
Antiguo 05/10/2012, 04:47
 
Fecha de Ingreso: diciembre-2008
Mensajes: 116
Antigüedad: 16 años
Puntos: 0
Tabla con 4 foreign keys iguales

Me explico, se trata de un sistema de puntuación, en el cual cada persona vota a otras 3 con 3 puntuaciones distintas. Estoy haciendo la tabla pero no estoy seguro de si puedo hacer 4 foreign keys de la misma tabla a esta tabla nueva, no se si se entiende.
Tengo en la tabla 'id_persona', que es foreign key de 'persona', pero también tengo 'voto1', 'voto2', 'voto3' y los 3 son foreign key de 'persona', ¿estaría bien esta configuración?

Saludos.
  #2 (permalink)  
Antiguo 05/10/2012, 06:17
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Tabla con 4 foreign keys iguales

No. Está mal.
si tienes una relación como esa, es una relación N:N, por tanto los votos van a una tabla aparte, donde se relaciona a un votante con una sola FK por cada vez.
La cantidad de veces que vote, es algo que se maneja con consultas y con restricciones en la aplicación.
¿Entiendes la idea?

En otras palabras: Tienes que crear una tabla relacional.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 08/10/2012, 10:34
 
Fecha de Ingreso: diciembre-2008
Mensajes: 116
Antigüedad: 16 años
Puntos: 0
Respuesta: Tabla con 4 foreign keys iguales

Cita:
Iniciado por gnzsoloyo Ver Mensaje
No. Está mal.
si tienes una relación como esa, es una relación N:N, por tanto los votos van a una tabla aparte, donde se relaciona a un votante con una sola FK por cada vez.
La cantidad de veces que vote, es algo que se maneja con consultas y con restricciones en la aplicación.
¿Entiendes la idea?

En otras palabras: Tienes que crear una tabla relacional.
No se si lo entiendo bien, pero tampoco se si me he explicado bien, te "dibujo" lo que tengo:
TABLA persona con nombre, apellidos, etc
TABLA evento con id_evento, caracteristicas, etc
y una TABLA votaciones con id_persona (FK persona), id_evento (FK evento), voto1 (FK persona), voto2 (FK persona), voto3 (FK persona)

¿Como debería cambiarlo para que estuviera bien diseñado?

Gracias.
  #4 (permalink)  
Antiguo 08/10/2012, 11:16
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Tabla con 4 foreign keys iguales

En tu diagrama es:
Cita:
persona(id_persona, nombre, apellidos, ...)
evento(id_evento, caracteristicas,...)
votaciones(id_persona , id_evento)
Los subrayados son las PK de las tablas, y de ese modo para saber cuántos votos emitió una persona en un evento, sólo hace falta hacer una consulta.
El límite de tres (3) votos es algo que debe parametrizarse en la aplicación, no en la base, de modo que verifique primero cuántos votos emitió y si es inferior a 3, le permita emitir el voto.
Así, por lo menos, se puede hacer un sistema simple, sin redundancia y lo suficientemente flexible como para poder crear votaciones de cantidades programables de votos.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 08/10/2012, 11:28
 
Fecha de Ingreso: diciembre-2008
Mensajes: 116
Antigüedad: 16 años
Puntos: 0
Respuesta: Tabla con 4 foreign keys iguales

En la aplicación quiero que la persona emita sus 3 votos a la vez, de modo que si elige solo a 2 o 1 no se almacena el voto, supongo que a eso te refieres con lo del límite. Como los votos son sobre personas de la misma aplicación, pensaba que debía hacer FK a los 3 campos de la tabla "votaciones" con la tabla "persona", pero veo que no, y que tampoco lo necesito, con consultas saco la información de a quien votó dicha persona.

Gracias gnzsoloyo por tu ayuda.

Saludos.

Etiquetas: key, tabla, foreignkey
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 21:18.