sql >> Base de Datos >  >> RDS >> Database

Agregar funciones más avanzadas, como administrar categorías y votar en hilos y publicaciones

En mi segundo artículo sobre un foro en línea, mencioné que podrían agregarse varias características más avanzadas:

  • Foro categorías y subcategorías donde cada categoría tiene un tema, varios moderadores e información adicional como la fecha de creación de la categoría.
  • Una publicación podría tener un asunto además del contenido.
  • Es posible que queramos permitir que los usuarios voten a favor y vote negativo en hilos y publicaciones.

Para poder comprender el modelo más fácilmente, hemos preparado un ejemplo de un foro de este tipo con categorías, hilos, publicaciones, etc. Esperamos que esto facilite la comprensión de las cosas:

Las entidades de la Parte 1 están coloreadas en amarillo y las entidades de la Parte 2 están coloreadas en naranja. Aquí está el modelo de base de datos actual después de los dos primeros artículos:




Más detalles sobre las publicaciones

En el segundo artículo, solo agregué relaciones al "estado" para hilos y publicaciones, pero ahora me gustaría mejorar las publicaciones con un detalle adicional más allá del simple contenido. Por ahora, agregaré un "asunto" para cada publicación que podría ser diferente del "asunto" del hilo. Con el "asunto" (piense en la línea de asunto de un correo electrónico o el asunto de un mensaje MMS), podemos mostrar una versión resumida del contenido, como las primeras líneas de un correo electrónico que se muestra en Outlook o en la pantalla de su teléfono. correo. Además, los usuarios pueden usar el "asunto" de una publicación para registrar un comentario de alto nivel como "No estoy de acuerdo" y luego poner sus argumentos en la sección de comentarios de la publicación. Este es un buen cambio simple al modelo.

Categorías

Ahora que nos hemos calentado, agreguemos un nuevo concepto (entidad) para la categorización de hilos y publicaciones. Cada categoría se definirá con un nombre; cada categoría es creada por un usuario y tendrá al menos un moderador entre los usuarios, además de algunos otros atributos como las publicaciones y los hilos que ya tenemos. Nos gustarían categorías y subcategorías, por lo que permitiremos que las categorías se refieran a otras (sub) categorías.

Como me gustaría tener múltiples moderadores en cada categoría, crearé una tabla para vincular categorías a grupos de usuarios y vincular usuarios a esos grupos. Esta tabla definirá "grupos" de usuarios, uno de los cuales será "moderadores", pero en el futuro, esto podría ampliarse para otros tipos de grupos.

Votación o "Me gusta"

Personalmente, prefiero "votar a favor" o "votar en contra" en algo en lugar de simplemente "me gusta" (pero supongo que Mark Zuckerberg no está de acuerdo conmigo en eso). Elegiré crear un mecanismo de votación que permita a los usuarios emitir un "voto a favor" o un "voto en contra". Podríamos optar por rechazar los votos negativos cuando no haya votos positivos, o limitar el número de votos negativos, pero eso depende de la decisión de la aplicación, la base de datos simplemente realizará un seguimiento del recuento de votos positivos y negativos.

Podríamos crear tablas separadas para votos en hilos y votos en publicaciones, pero las mantendré en la misma tabla con claves foráneas opcionales de la tabla de hilos y publicaciones. Además, elijo no tener votaciones en categorías.

Diseño formal

Por ahora, eso concluye los cambios en el modelo, por lo que podemos ver el diseño formal. Nuevamente, ampliamos el ERD que se creó en las Partes 1 y 2. Los cambios descritos en este artículo e introducidos en el modelo están coloreados en azul.




Conclusión

Todavía hay mejoras adicionales que podrían realizarse, pero aquí hemos convertido nuestra base de datos para un foro en línea en un diseño bastante completo; esto admitiría la mayoría de los foros de discusión en línea típicos.

¿Qué otras funciones requiere su foro en línea?

« Parte anterior