Quiero crear dos tablas una con los comentarios y otra con las respuestas, con una relación de uno a varios entre ellos. Pero lo que si se puede también responder a las respuestas, ¿cómo debe ser cambiado entonces? Esto es lo que tengo para el uno a muchos, pero no sé cómo debería ser si no también pueden ser respuestas para una respuesta.

    Comments:
   Id
   Title
   Text

    Replies:
   Id
   Title
   Text
   Comment id

Gracias de antemano.

  • El diseño está normalizado, usted debe seguir adelante con ella. Usted debe tener un id de usuario que será el creater de identificación en tanto las tablas. En segundo lugar, la Respuesta la Respuesta es lógica Escenario, la aplicación de la misma es como Que tiene un estado en el que la gente responde
  • Id de usuario? Dónde está el «Usuario» hace referencia?
InformationsquelleAutor grasshopper | 2012-11-21

1 Comentario

  1. 13

    Sólo podría utilizar una tabla, que incluye un ParentID campo. Si el registro no tiene ningún valor, es un comentario, de lo contrario, se trata de una respuesta (ya sea en un comentario o una respuesta).

    Puede consultar el registro de la ParentID registro (inspeccionar es ParentID) a ver si esta respuesta es un comentario o una respuesta.

    Editar: El de arriba es bastante una solución práctica. Sin embargo, para ir con una versión normalizada, todavía mantengo el Comentario de la tabla (sin ParentID), y crear un ReplyTo mesa que tiene un CommentID, y un ResponseID, ambos de los cuales son los Identificadores de los registros en los Comentarios de la tabla.

    Utilizando esta idea, el siguiente sql se muestran los comentarios y la ‘respuesta’ a cada comentario para cada respuesta que tiene un comentario:

    select c.comment, r.comment as reply
    from comment as c, comment as r, replyto as rt
    where c.ID = rt.CommentID
    and r.ID = rt.ReplyID

    Como Dimitrii señala, no voy a mostrar los comentarios sin respuestas – para esto se necesita una combinación externa consulta (no de prueba de sintaxis):

    SELECT c.comment, r.comment as reply,
    from Comment c 
      left outer join Comment r on c.id = r.id  
      left outer join replyto rt on rt.responseid = r.id
    • Él puede, pero su diseño es más normalizado…
    • Yo estaría de acuerdo con mcalex. División de más de 2 tablas parece innecesariamente complejas sin ningún beneficio. Si hay un caso de dividir a través de varias tablas para la normalización de la razón, entonces tiene una tabla de hilos y, a continuación, una tabla de comentarios (tanto el original de comentarios y respuestas). Sin embargo realiza normalmente se requerirá de llamadas recursivas a la base de datos para obtener respuestas, a continuación, las respuestas a las respuestas, etc. Se podría realizar con el conjunto anidado modelo.
    • gracias alex, yo creo que ambas soluciones funcionan bien, pero en su experiencia, ¿cuál crees que va a proporcionar un mejor rendimiento en general?
    • un gran ‘depende’. Las bases de datos de la que trabajo normalmente no está trabajando al límite de sus capacidades, por lo tanto no estoy tan preocupado acerca de tener una columna con valores null. Yo sugeriría la normalizado enfoque permitiría un mejor rendimiento en un clavado de la base de datos, pero la 1 de la tabla enfoque sería más fácil trabajar con otra cosa 🙂
    • La consulta anterior no funciona para comentarios sin respuestas.
    • a mí me funciona, y he añadido esto al final de la consulta para la clasificación de los comentarios – ORDER BY c.created_at DESC, rt.created_at DESC;

Dejar respuesta

Please enter your comment!
Please enter your name here