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

Actualizar registros de tabla - Manera correcta

Estas en el tema de Actualizar registros de tabla - Manera correcta en el foro de Mysql en Foros del Web. Estoy trabajando con mysqli y PHP . Y tengo una tabla que va a tener noticias que seran compartidas via facebook. Para mantener contado la ...
  #1 (permalink)  
Antiguo 26/08/2012, 21:45
Avatar de aguila_393  
Fecha de Ingreso: septiembre-2007
Ubicación: Argentina
Mensajes: 406
Antigüedad: 17 años, 2 meses
Puntos: 1
Actualizar registros de tabla - Manera correcta

Estoy trabajando con mysqli y PHP . Y tengo una tabla que va a tener noticias que seran compartidas via facebook. Para mantener contado la cantidad de veces que se compartio cada noticia guardo la cantidad dentro de la tabla, por lo que la tabla queda asi:

ID - Text - Shares


Lo que estoy haciendo para actualizar los shares (cantidad de veces compartidas) es obtener todos los registros de la tabla, y luego comprobar si la cantidad de shares es diferente, en dicho caso la actualizo con el siguiente codigo:
"UPDATE news SET shares = ".$shares." WHERE id = ".$row['id']." ";

Funciona perfecto. Mi pregunta es, es correcto hacerlo de esta manera? Porque en el futuro si hubiera que actualizar 2000 noticias no se si se saturara o afectara el rendimiento.

Basicamente seria eso. Estuve buscando y me parecio la mejor manera de hacerlo, pero no se nada de como influye en el rendimiento, o cuantas consultas es aceptable hacer.
  #2 (permalink)  
Antiguo 27/08/2012, 07:51
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 11 meses
Puntos: 447
Respuesta: Actualizar registros de tabla - Manera correcta

Hola aguila_393:

Cuando un campo se puede calcular, NO SE DEBE ALMACENAR EN LA BASE DE DATOS, esa es una regla básica en el diseño y modelado de Bases de datos... porque precisamente estás haciendo trabajo doble... si al contar los registros obtienes el número de veces que se ha compartido una noticia entonces NO DEBES GUARDAR EL DATO...

Saludos
Leo.
  #3 (permalink)  
Antiguo 27/08/2012, 10:58
Avatar de aguila_393  
Fecha de Ingreso: septiembre-2007
Ubicación: Argentina
Mensajes: 406
Antigüedad: 17 años, 2 meses
Puntos: 1
Respuesta: Actualizar registros de tabla - Manera correcta

Cita:
Iniciado por leonardo_josue Ver Mensaje
Hola aguila_393:

Cuando un campo se puede calcular, NO SE DEBE ALMACENAR EN LA BASE DE DATOS, esa es una regla básica en el diseño y modelado de Bases de datos... porque precisamente estás haciendo trabajo doble... si al contar los registros obtienes el número de veces que se ha compartido una noticia entonces NO DEBES GUARDAR EL DATO...

Saludos
Leo.
Disculpa, no entendi a lo que te referis. Yo en la tabla tengo el numero de veces compartida en un dia determinado, pero tengo que actualizarlo para poder saber si alguien mas las compartio.

O como deberia hacerse? es que no entendi muy bien lo que dijiste.

Saludos.
  #4 (permalink)  
Antiguo 27/08/2012, 11:13
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: Actualizar registros de tabla - Manera correcta

En esencia, lo que te dice es que si tienes:
- Una tabla de usuarios.
- Una tabla relacionada que dice quién compartió qué.
Con esas dos tablas puedes saber dinámicamente quien compartió que y cuantas veces, sin necesidad de almacenar ese valor numérico.

La regla general que te menciona, y que te enseñan en la asignatura de Bases de Datos es que jamás se almacenan en tablas datos que pueden obtenerse realizando el cálculo en una consulta.
- Ocupan espacio innecesariamente.
- Requieren procesos de actualización (que reducen performance).
- Son proclives a inconsistencia de datos (si no se actualizan antes de ser consultados, no representan datos fiables, y si los actualizas antes de consultarlos... ¿para qué demonios los guardaste?)

Poner un campo calculable en un modelo de datos de un examen es causa segura de reprobarlo...
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 27/08/2012, 11:39
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 11 meses
Puntos: 447
Respuesta: Actualizar registros de tabla - Manera correcta

Creo que la explicación de gnzsoloyo es bastante clara, pero te comento un ejemplo que utilizó mi profesor de Diseño de Base de Datos que ejemplifica más claramente lo que queremos hacer notar... supongamos que tienes la tabla Círculos, y quisieras obtener toda la información geométrica acerca de cada figura... lo que estás tratando de hacer sería tan sin sentido como querer almacenar el radio, del círculo, el valor de la constante PI, el valor de la circunferencia y el valor del área, es decir tener la tabla así:

Código MySQL:
Ver original
  1. mysql> SELECT * FROM circulos;
  2. +-------+-----------+----------------+------------+
  3. | radio | pi        | circunferencia | area       |
  4. +-------+-----------+----------------+------------+
  5. |     1 | 3.1415927 |      6.2831854 |  3.1415927 |
  6. |     2 | 3.1415927 |     12.5663708 | 12.5663708 |
  7. |     3 | 3.1415927 |     18.8495562 | 28.2743343 |
  8. |     4 | 3.1415927 |     25.1327416 | 50.2654832 |
  9. |     5 | 3.1415927 |      31.415927 | 78.5398175 |
  10. +------+-------+-----------+----------------+------------+
  11. 5 rows in set (0.02 sec)

El campo PI no debe existir en la tabla, PUES ES UN VALOR CONSTANTE. Los campos circunferencia y area TAMPOCO DEBEN EXISTIR EN LA TABLA, pues estos se pueden calcular. El único dato que importa es el RADIO, por lo tanto es el único que debe existir en la tabla

A la hora de querer mostrar la circunferencia o el área de cualquier círculo EN EL SELECT HACES LOS CÁLCULOS NECESARIOS:

Código MySQL:
Ver original
  1. mysql> SELECT * FROM circulos;
  2. +-------+
  3. | radio |
  4. +-------+
  5. |     1 |
  6. |     2 |
  7. |     3 |
  8. |     4 |
  9. |     5 |
  10. +-------+
  11. 5 rows in set (0.00 sec)
  12.  
  13. mysql> SELECT
  14.     ->   radio,
  15.     ->   (3.1415927 * 2 * radio) circunferencias,
  16.     ->   (3.1415927 * radio * radio) areas
  17.     -> FROM circulos;
  18. +-------+-----------------+------------+
  19. | radio | circunferencias | areas      |
  20. +-------+-----------------+------------+
  21. |     1 |       6.2831854 |  3.1415927 |
  22. |     2 |      12.5663708 | 12.5663708 |
  23. |     3 |      18.8495562 | 28.2743343 |
  24. |     4 |      25.1327416 | 50.2654832 |
  25. |     5 |       31.415927 | 78.5398175 |
  26. +-------+-----------------+------------+
  27. 5 rows in set (0.00 sec)

¿Se entiende la idea?

Saludos
Leo.
  #6 (permalink)  
Antiguo 27/08/2012, 14:03
Avatar de aguila_393  
Fecha de Ingreso: septiembre-2007
Ubicación: Argentina
Mensajes: 406
Antigüedad: 17 años, 2 meses
Puntos: 1
Respuesta: Actualizar registros de tabla - Manera correcta

Ahora si entendi lo que me querian decir. Tenia algo de idea de eso pero me lo dejaron un poco mas claro.

De todas maneras la cantidad de shares yo la obtengo de una pagina externa, lo que yo hago es:
- Obtengo el id y cantidad de shares de mi tabla.
- Consulto en una web externa la cantidad de shares de la id.
- Comparo ambas cantidades y de ser diferentes la actualizo con la sentencia que comente antes.

Eso se repite para todas las noticias.

La cantidad de shares actualizadas no la tengo en ninguna tabla de mi base de datos.

Entonces estaria bien lo que estoy haciendo? O hay alguna mejor manera?

Etiquetas: correcta, manera, php, registros, tabla
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 01:18.