Foros del Web » Programando para Internet » PHP »

Base de datos con datos repetidos

Estas en el tema de Base de datos con datos repetidos en el foro de PHP en Foros del Web. Bueno, quiero hacer un foro, y me nace esta pregunta: 1. Que s ma socnveneinte para una base de datos MySQL operada con PHP, que ...
  #1 (permalink)  
Antiguo 20/12/2005, 17:37
Avatar de mafima  
Fecha de Ingreso: abril-2003
Ubicación: Medellin-Colombia
Mensajes: 1.109
Antigüedad: 21 años
Puntos: 24
Base de datos con datos repetidos

Bueno, quiero hacer un foro, y me nace esta pregunta:

1. Que s ma socnveneinte para una base de datos MySQL operada con PHP, que en una tabla guarde todos los datos sin repetir ninguno, o que cree varias tablas y para facilitar las consultas duplique algunos datos por ejmplo:

para mostrar Cual fue el ultimo usuario que respondio una pregunta, tengo dos opciones:

a. hacer la consulta a la tabal que tienen las respuestas, y sacara la de mayor fehca, extraer el ID del usuario y la fecha en que repondio, luego hacer la consulta (O en la misma consulta) averiguar el nombre de usuario.

b. Poner en la tablas de preguntas el nombre de usuario directamente, y la fecha de la ultima respuesta, es decir que cada que efectueen una respuesta estos datos sean actualizados.

mi problema surge, en que da ams rendimiento y eficacia para la base de datos?
__________________
SEO en Medellin
  #2 (permalink)  
Antiguo 21/12/2005, 05:58
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
En principio .. tu opción B sería en extricto rigor la más "optima" en cuanto a proceso, pues .. por otro lado (scritps PHP ... código NO SQL) te encargarías de mantener esos datos.

Pero .. en un sistema de base de datos relacionadas (RDBMS) esa forma de trabajar si no lo automatizas con cosas tipo "Store procedure" (procedimientos almacenados, donde puedas usarlos .. en Mysql según versión no puedes usarlos) o similar .. te hace depender muchooooo tu modelo de datos del lenguaje de programación que uses para acceder a tu BD. En resumen .. el día que por A o B motivo necesitas acceder esos datos por otro lenguaje de programación o realizar migraciones a otros RDBMS's .. tienes que re-escribir el código que usastes PHP en el otro lenguaje.

Por mi parte soy de la filosofía de "todo lo que puedas hacer con SQL .. hazlo" .. deja que el RDBMS y su SQL haga todo el trabajo que competa a la gestión de esos datos (que por otro lado el "SQL" como lenguaje estructurado de consultas existe y se inventó para eso).

Bajo este punto de vista .. tu opción A sería la más "portable" y la que a costa de algo más de "proceso" siempre reflejará los datos correctamente. Imagina en tu caso B que accedes a la BD "por detras" (directamente a los datos) .. se descuadraría todo, tendrías que crear scripts de "mantenimiento" que verifiquen la "integridad" de los datos .. es decir .. que verifiquen "re-calculen" para comprobar si el dato que almacenastes es correcto. En fin .. más "trabajo" para PHP y para tí como programador, sistemas más dificiles de mantener/actualizar .. Todo eso tienes que ponerlo en una "balanza" y pensarlo bien.

Un saludo,
  #3 (permalink)  
Antiguo 21/12/2005, 08:57
Avatar de mafima  
Fecha de Ingreso: abril-2003
Ubicación: Medellin-Colombia
Mensajes: 1.109
Antigüedad: 21 años
Puntos: 24
Entiendo

Listo es un pounto a fabor de la opcion A, el hecho de acceder directamente a los dotos y cambiarlos, esto crearia un falso dato en una de las dos tablas.

Pero hay cosasque se pueden hacer directamente sobre un campo de la tabla y no necesariamente hacer la consulta con SQL, me explico.

Supongamos que a cada topico quiera ponerle un contador de respuestas, podria hacer lo siguiente:

a. un campo que diga Numero_respuestas, y alli sumarle una cada ves que hagan una respuesta

b. Simplemente contar en la tabla de respuestas cuantas respuestas hay para ese topico.

Que crees que se mas optimo ?
Yo optaria por la "A" pero no estoy seguro!!
__________________
SEO en Medellin
  #4 (permalink)  
Antiguo 21/12/2005, 09:11
Avatar de nicolaspar  
Fecha de Ingreso: noviembre-2004
Ubicación: Villa Ballester Bs-As|Ar
Mensajes: 2.002
Antigüedad: 19 años, 4 meses
Puntos: 34
Que versiones usas? (Por que podes optimizar mucho según esto).

Por otro lado, el primer post, el punto b dice de guardar el nombre de usuario (Ej "mafima" ) en un campo? Si es así no esta bien eso!...si no es así esta confuso explicado.

Léete artículos como estos:
http://www.informit.com/articles/art...?p=377652&rl=1
http://www.databasejournal.com/featu...le.php/1382791
http://www.sitepoint.com/print/optim...ql-application
__________________
Mi punto de partida es Que Bueno Lo Nuevo
  #5 (permalink)  
Antiguo 21/12/2005, 09:35
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
Cita:
Iniciado por mafima
Listo es un pounto a fabor de la opcion A, el hecho de acceder directamente a los dotos y cambiarlos, esto crearia un falso dato en una de las dos tablas.

Pero hay cosasque se pueden hacer directamente sobre un campo de la tabla y no necesariamente hacer la consulta con SQL, me explico.

Supongamos que a cada topico quiera ponerle un contador de respuestas, podria hacer lo siguiente:

a. un campo que diga Numero_respuestas, y alli sumarle una cada ves que hagan una respuesta

b. Simplemente contar en la tabla de respuestas cuantas respuestas hay para ese topico.

Que crees que se mas optimo ?
Yo optaria por la "A" pero no estoy seguro!!
Por mi parte y por lo dicho anteriormente soy partidario de contar el n° de Respuestas vía SQL ..

Aunque . si te fijas .. en este foro yo mismo tengo unos 26mil y tantos mensajes .. creo que un 99.5% son respuestas .. así que si no se usa bien el "SQL" (un COUNT() o algo mejor si existe) un proceso de "conteo" de este estilo podría demorar mucho tiempo en ejecución.

Por lo demas, piensa que si se borran mensajes .. (aunque sea de forma "lógica" no física) .. tienes que ir a recorrer todos los usuarios involucrados para actualizar ese contador.

Un saludo,
  #6 (permalink)  
Antiguo 21/12/2005, 12:20
Avatar de mafima  
Fecha de Ingreso: abril-2003
Ubicación: Medellin-Colombia
Mensajes: 1.109
Antigüedad: 21 años
Puntos: 24
OK, entonces me recomiendas mejor que haga lo posible para sacar el maximo provercho de SQL

La version de mi MYSQL es la 4.1.13

Esto no carga mucho la base de datos en procesos?

o no lo es tanto, eso de sobrecargar la base de datos con muchas consultas me preocupa un poco.

leere los articulos que em recomiendas....(aunque si tienes algunos en español sera mejor :() cualquir cosa que se le ocurra a cluster u otro usuario sera bienvenida
__________________
SEO en Medellin
  #7 (permalink)  
Antiguo 21/12/2005, 12:27
Avatar de nicolaspar  
Fecha de Ingreso: noviembre-2004
Ubicación: Villa Ballester Bs-As|Ar
Mensajes: 2.002
Antigüedad: 19 años, 4 meses
Puntos: 34
El count es lo mejor poniendo todo en la balanza, aparte es la manera correcta, y es de lo último que se logra de una buena normalización de datos.

El sobrecargar no te hagas problema siempre y cuando sea necesario y este bien optimizado.
Personalmente, en casos extremos, he usado hasta archivos planos/xml en conjunto de la db para optimizar la labor (ej, en el caso de noticias, donde la lectura es mayor a la escritura), creando una especie de cache interna del sistema (luego, viendo el fuente por ejemplo de mambo vi algo similar implementado ahí, eso quiere decir que tan loco no estaba :P).
En fin, es cuestión que hagas bien las consultas (sobre todos los condicionales), y manejes bien los PK, índices y demás yerbas (por eso los links;))
Obviamente esto es tan extenso que seguramente este/mos olvidando cosas, por eso, si alguien aporta será bienvenido!

PD: Léete las ventajas de mysql 4.1.3> y veras que sacas provecho de esto! (www.mysql.com)
__________________
Mi punto de partida es Que Bueno Lo Nuevo
  #8 (permalink)  
Antiguo 21/12/2005, 12:30
Avatar de mafima  
Fecha de Ingreso: abril-2003
Ubicación: Medellin-Colombia
Mensajes: 1.109
Antigüedad: 21 años
Puntos: 24
He hecho el intento de leer 2, y me quedo en las mismas....

los traductores no ayudan mucho.....

quizas algyun muy bue articulo que em ayude a entender y explotar mi Base de datos MySql 4.1.13 en funcionamiento con PHP?
__________________
SEO en Medellin
  #9 (permalink)  
Antiguo 21/12/2005, 12:39
Avatar de nicolaspar  
Fecha de Ingreso: noviembre-2004
Ubicación: Villa Ballester Bs-As|Ar
Mensajes: 2.002
Antigüedad: 19 años, 4 meses
Puntos: 34
Date una vuelta por google, hay varios (puse este por poner: http://www.google.com/search?q=optim...45%2CGGLG%3Aen)
__________________
Mi punto de partida es Que Bueno Lo Nuevo
  #10 (permalink)  
Antiguo 21/12/2005, 12:51
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
En www.mysql-hispano.com tienes muy buenos artículos sobre Mysql en castellano. Empieza por ahí.

Luego es cosa de usar las funciones de PHP para conectarte a tu BD:
www.php.net/mysql
ó mejor si puedes disponer de
www.php.net/mysqli

Un saludo,
  #11 (permalink)  
Antiguo 21/12/2005, 18:56
Avatar de mafima  
Fecha de Ingreso: abril-2003
Ubicación: Medellin-Colombia
Mensajes: 1.109
Antigüedad: 21 años
Puntos: 24
Bueno muchas gracias

Gracias por ayudarme tengo otra duda pero como es de ¿como hacer una consulta? mejor inicio un tema nuevo.

Muchas gracias por su ayuda
__________________
SEO en Medellin
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 03:41.