Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General »

Para crear nuevo tema

Estas en el tema de Para crear nuevo tema en el foro de Bases de Datos General en Foros del Web. Hola, como dije en un tema anterior estoy aprendiendo sql y estoi creando un foro desde cero para aprender... y quiero comprobar una suposicion... para ...
  #1 (permalink)  
Antiguo 08/12/2009, 00:16
 
Fecha de Ingreso: febrero-2008
Mensajes: 101
Antigüedad: 16 años, 8 meses
Puntos: 1
Para crear nuevo tema

Hola, como dije en un tema anterior estoy aprendiendo sql y estoi creando un foro desde cero para aprender... y quiero comprobar una suposicion... para crear la tabla donde se crean los temas debo hacerlo incluir estas columnas?

Id_usuario, Fecha de publicacion, titulo, mensaje, Id_mensaje

Porque si es asi me surgen preguntas. Si creo una sola tabla para poner los mensajes ¿como se manejan las respuestas a un mismo tema? es decir ¿como hago para que no se mezclen las respuestas de los temas cuando los va a visualizar un usuario? ¿Se hace eso a traves de consultas? pq crear una tabla para cada tema agrandaria mx la BD...

JOKEROBSCURO
  #2 (permalink)  
Antiguo 08/12/2009, 05:47
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Para crear nuevo tema

Es por eso que no te recomendaría empezar con un foro. Tiene detalles de diseño que para resolverlos mejor necesitas cierta práctica.
Planteemoslo así:
Cita:
- Un usuario postea uno o más mensajes.
- Cada mensaje pertenece a un usuario.
- Un mensaje puede tener una o más respuestas.
- Cada respuesta pertenece a un sólo mensaje.
A nivel de diseño se ven aquí tres tablas diferentes: Usuario, Mensaje, Respuesta.
Mensaje tiene una cardinalidad 1:N con Mensaje, y Mensaje la tiene 1:N con Respuesta.
Eso quiere decir que mensaje tiene una FK que apunta a Usuario, y a su vez Respuesta tiene: una PK que lo identifica a sí mismo y una FK apuntando a Mensaje.

Así sería básicamente, a menos que los mensajes tuviesen categorías, o subforos.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 08/12/2009, 14:05
 
Fecha de Ingreso: febrero-2008
Mensajes: 101
Antigüedad: 16 años, 8 meses
Puntos: 1
Respuesta: Para crear nuevo tema

o sea obviamente tendran categorias y subforos pero lo replanteare pq en eso tenia la duda... tenia dos opciones, la primera hacer varias tablas o hacerlo con una... pero ahi se hacia medio raro ya...

Y hago un foro pq me gusta tirarme de inmediato a la piscina... pq dps todo lo que podria parecerme dificil si empiezo de a poco una vez que he resuelto un proyecto grande ya parece poca cosa

vuelvo a replantearme lo de los temas y mensajes y lo pongo aki... tnxs

JOKEROBSCURO
  #4 (permalink)  
Antiguo 09/12/2009, 00:32
 
Fecha de Ingreso: febrero-2008
Mensajes: 101
Antigüedad: 16 años, 8 meses
Puntos: 1
Respuesta: Para crear nuevo tema

Segun lo que me dijiste gnzsoloyo, hice esto

TABLAS PARA MENSAJES Y TEMAS DE FORO

TABLA USUARIOS: Nick, contraseña, mail, fecha de inscripción, contador de inscripciones >> la tabla usuarios es la misma que se usa en toda la base de datos
________________________________________

LAS OTRAS TABLAS

TABLA SUBFOROS: nombre, permisos, descripcion, imagen <<< cada subforo tendra asignada una tabla temas, o sea hay 3 subforos y existen tres tablas de temas

TABLA TEMAS: titulo, tema, fecha, Nick, valoración, subforo <<< cada tabla temas tendra asignada una tabla respuesta

TABLA RESPUESTAS: Titulo, respuesta, fecha, Nick, valoración autor, subforo
___________________________________________

En cuanto a las relaciones

TABLA USUARIOS: Nick es primary key, es foranean key en todas las otras tablas

TABLA SUBFOROS: Nombre es primary key, es foranean key en todas las otras tablas

TABLA TEMAS: Titulo es primary key, es foranean key en todas las otras tablas

TABLA RESPUESTAS: Respuesta es primary key.

Haber si esa solucion es mas elegante o existe otra mejor


JOKEROBSCURO...
  #5 (permalink)  
Antiguo 09/12/2009, 09:20
 
Fecha de Ingreso: abril-2007
Mensajes: 114
Antigüedad: 17 años, 7 meses
Puntos: 2
Respuesta: Para crear nuevo tema

Más o menos el esquema que has planteado está bien. Simplemente habría que cambiar una cosa. En la tabla "Respuestas" creo que el campo "Subforo" debería ser "tema", ya que en caso contrario no sabrías a qué tema corresponde la respuesta.

Además, no sé que diferencia hay entre los campos "titulo" y "tema" en la tabla "Temas".

Y por último, yo incluiría un campo "id" en todas las tablas como PK (y sería el que usaría en las relaciones), y si quieres asegurarte de que, por ejemplo, no se repitieran los nicks, le pondría un UNIQUE KEY a ese campo.

Espero haberte ayudado algo. Saludos

PD: Si estás empezando te recomiendo no incluir campos como "permisos" o "valoración". Mejor dejarlo para más adelante.
  #6 (permalink)  
Antiguo 09/12/2009, 14:39
 
Fecha de Ingreso: febrero-2008
Mensajes: 101
Antigüedad: 16 años, 8 meses
Puntos: 1
Respuesta: Para crear nuevo tema

Hola Paloto, la diferencia entre TITULO y TEMA es que el titulo es el titulo del texto que representa el tema... o sea por ejm

Titulo: El agua
Tema: el agua es bla bla bla

Cita:
Más o menos el esquema que has planteado está bien. Simplemente habría que cambiar una cosa. En la tabla "Respuestas" creo que el campo "Subforo" debería ser "tema"
Si hago eso, el tema no quedaria duplicado? es decir si pongo

TABLA TEMA

Titulo: el agua
Tema: el agua es bla bla bla

y dps
_________________________
TABLA RESPUESTA

Titulo: respuesta: el agua
Tema: el agua es bla bla bla <<< pq seria necesario duplicar en la tabla respuesta el TEMA?
Respuesta: no, el agua no es eso es bla bla bla
_________________

Yo en cambio le puse subforo pq la respuesta que va a estar unida al TEMA especifico y tambien va a estar unida al subforo del mismo tema, aunque si lo pienso no va a ser tan necesario ya que esta ligada al TEMA que esta unida a ese subforo especifico

Me gusta tu idea del "id" pq puede ser autoincrement lo que me serviria ademas de contar los temas publicados

Cita:
PD: Si estás empezando te recomiendo no incluir campos como "permisos" o "valoración". Mejor dejarlo para más adelante.
En realidad prefiero aprenderlo todo de una vez para dps poder ayudar a resolver problemas tbn o no entramparme en eso si me toca desarrollar algun proyecto de algo, soi de la idea de aprender todo sobre un tema y dps el desarrollo ya que en realidad esto es, dps de leer todo, aprender a pensar como un desarrollador de BD, pero gracias igual por la recomendacion...

JOKEROBSCURO
  #7 (permalink)  
Antiguo 10/12/2009, 03:43
 
Fecha de Ingreso: abril-2007
Mensajes: 114
Antigüedad: 17 años, 7 meses
Puntos: 2
Respuesta: Para crear nuevo tema

Ok. Vamos a aclarar primero el asunto de los "Temas" y las "Respuestas", y para ello vamos a basarnos el tema actual de Foros Del Web en el que nos encontramos.

Vamos a pasar por alto que en Foros del Web existen varios niveles de subforos. Así, por ejemplo, ahora mismo nos encontraríamos en el subforo "Bases de Datos", por lo tanto ese registro lo veríamos así:

TABLA SUBFOROS
ID: 1
NOMBRE: Bases de Datos

Este "tema" se llamaría (valga la redundancia) "Para crear nuevo tema" y su registro en la tabla "Temas" sería así:

TABLA TEMAS
ID: 1
TITULO: "Para crear nuevo tema"
SUBFORO: 1 (id del subforo "Bases de datos")
TEMA: * El tema sería el contenido de tu primer mensaje.

Y cada una de las respuestas dentro de este tema se encontrarían en la tabla "RESPUESTAS" en la que los registros serían:

TABLA RESPUESTAS
ID: (el id que corresponda)
TITULO: (el título que corresponda)
RESPUESTA: (la respuesta del usuario)
TEMA: (id del tema al que pertenece la respuesta en este caso 1)
* además de fecha, usuario, etc.

De esta forma, cada respuesta sabrás a qué tema pertenece, y cada tema sabrás a qué subforo pertenece, para tenerlo todo perfectamente estructurado.

Por otro lado, comentarte que el autoincrement no vale para contar cuantos registros tienes, pues en caso de que se borre algún mensaje, este dato será erroneo, por el contrario siempre puedes hacer una consulta con un COUNT() para obtener este dato. El tener este campo "id" te vale para varias cosas, pero la más importante es que tus consultas serán más rápidas si accedes a los registros a través de su id.

Y por último, cuando te recomiendo dejar de lado en principio el tema de los permisos y las valoraciones, no me refiero a que no lo hagas. Me refiero a que en principio te centres a la parte básica del foro, a hacer que funcione el sistema de respuestas y temas, y cuando este funcione correctamente te pongas con los permisos y las valoraciones. No te lo digo para que "aprendas" más, si no porque es el proceso lógico que suele seguir cualquier programador web. Primero se construye la base y las funciones básicas, y luego se implementa las funcionalidades extras.

Espero haber sido lo suficientemente claro en mi explicación, si no es así, avísame que lo intento hacer mejor :)

Un saludo

Última edición por paloto; 10/12/2009 a las 03:51
  #8 (permalink)  
Antiguo 10/12/2009, 19:20
 
Fecha de Ingreso: febrero-2008
Mensajes: 101
Antigüedad: 16 años, 8 meses
Puntos: 1
Respuesta: Para crear nuevo tema

Cita:
TABLA SUBFOROS
ID: 1
NOMBRE: Bases de Datos
Solo tengo una duda... poniendo en la columna "bases de datos" te refieres a que cada nombre de un subforo tendra su propia base de datos o sea que

SUBFORO 1

TABLA TEMAS
ID: 1
TITULO: "Para crear nuevo tema"
SUBFORO: 1 (id del subforo "Bases de datos")
TEMA: * El tema sería el contenido de tu primer mensaje.

TABLA RESPUESTAS
ID: (el id que corresponda)
TITULO: (el título que corresponda)
RESPUESTA: (la respuesta del usuario)
TEMA: (id del tema al que pertenece la respuesta en este caso 1)
* además de fecha, usuario, etc.

____________________________

SUBFORO 2

TABLA TEMAS
ID: 1
TITULO: "Para crear nuevo tema"
SUBFORO: 1 (id del subforo "Bases de datos")
TEMA: * El tema sería el contenido de tu primer mensaje.

TABLA RESPUESTAS
ID: (el id que corresponda)
TITULO: (el título que corresponda)
RESPUESTA: (la respuesta del usuario)
TEMA: (id del tema al que pertenece la respuesta en este caso 1)
* además de fecha, usuario, etc.


Entonces la tabla SUBFORO contendria

TABLA SUBFOROS
ID: 1, 2
NOMBRE: SUBFORO 1, SUBFORO 2

Solo esa duda tengo

JOKEROBSCURO...
  #9 (permalink)  
Antiguo 11/12/2009, 02:02
 
Fecha de Ingreso: abril-2007
Mensajes: 114
Antigüedad: 17 años, 7 meses
Puntos: 2
Respuesta: Para crear nuevo tema

Jajaja. No. Puse "Bases de Datos" por que es el nombre del subforo en el ejemplo que puse de Foros del Web. En la tabla Subforos tienen que estar todos los subforos que tengas, por ejemplo, en un foro de temática futbolera sería: Selecciones, Ligas internacionales, Champions League, Europa Cup, Liga BBVA, Liga Adelante, Segunda B, etc.; en una temática sobre programación sería: Bases de datos, Java, PHP, .NET, javascript, C, C++, etc.

Un saludo
  #10 (permalink)  
Antiguo 11/12/2009, 02:04
 
Fecha de Ingreso: febrero-2008
Mensajes: 101
Antigüedad: 16 años, 8 meses
Puntos: 1
Respuesta: Para crear nuevo tema

ah okas, igual el nombre era algo confuso xD... tnxs por la aclaracion

JOKEROBSCURO...
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 15:36.