Tablas:
Perfil: ID, Nombre, mail, descripción, puntos.
Perfil_Posts: ID, fecha, FK(foreign key) Posts_Tema.
Posts_Tema: ID, fecha, texto, Votos Positivos, Votos Negativos, FK Votos_Post, FK Respuesta_Post.
Votos_Post: ID, fecha, tipo de Voto (+1,-1), FK Perfil.
Tema: ID, nombre, fecha_creación, descripción, activo, FK Posts_Tema.
Respuestas_Post: fecha, texto, FK Perfil, FK Votos_Respuesta
Votos_Respuesta: ID, fecha, tipo de Voto, FK Perfil.
Entonces,
- Creo una tabla Perfil_Posts para no estar haciendo un Query largo cada vez que necesite encontrar los Posts hechos por el Usuario.
- Cada Tema tiene su tabla Posts_Tema para poder hacer querys más rápidos (otra opción sería una sola tabla Post con posts que tengan FK Tema?, pero creo que sería lento manejar una tabla con todos los Posts del sitio web..)
- Cada Post tiene relación con una tabla Votos_Post que contiene los votos que ha recibido el post como +1 o -1: asi cuando necesito el puntaje total del post hago un query SUM.
- Cada Post tiene relación con una tabla Respuestas_Post y ésta a su vez tiene una tabla Votos_Respuesta que contiene los votos que ha obtenido la respuesta al Post.
- Guardo la cantidad de Votos Positivos y Votos Negativos en la tabla Post porque tal vez sea muy lento hacer una query a la tabla Votos_Posts que busque y cuente todos los votos con "1" o "-1" cada vez que necesite encontrar la cantidad de votos positivos de un Post.
Primero, quisiera saber su opinión pues estoy seguro que tienen más experiencia con bases de datos que yo.
Segundo, tengo una duda específica: ¿Cómo me aseguro que un usuario solo vote una vez por cada Post/Respuesta?. Mi idea es revisar si ya existe el ID del usuario guardado en la columna FK_Perfil de las tablas Votos_Post y Votos_Respuesta. Pero luego surge el problema de si un usuario ya voto positivo pero quiere cambiar su voto a negativo... tengo algunas ideas pero no sé si sean lo mejor.
![Confundido](http://static.forosdelweb.com/fdwtheme/images/smilies/confused.png)
Como está la base de datos, cada vez que se crea un Post o una Respuesta, se crean dos tablas: la tabla Post_Tema y la tabla Votos_Post o la tabla Respuesta_Post y la tabla Votos_Respuesta. ¿Esto es correcto?.
De antemano, muchas gracias por cualquier sugerencia. Saludos