Pregunta:
El escenario es que tengo un conjunto de usuarios en expansión y, a medida que pasa el tiempo, los usuarios cancelarán sus cuentas que actualmente marcamos como 'eliminadas' (con una bandera) en la misma tabla.
Si los usuarios con la misma dirección de correo electrónico (así es como los usuarios inician sesión) desean crear una nueva cuenta, pueden registrarse nuevamente, pero se crea una NUEVA cuenta. (Tenemos identificadores únicos para cada cuenta, por lo que las direcciones de correo electrónico se pueden duplicar entre las activas y las eliminadas).
Lo que he notado es que en todo nuestro sistema, en el curso normal de las cosas, consultamos constantemente la tabla de usuarios para verificar que el usuario no se elimine, mientras que lo que estoy pensando es que no necesitamos hacer eso en absoluto … ! [Aclaración1: por 'consulta constante', quise decir que tenemos consultas que son como: '… FROM usuarios DONDE isdeleted = "0" AND …'. Por ejemplo, es posible que necesitemos buscar a todos los usuarios registrados para todas las reuniones en una fecha en particular, por lo que en ESA consulta, también tenemos usuarios de FROM DONDE isdeleted = "0" – ¿esto aclara mi punto?]
(1) continue keeping deleted users in the 'main' users table
(2) keep deleted users in a separate table (mostly required for historical
book-keeping)
¿Cuáles son los pros y los contras de ambos enfoques?
Respuesta:
(1) continuar manteniendo a los usuarios eliminados en la tabla de usuarios 'principal'
- Ventajas: consultas más sencillas en todos los casos
- Contras: puede degradar el rendimiento con el tiempo, si hay una gran cantidad de usuarios
(2) mantenga a los usuarios eliminados en una tabla separada (principalmente requerida para la contabilidad histórica)
Puede utilizar, por ejemplo, un disparador para mover a los usuarios eliminados a la tabla del historial automáticamente.
- Ventajas: mantenimiento más sencillo para la tabla de usuarios activos, rendimiento estable
- Contras: necesita diferentes consultas para la tabla de historial; sin embargo, dado que se supone que la mayor parte de la aplicación no está interesada en eso, este efecto negativo probablemente sea limitado