Foros del Web » Programando para Internet » PHP »

Ayuda

Estas en el tema de Ayuda en el foro de PHP en Foros del Web. Bueno, aqui está la situación: Con motivo del lanzamiento del portalito www.codigohispano.com Camargo y yo nos encontramos inmersos en el desarrollo del código que va ...
  #1 (permalink)  
Antiguo 01/08/2003, 08:56
Avatar de Manoloweb  
Fecha de Ingreso: enero-2002
Ubicación: Monterrey
Mensajes: 2.454
Antigüedad: 22 años, 3 meses
Puntos: 5
Ayuda

Bueno, aqui está la situación:

Con motivo del lanzamiento del portalito www.codigohispano.com Camargo y yo nos encontramos inmersos en el desarrollo del código que va a hacer funcionar el sitio.

Les comento con mucho agrado que vamos bastante avanzados, pero hay un par de cosas en las que quisiera pedir su opinión o ayuda, pues no queremos desarrollar algo que despues nos cueste mas trabajo corregir.

El apoyo que pido en este caso en particular es con respecto al sistema de calificación de scripts por parte de los usuarios (visitantes).

EXPONGO LA NECESIDAD

Cada usuario registrado podrá calificar UNA SOLA VEZ cada script, los usuarios NO registrados podran bajar scripts, pero no calificarlos.

En el scope general del sitio, se tendrá disponible 3 datos con respecto al visitante:

$var["USR"] (nick name)
$var["ID"] (ID del visitante)
$var["NIV"] (nivel de acceso)

Los visitantes no registrados, tienen el valor 0 (cero) en los tres campos.

Además, cada SCRIPT va a tener un ID propio

Para evitar problemas de cookies y similares, hemos decidido que debera ser por medio de BD o de un TXT.

Debemos tomar en cuenta que el usuario podra votar en X cantidad de scripts, pudiendo ser uno, decenas o cientos.

A alguien se le ocurre una forma eficiente con la que pudieramos enfrentar esta necesidad?

Agradeceremos cualquier sugerencia o comentario (o script )

__________________
Manoloweb
  #2 (permalink)  
Antiguo 01/08/2003, 11:50
Avatar de biblio  
Fecha de Ingreso: enero-2002
Ubicación: Urano
Mensajes: 577
Antigüedad: 22 años, 3 meses
Puntos: 0
Acá va mi sugerencia:

Teniendo en cuenta que manejaras Base de Datos, entiendo que tendras tu tabla USUARIOS y SCRIPTS. Acá viene una tabla intermedia, llamado USUARIO X SCRIPT relacionado uno -- uno, en la cual al realizar el voto el usuario, alamacenar en USUARIO X SCRIPT el CODIGO o ID del usuario lo mismo del SCRIPT.

Para restringir que vote mas de una vez solo haces la consulta basado con el id del usuario y del script que en ese momento está por votarse.

Esa es mi sugerencia.


Saludos

Última edición por biblio; 01/08/2003 a las 11:55
  #3 (permalink)  
Antiguo 01/08/2003, 12:04
Avatar de Manoloweb  
Fecha de Ingreso: enero-2002
Ubicación: Monterrey
Mensajes: 2.454
Antigüedad: 22 años, 3 meses
Puntos: 5
Tienes razón... y yo me estaba complicando la vida!!

Basta con una tabla (votos)

id|usuario|script

Voy a probarlo así... Gracias Biblio!!
__________________
Manoloweb
  #4 (permalink)  
Antiguo 01/08/2003, 12:17
Avatar de biblio  
Fecha de Ingreso: enero-2002
Ubicación: Urano
Mensajes: 577
Antigüedad: 22 años, 3 meses
Puntos: 0
Ajá, sería como pusiste, yo lo trabajo así siempre.

IdUsuScr|IdUsuario|IdScript
----------------------------------


Solo almacenas los Id's

Cita:
Tienes razón... y yo me estaba complicando la vida!!
Sabes que hago cuando me pasa eso, salgo corriendo a la calle, y me doy veinte vueltas. jeje, y vuelvo fresco.


Saludos
  #5 (permalink)  
Antiguo 01/08/2003, 12:37
Avatar de Manoloweb  
Fecha de Ingreso: enero-2002
Ubicación: Monterrey
Mensajes: 2.454
Antigüedad: 22 años, 3 meses
Puntos: 5


El problema es que mi oficina esta frente a una gran avenida... y si salgo corriendo, en lugar de "fresco" vuelvo arrollado... je je

Otra buena opcion es venir a los foros y esperar que alguien te abra los ojos...

Salud!
__________________
Manoloweb
  #6 (permalink)  
Antiguo 01/08/2003, 12:48
Avatar de biblio  
Fecha de Ingreso: enero-2002
Ubicación: Urano
Mensajes: 577
Antigüedad: 22 años, 3 meses
Puntos: 0
Jajaja, no pues Manolo, no tienes derecho a morir!, porque tienes niños, mientras los solteros como yo si.

Saludos.
  #7 (permalink)  
Antiguo 01/08/2003, 12:56
Avatar de DINASEN  
Fecha de Ingreso: marzo-2003
Mensajes: 997
Antigüedad: 21 años, 1 mes
Puntos: 1
jejejeje... yo tambien pense en la posibilidad que te comento biblio y me parecio muy buena pero depseus cai en que esa tabla lo mismo podia hacerse muy pesasda y llevo ya un rato dando vuelta buscando otra solucion pero no caigo... si se me ilumina la cabeza ya os comento..

Biblio un diez compadre

Un Saludo
  #8 (permalink)  
Antiguo 01/08/2003, 14:04
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 21 años, 10 meses
Puntos: 16
Hola,

Yo creo que la tabla solo deberia ser:

IDUsuario|IDScript

Y como clave primaria unica los dos juntos, ya que si un usuario solo puede votar una vez a un script, ese par de valores es unico en la tabla, cumpliendo asi el requisito de clave primaria unica.

Creo que esta es la forma mas correcta, atendiendo a lo de la normalizacion de bases de datos y demas. La introduccion de un campo artificial de clave no es necesario.

Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #9 (permalink)  
Antiguo 01/08/2003, 14:30
Avatar de Manoloweb  
Fecha de Ingreso: enero-2002
Ubicación: Monterrey
Mensajes: 2.454
Antigüedad: 22 años, 3 meses
Puntos: 5
Suena lógico.

Aunque estaba pensando agregarle el valor de la votación... crees que es mala idea?

IDUsuario|IDScript|voto
__________________
Manoloweb
  #10 (permalink)  
Antiguo 01/08/2003, 14:55
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 21 años, 10 meses
Puntos: 16
Dimelo tu mismo. En caso de poner solo el valor del voto ahi, ¿que tendrias que hacer para mostrar la votacion total de un script? Un select en esa tabla. Yo creo que lo mejor seria tener el valor de la suma total de votos y numero de votos dentro de la tabla de script, juntos con sus datos (o en una tabla solo de scripts). Dejaria tambien el valor voto en esta tabla de usurio\script si permitiese a un usuario modificar su votacion de un script (quizas por actualizacion del script) o si quisiera eliminar el voto de un usuario (al borrar el usuario). Ambas operaciones incluirian una mosdificacion en los valores "totales" de la tabla script.

En fin, creo que lo mejor es tener los totales con el script, para evitar consultas "extras". En estos casos creo que es beneficioso almacenar directamente los valores totales, aunque se puedan calcular por otros medios (normalmente recomiendan no almacenar valores calculados).

Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #11 (permalink)  
Antiguo 01/08/2003, 14:59
Avatar de Manoloweb  
Fecha de Ingreso: enero-2002
Ubicación: Monterrey
Mensajes: 2.454
Antigüedad: 22 años, 3 meses
Puntos: 5
Creo que tienes razón. No creo que sea tan trascendente tener control sobre las votaciones individuales. mejor se las agrego a la tabla de los scripts (cantidad de votos y valor de los votos) y así me ahorro dolores de cabeza y no sacrifico la eficiencia de la pagina.

__________________
Manoloweb
  #12 (permalink)  
Antiguo 01/08/2003, 15:05
Avatar de biblio  
Fecha de Ingreso: enero-2002
Ubicación: Urano
Mensajes: 577
Antigüedad: 22 años, 3 meses
Puntos: 0
Cita:
jejejeje... yo tambien pense en la posibilidad que te comento biblio y me parecio muy buena pero depseus cai en que esa tabla lo mismo podia hacerse muy pesasda y llevo ya un rato dando vuelta buscando otra solucion pero no caigo... si se me ilumina la cabeza ya os comento..
En cierta forma sí, porque pongamos el caso de que hay 10 usuario y 10 scripts,
esto implica que un usuario puede hacer 10 votos. generando 10 filas,
entonces si 10 usuarios hacen 10 votos será (10*10=100), y si son 1000 usuarios y 1000 scripts?,
1000*1000=1000000 nada menos, y si una fila que tenga por ejm. estos datos:

IdUsuScr|IdUsuario|IdScript
-----------------------------------
0001 |0011 |0111

contiene 151 bytes, multiplicamos:

151bytes * 1000000= 151000000 Bytes

Vamos reduciendo, sabemos que un KiloByte = 1024 Bytes.

151000000 Bytes / 1024 KiloBytes= 147460.9375 KiloBytes
147460.9375 KiloBytes / 1024 MegaBytes = 144.00482177734375 MegaBytes
144.00482177734375 / 1024 GigaBytes = 0.140629708766937255859375 GigaBytes

Está el calculo sin redondear Saca tu conclusión Manoloweb, cual te conviene, creo que no necesiytas tanto control.


Espero no haber fallado con los calculos.

Nota: 1024 Representa 1 en términos de (bytes,mb,gb,tb).

Saludos

Última edición por biblio; 01/08/2003 a las 15:43
  #13 (permalink)  
Antiguo 01/08/2003, 15:08
Avatar de asinox  
Fecha de Ingreso: enero-2002
Ubicación: Santo Domingo
Mensajes: 2.712
Antigüedad: 22 años, 2 meses
Puntos: 6
yo, como todavia no se mucho PeacHePe pues solo dire: hola
__________________
www.dataautos.com
  #14 (permalink)  
Antiguo 01/08/2003, 15:19
Avatar de biblio  
Fecha de Ingreso: enero-2002
Ubicación: Urano
Mensajes: 577
Antigüedad: 22 años, 3 meses
Puntos: 0
Si no sabes mucho, no tergiverses el PHP (PeacHePe), plop.



Saludos
  #15 (permalink)  
Antiguo 01/08/2003, 15:20
Avatar de Manoloweb  
Fecha de Ingreso: enero-2002
Ubicación: Monterrey
Mensajes: 2.454
Antigüedad: 22 años, 3 meses
Puntos: 5
Je je... sencillamente muy buena explicación Biblio!

A veces uno no se pone a hacer las cuentas y termina no contemplando algunos elementos. Y tu eres un mago de las matematicas. No quiero imaginarme como haces tu lista de compras del supermercado!!!

Por otro lado, yo espero que NO te equivoques en tus cuentas, y que pronto tengamos un mundo de scripts y de usuarios. Creo que será mejor romperme la cabeza tratando de solucionar la estructura de las tablas que pasarmela limpiando telarañas de un sitio con 10 scripts y 2 usuarios (camargo y yo)... je je je



Ah, y por cierto... hola!
__________________
Manoloweb
  #16 (permalink)  
Antiguo 01/08/2003, 18:13
Avatar de biblio  
Fecha de Ingreso: enero-2002
Ubicación: Urano
Mensajes: 577
Antigüedad: 22 años, 3 meses
Puntos: 0
Una buen anpálisis para la base de datos, será fundamental para tu proyecto, arma bien tu estructura lógica y física, basado en lo que quieres lograr no solo ahora, si no mas adelante, de modo una vez corriendo la aplicación, ya no tengas que hacer mas modificaciones en la base de datos.

Saludos
  #17 (permalink)  
Antiguo 02/08/2003, 14:34
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 21 años, 10 meses
Puntos: 16
Y otro consejo, preparate para el cambio. Mejor crea una capa de abstraccion entre yu logica de negocio y tu base de datos, de talforma que puedas cambiar la estructura de la base de datos cambiando solo esa capa, y dejando intacta la logica de negocio (tu codigo principal.

Traduccion a codigo, usa clases (o funciones) para todas tus operaciones con la base de datos para no tener que andar con consultas SQL por todo tu codigo. Por ejemplo, para votar crea una funcion:
Código PHP:
function votar(id_usuarioid_script){} 
Y dentro de esa funcion realizas todas las tareas para almacenar el voto en la base de datos. ¿Que mas adelante quieres crear ese campo en la tabla usuario/script? Pues solo tienes que modificar esa funcion.

Separa lo cambia muchas veces de lo que cambia pocas.

Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
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 20:16.