Estoy tratando de determinar el mejor diseño de tabla para una función de "seguir/no seguir usuario", similar a Twitter (Editar: No estoy haciendo una aplicación como Twitter). Debajo está mi el diseño actual de la tabla y el manejo de php. No estoy seguro de si es el mejor enfoque y realmente agradecería sus comentarios.Diseño de tabla de base de datos "Seguir usuario"
CREATE TABLE IF NOT EXISTS `user_follow` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`follower` int(11) NOT NULL,
`following` int(11) NOT NULL,
`subscribed` datetime NOT NULL DEFAULT '0000-00-00 00:00:00',
PRIMARY KEY (`id`),
UNIQUE KEY `follow_unique` (`follower`,`following`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=76 ;
En el seguimiento, se añade el ID seguidores al campo follower
y el ID del usuario que será seguido se añade a following
. También estoy registrando la fecha en que un usuario se suscribió para seguir a otro usuario en el campo subscribed
. La fecha de suscripción se puede usar para clasificar.
Cuando un usuario deja de seguir, simplemente borro la fila respectiva.
Para evitar filas duplicadas hice las columnas follower
y following
únicas. Si un usuario ya está siguiendo un id y hace clic para seguir de nuevo, me sale error de base de datos de 1062. Por ejemplo
Entrada duplicada '62 -88' para la llave 'follow_unique'
Obviamente, cuando ya siguiente un usuario, el seguidor ve un botón unfollow
. Esto se logra al verificar si existe una fila de tabla seguidora de seguidor entre 2 usuarios. Si rows > 0
visualizo unfollow
de lo contrario follow
.
Bueno, ¿qué opinas?
No estoy tratando de recrear Twitter ... Es para un propósito totalmente diferente pero tiene la misma funcionalidad que Twitter en términos de suscripciones – CyberJunkie
Suena bien, pero agregaría (si no lo has hecho ya) las restricciones de Foreign Keys en 'follower' y' following' a su tabla de Usuarios. – Dirk
Lo que estás haciendo me parece bien. Sugeriría usar 'ENGINE = InnoDB' en lugar de' MyISAM', para que pueda aplicar las relaciones 'FOREIGN KEY' y' ON DELETE/UPDATE'. Sin embargo, es probable que esto requiera que los cambios de motor en muchas de sus tablas sean efectivos. –