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

Hacer un modelo más avanzado con estados de usuario, hilo y publicación

En mi primer artículo sobre un foro en línea, mencioné que podría haber varias características más avanzadas para agregar:

  • Más detalles formales sobre el usuario en lugar de un solo campo de "nombre". Es posible que desee el nombre, apellido y nombre de usuario o apodo del usuario. Un buen foro también permitiría a los usuarios tener una foto de perfil, correo electrónico, roles, estado (para permitir que los usuarios sean bloqueados) y otra información como cuándo visitaron el foro por última vez.
  • Control adicional relacionado con la creación de usuarios para que podamos rastrear cuándo se crea un nuevo usuario pero antes de que se haya confirmado su dirección de correo electrónico.
  • 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. Un asunto para una publicación además del contenido
  • Publicaciones moderadas que deben ser aprobados por un moderador antes de que sean visibles para otros usuarios. Las publicaciones y los hilos tendrían diferentes estados como:en espera de publicación, publicado, informado como spam, bloqueado, desbloqueado.
  • Y luego podríamos querer permitir que los usuarios voten a favor y vote negativo hilos y publicaciones.

Para el foro, usaré el término "subproceso" para referirme a una conversación con potencialmente varias publicaciones relacionadas con el subproceso.




Haré un comentario de apertura; Generalmente uso números redondos como 100 o 1000 para definir la longitud de los campos varchar; No estoy sugiriendo que estos sean necesariamente del tamaño apropiado, pero estoy usando esto como abreviatura, en lugar de dejar la longitud sin definir (%). Por otro lado, ocasionalmente uso longitudes muy específicas para campos como email y ip_address; 254 es la longitud máxima que puede tener una dirección de correo electrónico según las definiciones de RFC, mientras que 45 es la longitud máxima que puede tener una dirección IPv6.

Detalles del usuario

En la Parte 1 de nuestra serie de artículos sobre la creación del foro en línea, la información del usuario era muy limitada. Mejoraré los detalles de usuario que están almacenados. Por ahora, la moderación será muy básica:los usuarios podrán ser moderadores o no. Podríamos crear reglas de moderación más complicadas relacionadas con categorías e hilos más adelante.

Para el estado de los usuarios, crearé el user_status para poder reutilizarla en otra situación, incluso si hay muy pocos estados, como "EMAIL_NOT_VERIFIED", "VERIFIED" y "BLOCKED".

Creación de usuarios

Usaré el estado del usuario para reconocer a los usuarios que están en el estado "EMAIL_NOT_VERIFIED" después de que un usuario haya creado su cuenta y se haya enviado un correo electrónico a su dirección de correo electrónico proporcionada, pero antes de que hayan hecho clic en la URL de verificación en el correo electrónico. Incluso podría volverse más complicado y tener estados como "EMAIL_VERIFICATION_TO_BE_SENT" y "EMAIL_VERIFICATION_RESENT" si algunos de estos pasos son manejados por diferentes componentes en su sistema y no inmediatamente durante la creación del usuario.

Estados de hilos y publicaciones

Las publicaciones moderadas deben ser aprobadas por un moderador antes de que sean visibles para otros usuarios. Las publicaciones y los hilos tendrían diferentes estados como:esperando aprobación, aprobado, reportado como spam, bloqueado. Para el estado de los hilos y las publicaciones, elegiré una forma más flexible de manejar los estados vinculando al status mesa. Luego, la aplicación debe saber qué significa cada valor dentro de las tablas de estado (si el estado ="APROBADO", se muestra el hilo), pero prefiero esto a solo almacenar un texto en el thread y post mesas. Tendremos algunos estados, como "ESPERANDO_PARA_APROBACIÓN", "APROBADO", "RECHAZADO", "REPORTADO_COMO_SPAM" y "BLOQUEADO", y es posible que queramos agregar más en el futuro.

En otras palabras, un usuario crea un nuevo hilo o una nueva publicación, y se pone en estado "NO_APROBADO". Los hilos y publicaciones no aprobados no se muestran a la mayoría de los usuarios; sin embargo, los moderadores pueden ver los elementos no aprobados y elegir "Aprobar" o "Rechazar". Los usuarios pueden marcar un hilo o una publicación como spam, pero eso debe ser confirmado por un moderador. Los hilos y las publicaciones de spam no se muestran a los usuarios.

Esto me permite usar el status tabla tanto para hilos como para publicaciones, ya que los estados de ambos deben tener el mismo significado. No haré mal uso del status tabla para indicar el estado de los usuarios; No creo que sea una buena elección de diseño.

Diseño formal

Por lo tanto, ampliamos el ERD que se creó en la Parte 1. He coloreado las tablas que se crearon en el artículo de la Parte 1 en amarillo y coloreé las tablas recién agregadas en naranja para que sea más fácil ver las adiciones. Sin embargo, no he marcado cambios individuales dentro de las tablas.



¿Qué sigue?

Una vez más, todavía hay mejoras adicionales por hacer, pero aquí hemos tomado un foro en línea muy simple y hemos agregado varias características nuevas y útiles.

En las próximas partes, buscaré agregar otras características como:

  • 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. Un tema para una publicación además del contenido
  • y luego podríamos querer permitir que los usuarios voten a favor y en contra de hilos y publicaciones.

¿Qué características requiere su foro en línea? ¿Hay alguna característica que quieras que tenga en cuenta al preparar la próxima parte de esta serie? Si es así, házmelo saber.

« Parte anterior Siguiente parte »