cuadrantes-espiral
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Cuadrantes-espiral] Dar de baja a usuarios en los foros


From: Javier Linares
Subject: Re: [Cuadrantes-espiral] Dar de baja a usuarios en los foros
Date: Tue, 14 Jan 2003 18:38:23 +0100
User-agent: Mutt/1.3.28i

Hola.

On Tue, Jan 14, 2003 at 11:17:11AM +0100, Quim Gil wrote:
> si hacemos eso se corren los números de cada usuario, por lo que se
> desmonta el sistema de "tutelaje" de nuevos usuarios, basado en que cada
> veterano se asigna como copiloto de los usuarios acabados en "x" número.

No entiendo muy bien la razón. ¿Qué es esto de copilotos?. Si lo que
queréis es una forma de dividir los usuarios, tal vez sería mejor pensar
otra forma de dividirlos y/o programar una pequeña aplicación
independiente que los dividia de alguna otra forma. Y no tocamos ni una
sóla línea de código :-).

En toda la base de datos lo que realmente sirve para identificar a los
usuarios es su nombre de usuario, así que creo que un "id" único por
usuario resulta redundante.

> Por lo que propongo este procedimiento para dar de baja a usuarios en
> los foros:
> 
> a) Modificar las entradas del usuario, borrando su email (para que no
> reciba su boletín) y cambiando su nombre por "baja", así ya no queda
> ningún dato de él.
> 
> b) hacer un "soft" delete para invalidar su password y su capacidad de
> participar en los foros.

Propuesta
=========

Tu propuesta no es mala, pero supondría:

        - Cambiar código de los foros
        - Información basura que crece a medida que damos dando de baja
          usuarios

Método 1
========

Ya que cambiamos código, una aproximación es hacer que el número de
usuario sea algo fijo y que cuando borres un usuario no se modifique
para el resto de usuarios. Es decir, el número X moriría al eliminar el
usuario número X.

A nivel técnico esto se traduce en:

        - Crear un nuevo campo de id (copiar los datos del id actual).
        - Al dar de alta a un usuario nuevo asignar un valor a este
          campo igual al máximo de ids (en esta misma columna) más 1.
        - Olvidarse de que hay un id que está incrementándose y
          decrementándose.
        - Trabajar en torno a este nuevo id.
        - Modificar en la llamada a eliminación de un usuario.

Hay que tocar, por tanto, muchísimas líneas de código en lugares muy
diversos.


Método 2
========

Otra opción es crear un registro de números de usuarios que se han ido
eliminando. Cuando hubiera que listar los usuarios con sus id's
originales bastaría sumar "+1" a todos los id's a partir de las
posiciones que se han ido eliminando. No sé si Quim me entiende :-),
pero supongo que Diego sí.

Este método puede resultar útil si el viejo id se utilizaba sólo para
eso e implica programar un pequeño módulo nuevo y muy corto, no
modificar/hackear todo el código que ya existe y funciona.

También tiene la desventaja de que crea basura, pero sólo es un número.

Basta un ejemplo para entenderlo:

        * Tenemos usuarios: 1, 2, 3 y 4.
        * Eliminamos el usuario (3). Tenemos, por tanto: 1, 2, 3 en la
          lista de usuarios y el número 3 en ese registro.
        * Para mostrar los usuarios normales tomamos el valor del
          registro (3) y a partir de esa posición sumamos uno a todos
          los valores:

                1, 2, 4 (=3+1)

        * Ya tenemos el listado original sin el 3.

No he estudiado mucha programación teórica, pero seguro que Diego es
incluso capaz de hacerlo con un par de bucles en 10-12 líneas ;-).


Conclusión
==========

Cualquiera de estas opciones es mejor que dejar cosas en la base de
datos. O dentro de un año tendremos que programar algo para limpiar la
base de datos porque ocupará unos cuantos megas más (no sólo por el
espacio, sino por la velocidad).

Saludos.

-- 
 .''`.      Javier Linares              http://adala.org
: :'  :  <address@hidden>   <address@hidden>
`. `'`
  `-  Debian - apt-get into it
  

Attachment: pgpRU2ltgC8p7.pgp
Description: PGP signature


reply via email to

[Prev in Thread] Current Thread [Next in Thread]