Haría eso haciendo una tabla de referencia cruzada.
Ejemplo:
Tabla: Mensajes
Columns: pstkey | userid | postMessage | etc...
pstkey es la clave para el cuerpo de correos. ID de usuario es la persona que creó la publicación. postMessage es la entrada de entrada real.
Tabla: Comentarios
Columns: comkey | pstkey | userid | commentMessage | etc...
comkey es la clave de los comentarios realizados. referenciado a la publicación usando la clave pst. ID de usuario es la persona que hizo el comentario. y luego commentMessage es el cuerpo del texto del comentario real.
Tabla: xref_postComm
Columns: xrefkey | pstkey | comkey | comkey2 |
Ahora viene la parte divertida. TODAS las publicaciones entran en la tabla de publicaciones. TODOS los comentarios entran en la tabla de comentarios. Las relaciones están todas definidas en la tabla de referencia cruzada.
Realizo toda mi programación de esta manera. Tuve el privilegio de trabajar con uno de los mejores ingenieros de bases de datos del mundo que se retiró y me enseñó algunos trucos.
Cómo utilizar la tabla de referencias cruzadas:
xrefkey | pstkey | comkey | comkey2
All that you look for is the population of a given field.
xref (Auto Incremented)
pstkey (Contains the pstkey for the post)
comkey (Contains the comkey for the comment post)
comkey2 (Contains the comkey for the comment post)
(but only populate comkey2 if comkey already has a value)
and of course you populate comkey2 with the key of the comment.
SEE, no reason for a 3rd tabel!
With this method you can add as many relationships as you want.
Now or in the future!
comkey2 es su respuesta a una respuesta. Donde esta sola fila contiene ... la clave de la publicación, la clave del comentario y la clave de la respuesta al comentario de la respuesta. Todo hecho por población de xref.
EXAMPLE:
PAGES.... Page table
POSTS
pstkey | pageid | user| Post
-------------------------------------
| 1 | 1 | 45 | Went to the store the....|
| 2 | 2 | 18 | Saw an apple on tv.....
COMMENTS
comkey | pstkey | user | Comment
-----------------------------------------------
| 1 | 1 | 9 | Wanted to say thanks...
| 2 | 1 | 7 | Cool I like tha.....
| 3 | 2 | 3 | Great seeing ya....
| 4 | 2 | 6 | Had a great....
| 5 | 2 | 2 | Don't sweat it man...
xref_PostCom
xrefkey | pageid | pstkey | comkey | comkey2 |
----------------------------------------------
| 1 | 1 | 1 | NULL | NULL | Post1 on Page1
| 2 | 1 | 1 | 1 | NULL | Comment1 under Post1
| 3 | 1 | 1 | 2 | NULL | Comment2 under Post1
| 4 | 2 | 2 | NULL | NULL | Post2 on Page2
| 5 | 2 | 2 | 3 | NULL | Comment3 under Post2 on Page2
| 6 | 2 | 2 | 4 | NULL | Comment4 under Post2 on Page2 (a second Comment)
| 7 | 2 | 2 | 4 | 5 | Explained below....
Comment key 5 is matched with comment key 4....under post2 on Page 2
Si sabe nada acerca de unirse a, unirse a la izquierda, se unen a la derecha,/exterior combinación interna creación de SELECT para obtener los arreglos de datos utilizando estas relaciones, su trabajo se vuelve mucho más fácil.
Creo que el ingeniero lo llama básicamente "el mapa de datos" de las relaciones definidas. El truco ahora es cómo acceder a ellos utilizando estas relaciones. Se ve difícil al principio, pero sé lo que sé, me niego a hacerlo de otra manera.
Lo que ocurre al final es que terminas escribiendo 1 script que dice, vale, ve a hacer todo, y vuelve. Finalizará con una llamada de función que solicita la página 1. Devuelve con la página 1, publicación 1, comentario1 3 y las respuestas a la respuesta en 1 matriz. echo para salida y hecho.
ACTUALIZACIÓN PARA EL COMENTARIO Dije lo mismo la primera vez que me lo mostraron. De hecho, realmente me estaba enojando que el programador de bases de datos me obligara a hacerlo de esta manera. Pero ahora lo entiendo Las ventajas son muchas.
Ventaja 1) Se puede escribir 1 consulta para sacarlo todo en 1 foto.
2) Las respuestas en múltiples consultas pueden rellenar matrices en una estructura que al imprimir la página, un bucle en un bucle puede mostrar la página.
3) La actualización de su software que lo usa puede soportar cualquier posible cambio de diseño que pueda imaginarse. Capacidad de expansión impecable.
El tipo que me lo enseñó fue el arma contratada que rediseñó las bases de datos sears y jcpenny. Cuando tienen 9 libros yendo a la misma casa debido a problemas con los registros duplicados.
Las tablas de referencia cruzada previenen muchos problemas en el diseño.
El corazón de esta teoría es que una columna no solo puede contener datos sino que también sirve como una declaración verdadera o falsa al mismo tiempo. Eso en sí mismo ahorra espacio. ¿Por qué buscar 20 tablas cuando puedes buscar una? Una tabla de referencia cruzada indexada le puede decir todo lo que necesita saber sobre las otras 20 tablas, su contenido, lo que necesita, lo que no necesita e incluso necesita abrir la otra tabla.
EN CORTO: 1 Referencia cruzada que contiene nada más que INT (2/11) que te dice todo lo que necesita saber antes de que usted abra otra mesa, no sólo contiene la capacidad de expansión sin defectos, pero los resultados de velocidad de iluminación. Sin mencionar la poca posibilidad de registros duplicados. Para usted y para mí, los registros duplicados pueden no ser un problema. Pero para Sears con 4 mil millones de registros a $ 11 por libro, los errores se suman.
Exactamente: los comentarios son comentarios, sean o no respuestas a otros comentarios. –
Lo siento, soy muy lento. ¡Entiendo! Gracias. Ahora mi pregunta es ¿cómo sangrado las respuestas? ¿Necesitaría saber algún tipo de relación? Tal como esta respuesta es la primera, esta respuesta es la segunda, así que sangría x2, esta respuesta es la tercera, así que identx3 – jpjp
@jpjp: Haría esto en el nivel de la aplicación. Cuando construyes el árbol de comentarios, sabes mucho para sangrarlos. Solo uno más como padre. –