Ver Mensaje Individual
  #3 (permalink)  
Antiguo 21/04/2013, 13:28
Avatar de gnzsoloyo
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, 2 meses
Puntos: 2658
Respuesta: Este bien este diagrama?

Dicho con otras palabras, si, te están fallando conceptos básicos que tienen que ver con la definición de entidad-relación, dependencias y normalización.

Errores:
- Estás creando una entidad Usuario que tiene una PK multicampo, lo que es un error desde el momento en que un Usuario es una tabla base que materializa una entidad fuerte.
- Las entidades Post, Articulo, Comentario y Voto, dependen de Usuario, no al revés.
- Un Usuario puede tener N Posts, pero cada post sólo puede ser de un usuario.
- Un Usuario puede hacer diferentes comentarios sobre un mismo posts o diferentes posts, pero cada uno de los comentarios sólo puede relacionarse con el mismo post. Exactamente como funciona FDW...
- Un Usuario puede votar un Post, pero sólo una vez cada post. En ese contexto la cardinalidad es N:N, por tanto la PK de Voto es (idPost, idUsuario), y no requiere otro valor. Tampoco necesita dos campos para definir el voto como positivo y negativo, porque si sólo puede tomar dos estados, se puede hacer con un sólo campo BOOL, considerando 0 (FALSE) como negativo y 1 (TRUE) como positivo.
- Comentarios no puede tener una relación opcional con dos tablas, porque el comentario depende del Post o del Articulo, y por tanto o lleva el ID de uno, o lleva el ID del otro.
Este caso tiene dos soluciones: 1) Crear dos tablas de comentarios, una para artículos y otra para Posts. 2) Crear una estructura de metaentidades al estilo Wordpress, pero requerirá más tablas y una programación más elaborada.
Es un tema para analizar con cuidado, yo te sugiero que si estás comenzando, vayas a lo ortodoxo.
- Este último problema también afecta a Voto, porque si votas por entidades distintas (Articulos y Posts), necesitarás una tabla de votos separada para cada uno, o bien una estructura dinámica que soporte el conjunto (otra vez metaentidades).
- Todas las tablas tienen mal definidas las PK. Completamente...

En esencia: Tienes que volver a los manuales y apuntes, y empezar de cero de nuevo. El modelo no sirve como está planteado.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)