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

Guardar la "actividad reciente": tabla nueva o unión de tablas?

Estas en el tema de Guardar la "actividad reciente": tabla nueva o unión de tablas? en el foro de Mysql en Foros del Web. Holaaa Estoy pensando que alternativa sería la mejor para guardar y mostrar la actividad reciente de un usuario. Yo veo dos alternativas: - Hacer una ...
  #1 (permalink)  
Antiguo 24/01/2011, 16:44
 
Fecha de Ingreso: octubre-2008
Mensajes: 69
Antigüedad: 15 años, 5 meses
Puntos: 1
Pregunta Guardar la "actividad reciente": tabla nueva o unión de tablas?

Holaaa

Estoy pensando que alternativa sería la mejor para guardar y mostrar la actividad reciente de un usuario. Yo veo dos alternativas:

- Hacer una Unión de las tablas que quiero y ordenarlas.
- Crear una tabla nueva, para guardar cada actividad nueva creada y el tipo que es...

A mi me gusta más la segunda opción, computacionalmente es menos compleja para la máquina... pero requiere más espacio..

¿Cuál elegís?
  #2 (permalink)  
Antiguo 25/01/2011, 02:16
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años
Puntos: 574
Respuesta: Guardar la "actividad reciente": tabla nueva o unión de tablas?

Cita:
- Hacer una Unión de las tablas que quiero y ordenarlas.
Dificil de responder sin saber nada de tu bbdd.

En general no es muy aconsejable guardar dos veces la misma info, esto pasaria si la primera opción es posible pero tu optas por la segunda.
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #3 (permalink)  
Antiguo 25/01/2011, 05:33
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: Guardar la "actividad reciente": tabla nueva o unión de tablas?

Miralo de esta forma: La creación de tablas no es una cosa arbitraria, debe tener un sentido de necesidad y representar entidades reales o virtuales dentro del sistema al que debe alimentar de información y datos.

La pregunta es si existen en el modelo ya entidades o tablas desde donde se pueda obtener datos acerca de la actividad del usuario.

Hay que considerar:
- Si esa actividad surge de datos provenientes de una o más tablas, entonces no necesitas una tabla para obtenerla sino una consulta.
- Si la consulta se realiza en forma constante, eso no implica la necesidad de una tabla para apurarla, sino en todo caso una vista (VIEW) con que pueda obtenerse esa info como si fuese una tabla.
- SI no hay datos en otras tablas que contemplen datos de esa actividad que son propios de la actividad, entonces necesitas una tabla, o mejor dicho: hay una entidad del sistema que no ha sido representada en el diagrama y que requiere una tabla adicional. Ahora bien, ten en cuenta que la tabla sólo tiene razón de existir como tal si y sólo si se cumple alugna de estas dos premisas:
a) Posee atributos que le sean propios y que no pertenezcan a otras entidades (tablas).
b) Representa una relación N:N ente dos tablas ya existente, con posiblemente algún otro datos que discrimine la instancia de cada registro en esa tabla.


¿Se entiende la idea?
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Última edición por gnzsoloyo; 25/01/2011 a las 07:24 Razón: Mejorar la idea
  #4 (permalink)  
Antiguo 25/01/2011, 05:39
 
Fecha de Ingreso: octubre-2008
Mensajes: 69
Antigüedad: 15 años, 5 meses
Puntos: 1
Respuesta: Guardar la "actividad reciente": tabla nueva o unión de tablas?

Hola, gracias por comentar, pues las tablas son distintas entre si: por ejemplo:

comentario
-------------
id
user_id
opinion_id
comentario
creado_en

opinion
-----------
id
user_id
articulo_id
opinion
voto
creado_en

voto
-------
id
id_user
id_articulo
creado_en


.. en fin, no se, habrían más. Tú opinas que es mejor intentar realizar unions aunque tenga campos distintos?


*********

Vaya, he respondido sin ver el post de gnzsoloyo, pues:

a) Posee atributos que le sean propios y que no pertenezcan a otras entidades (tablas). seguro que no. Conceptualmente no sería necesario una tabla, solo pensaba en rendimiento.. y porque es más fácil crear una tabla que lo otro.. jeje

Esto de la VIEW, (supongo que es algún tipo de instrucciones en mysql) no lo conozco, pero suena bien, voy a echarle un ojo a ver que veo, gracias a ti también.

Última edición por yakukubu; 25/01/2011 a las 05:46
  #5 (permalink)  
Antiguo 25/01/2011, 06:25
 
Fecha de Ingreso: octubre-2008
Mensajes: 69
Antigüedad: 15 años, 5 meses
Puntos: 1
Respuesta: Guardar la "actividad reciente": tabla nueva o unión de tablas?

Hola, he estado haciendo algunas pruebas de "rendimiento" con apenas 2 filas en cada tabla.. estos son los resultados:

* Primer caso, donde creamos una tabla nueva, un select normal tarda 0,0014 segundos de media.

* Segundo caso, usando Unions, una query así:

SELECT id, "opinion" AS type
FROM opinion
WHERE user_id = 2
UNION
SELECT id, "comment" AS type
FROM comment
WHERE user_id = 2

que nos retornaría algo así:

id type
1 opinion
2 comment

tarda 0,0020 segundos de media.

0,006 mil·lesimas de diferencia.. La verdad es que no se si multiplicando por 10.000 filas, tendría una diferencia de 60 segundos.. no creo, qué pensais?
  #6 (permalink)  
Antiguo 25/01/2011, 06:39
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años
Puntos: 574
Respuesta: Guardar la "actividad reciente": tabla nueva o unión de tablas?

La explicación de gnzsoloyo no debería dejarte lugar a dudas.

Los resultados de rendimiento con dos datos son irelevantes. Y además te olvidas de sumar el tiempo de hacer el insert es esa tabla. Y el riesgo de que si ese insert por lo que sea no se realice, la bbdd quede en un estado incoherente...
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #7 (permalink)  
Antiguo 25/01/2011, 07:33
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: Guardar la "actividad reciente": tabla nueva o unión de tablas?

Cita:
a) Posee atributos que le sean propios y que no pertenezcan a otras entidades (tablas). seguro que no. Conceptualmente no sería necesario una tabla, solo pensaba en rendimiento.. y porque es más fácil crear una tabla que lo otro.. jeje
En realidad se cumple lo que yo te estoy diciendo:
Comentario, Opinión y Voto son entidades completamente distintas en el contexto e un foro, y por tanto deben existir. Representan cosas diferentes, aunque sus atributos sean todos FK e otras tablas.
De hecho, Voto tiene una relación ternaria entre Usuario, Comentario y Voto, donde hay un discriminante que es la fecha de emisión o bien su propio ID, y donde comentario_id y usuario_id conforman un índice UNIQUE (no puede haber dos v otos de la misma persona para el mismo comentario).
Y en realidad, es mucho más fácil y más eficiente hacer una VIEW para tu caso, o bien una consulkta de construcción programática (dentro de la aplicación para parametrizarla cada vez que se use), que crear una tabla que debes mantener, como bien recalca quimfv, y donde si la cosa está mal hecha, tendrás a la larga problemas de consistencia.
Además, como ya te dijo él, el resultado de hoy es irrelevante, y una consulta parametrizable puede ser optimizada. Una tabla adicional siempre afecta la performance global.
__________________
¿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 25/01/2011, 08:04
 
Fecha de Ingreso: octubre-2008
Mensajes: 69
Antigüedad: 15 años, 5 meses
Puntos: 1
Respuesta: Guardar la "actividad reciente": tabla nueva o unión de tablas?

Pues no se hable mas.

Me olvido de la nueva tabla.

Gracias a los dos.


Etiquetas: tablas
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 00:45.