Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Necesito consejos sobre como guardar datos en unas BD

Estas en el tema de Necesito consejos sobre como guardar datos en unas BD en el foro de PHP en Foros del Web. Hola, Estoy trabajando en un proyecto y me han surgido unas dudas, la web en la que trabajo tiene casi la misma funcionalidad que una ...
  #1 (permalink)  
Antiguo 02/01/2015, 09:54
 
Fecha de Ingreso: enero-2015
Ubicación: Cordoba, Andalucía
Mensajes: 111
Antigüedad: 9 años, 3 meses
Puntos: 15
Necesito consejos sobre como guardar datos en unas BD

Hola,
Estoy trabajando en un proyecto y me han surgido unas dudas, la web en la que trabajo tiene casi la misma funcionalidad que una red social, un usuario sube una publicación y sólo sus amistades pueden verla.

La web esta aun en desarroyo y por ahora estoy guardando los datos de las publicaciones en una tabla. Cada usuario tiene una tabla y en ella se guardan sus publicaciones.

Para ver el muro de la web, utilizando esta manera, tendría que hacer una consulta a multiples tablas, lo cual no se si es un proceso lento...

¿Que consejos me daís?
¿Como puedo guardar las publicaciones para mostrarlas en una consulta lo más eficaz posible?

Un compañero me ha dicho que guarde todas las publicaciones de todos los usuarios en una sola tabla y que las identifique con una id al usuario, ¿és esto eficaz?

Muchas gracias por su atención y su ayuda porque la necesito de verdad.
Un saludo.
  #2 (permalink)  
Antiguo 02/01/2015, 10:55
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Necesito consejos sobre como guardar datos en unas BD

Cita:
La web esta aun en desarroyo y por ahora estoy guardando los datos de las publicaciones en una tabla. Cada usuario tiene una tabla y en ella se guardan sus publicaciones.

Para ver el muro de la web, utilizando esta manera, tendría que hacer una consulta a multiples tablas, lo cual no se si es un proceso lento...

¿Que consejos me daís?
Y... por lo pronto, allí ya estás metiendo la pata a lo grande...

Nunca, jamás, se usan tablas exclusivas para cada usuario. El sistema se volvería inmanejable, en especial para una red social con miles de usuarios.
Es UNA tabla para los mensajes.

Lo que quieres saber ya está diseñado infinitas veces, y sólo tienes que bsucar en el sitio adecuado.

Por ejemplo:



Fuente: Database Aswers
__________________
¿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 02/01/2015, 13:11
 
Fecha de Ingreso: enero-2015
Ubicación: Cordoba, Andalucía
Mensajes: 111
Antigüedad: 9 años, 3 meses
Puntos: 15
Respuesta: Necesito consejos sobre como guardar datos en unas BD

Gracias por tu respuesta.

Estoy mirando un tutorial sobre éstos esquemas de Base de Datos, para entenderlo bien.

Es lo que necesitaba. Gracias por tu tiempo gnzsoloyo.
  #4 (permalink)  
Antiguo 04/01/2015, 00:18
 
Fecha de Ingreso: enero-2015
Ubicación: Cordoba, Andalucía
Mensajes: 111
Antigüedad: 9 años, 3 meses
Puntos: 15
Respuesta: Necesito consejos sobre como guardar datos en unas BD

Cita:
Iniciado por gnzsoloyo Ver Mensaje

Nunca, jamás, se usan tablas exclusivas para cada usuario. El sistema se volvería inmanejable, en especial para una red social con miles de usuarios.
[/B]
Ahora entiendo que no puedes hacer una tabla para cada usuario. He estado mirando el tutorial que ofrece la página oficial de donde se sacó la imagen del esquema.

Entiendo que hay una tabla para las publicaciones relacionada con la tabla de contactos, donde la publicación mantiene la id del usuario y es así como la buscaría en una consulta. Así mismo ocurre con el resto de las tablas (perfil, fotos y demás). Cierto?

Lo que no capto és... como creo una relación con las publicaciones de mis amistades. Lo que se me ocurre es hacer una tabla donde guardar las id de mis amistades, pero entonces ya estoy otra vez metiendo la pata, porque debería hacer una tabla a cada usuario.

Si dos usuarios son amistad donde guardo esté dato?
  #5 (permalink)  
Antiguo 04/01/2015, 02:09
 
Fecha de Ingreso: septiembre-2008
Mensajes: 38
Antigüedad: 15 años, 7 meses
Puntos: 2
Sólo haz una tabla donde guardes el id de la persona y el id de la amistad...
Es una Relación N:N de persona-amistad ... Los 2 campos id son foráneos.... Éxito con ello.
Tabla x
Persona 1, amistad 1
Persona 1, amistad 2
Persona 1, amistad 3
Persona 2, amistad 1
Persona 3, amistad 2
Etc .
  #6 (permalink)  
Antiguo 04/01/2015, 11:04
 
Fecha de Ingreso: enero-2015
Ubicación: Cordoba, Andalucía
Mensajes: 111
Antigüedad: 9 años, 3 meses
Puntos: 15
Respuesta: Necesito consejos sobre como guardar datos en unas BD

Hola de nuevo y gracias por tu respuesta YorchX, ya se me va metiendo en la cabeza esto de trabajar con las id.

Ahora tengo un problema con los INSERT,

tengo dos tablas relacionadas por el campo id:

USUARIOS (tabla padre)
id (INT) PK y AI
correo (VARCHAR)

PERFIL
id (INT) PF
nombre (VARCHAR)

(tiene mas campos pero es un ensayo)

Si quito la relación las sentencias funcionan perfectamente y cuando existe la relación solo me inserta el dato en la tabla padre.

$sentencia = $mysqli->prepare("INSERT INTO usuarios(correo) VALUES (?)"); $sentencia->bind_param('s', $correo);
$sentencia->execute();
$sentencia->close();


$sentencia2 = $mysqli->prepare("INSERT INTO perfil(nombre) VALUES (?)");
$sentencia2->bind_param('s', $nombres);
$sentencia2->execute();
$sentencia2->close();

Bueno y no sé por qué porque yo nunca he trabajado con tablas relacionadas.
  #7 (permalink)  
Antiguo 04/01/2015, 11:12
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Necesito consejos sobre como guardar datos en unas BD

1) Insertas el nuevo usuario.
2) Con el mismo objeto que ejecutó el INSERT, recuperas el ID autogenerado con $mysqli->insert_id
3) Envías ese id obtenido como ID de la segunda tabla.

Siempre, siempre, SIEMPRE, el orden de las ejecuciones de inserciones entre tablas relacionadas deben respetar las relaciones Padre/Hijo. Y para borrarlas, se hace exactamente al revés.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #8 (permalink)  
Antiguo 05/01/2015, 14:32
 
Fecha de Ingreso: enero-2015
Ubicación: Cordoba, Andalucía
Mensajes: 111
Antigüedad: 9 años, 3 meses
Puntos: 15
Respuesta: Necesito consejos sobre como guardar datos en unas BD

Por favor está bien ejecutada esta consulta?

TABLA (usuarios)
ID CORREO
1 [email protected]

TABLA (perfil)
ID NOMBRE
1 mi_nombre

Las tablas estan relacionadas por id, supongamos que conozco el campo correo (no es clave primaria pero si campo unico) de la tabla usuario pero desconozco aún su id.

"SELECT nombre FROM perfil INNER JOIN usuarios on correo=?"

He compraobado esta consulta y me funciona correctamente, pero como siempre hay una manera mejor de hacer las cosas...

Gracias por la atención.
  #9 (permalink)  
Antiguo 05/01/2015, 14:46
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Necesito consejos sobre como guardar datos en unas BD

Código SQL:
Ver original
  1. SELECT U.*
  2. FROM perfil P INNER JOIN usuarios U ON P.id = U.id
  3. WHERE U.correo = '[email protected]'

Que no conozcas su ID es irrelevante, en tanto la base pueda relacioanrlos y ambos registros existan.
No confundas lo que TU sabes, con lo que la base TIENE como datos.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #10 (permalink)  
Antiguo 05/01/2015, 15:37
 
Fecha de Ingreso: enero-2015
Ubicación: Cordoba, Andalucía
Mensajes: 111
Antigüedad: 9 años, 3 meses
Puntos: 15
Respuesta: Necesito consejos sobre como guardar datos en unas BD

Una última pregunta por hoy, ya me sabe mal preguntar tanto...

Tengo unas tablas para manejar el sistema.
-AUTOCOMPLETADOS tabla que guarda y eseña datos mediante jquery en un campo de un form
-INTENTOS_IP tabla que guarda la ip del usuario para controlar los intentos de hacer login.
-CORREOS es una tabla que controla los correos que he enviado a los usuarios porque a veces para que no hagan un abuso del servicio lo tengo limitado.
-TRABAJO es una tabla que hace un check login para que no roben la sesión.
y alguna que otra más.

Mi pregunta és que por motivos de organización crearia una base de datos exclusiva para estas tablas y otra base de datos para manejar los usuarios. Pero lo más importante es la optimización en consultas y rapidez, tampoco me supondría un gran desorden poner todas las tablas en una misma base de datos, pero sería mucho más comodo con dos bases.

Que opinas?

Gracias de nuevo.
  #11 (permalink)  
Antiguo 05/01/2015, 16:10
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Necesito consejos sobre como guardar datos en unas BD

Todas en la misma base...
Una base se crea no para distribuir tablas, sino porque concentran los datos de subsistemas definidos.
Una base de administración de Clientes puede ser independiente de la base de Ventas, aunque se usen sus datos, porque la de Ventas apunta al subsistema Comercial, mientras que el manejo de Clientes es administrativo, lo mismo que la base de empleados. En estos casos la base de Ventas consulta a Clientes, pero los ABM de Clientes son responsabilidad exclusiva de otro departamento, por lo que la división en esquemas permite poner restricciones a nivel de usuario para acceder a ellas.

¿Se entiende?

Ahora bien, cuando el sistema integra las áreas con gran acoplamiento, todas las tablas van en la misma base, como en tu caso.
Yo trabajo en una empresa con más de 50 esquemas de BBDD, y sólo el esquema de ventas posee 660 tablas. Y no son muchas para el negocio...
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #12 (permalink)  
Antiguo 15/01/2015, 01:11
 
Fecha de Ingreso: enero-2015
Ubicación: Cordoba, Andalucía
Mensajes: 111
Antigüedad: 9 años, 3 meses
Puntos: 15
Respuesta: Necesito consejos sobre como guardar datos en unas BD

Buenas,

He estado aprendiendo a hacer consultas múltiples (multi_query), creo haber leído en alguna respuesta de gnzsoloyo que a veces tarda más tiempo la conexión mysqli que la consulta que se va ha realizar, y a raíz de ahí me propuse cambiar un poco la forma de hacer las cosas.

Mi pregunta es: ¿merece la pena hacer consultas multiples?
¿o es preferible hacer una sola consulta para cada tabla?

Luego me gustaría que me dijerais si hay una forma mejor de hacer la siguiente consulta multiple:


$consulta = "SELECT id, ruta FROM img WHERE id_foto=$dato;";
$consulta .= "SELECT ruta FROM img WHERE id =$dato2";


$mysqli->multi_query($consulta);
$resultado = $mysqli->store_result();
$row = $resultado->fetch_row();
echo $row[0];
echo $row[1];
$resultado->free();
$mysqli->more_results();
$mysqli->next_result();
$resultado = $mysqli->store_result();
$row=$resultado->fetch_row();
echo $row[0];
$mysqli->close();

Bueno y no me canso de dar las gracias por esta gran ayuda incondicional y altruista especialmente a gnzsoloyo.

Última edición por MrGilbertMan; 15/01/2015 a las 01:18

Etiquetas: bd, consejos, tabla, usuarios
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




La zona horaria es GMT -6. Ahora son las 22:35.