¿Cómo recuerda Youtube los Me gusta?

Así que me pregunto cómo los sitios como YouTube recuerdan cuando un usuario ha “Me gusta” un video y evita que les vuelva a gustar. Del mismo modo, la forma en que un sitio como Reddit recuerda los upvotes y los downvotes e impide que un usuario vote por encima de una parte del contenido que ya votó por encima.

¿Es tan simple como una tabla de base de datos donde se almacena el ID del contenido junto con la ID del usuario y su respuesta? Siento que eso se convertiría en una enorme mesa enorme. ¿Hay algo más complicado?

Tengo un sistema like / dislike en mi página.

Tablas de base de datos

1.) Uno que contenga sus publicaciones con un ID único para cada publicación y un user_id de quién lo creó (junto con otra información como contenido, tags, etc.).

2.) tabla llamada me gusta con POR LO MENOS los siguientes campos, ID, post_id (corresponde a la publicación en la tabla de publicaciones que le gustó o no), user_id (corresponde al usuario en la tabla de usuarios que le gustó / disgustó), estado (0 o 1, 0 a la que le gusta la publicación, 1 a la que no le gusta la publicación).

Cuando a un usuario le gusta una publicación, inserte la fila en la tabla de Me gusta con su user_id y post_id, establezca el estado como 0 (o simplemente déjelo en blanco porque 0 es el valor predeterminado). Cuando un usuario no le gusta una publicación, haga lo mismo, pero establezca el estado como 1.

De esta forma, en una página de publicación puede obtener el recuento de todos los usuarios a los que les gustó o les disgustó una publicación. En la página de perfil de un usuario, puede obtener todas las publicaciones que le gustan o no a un usuario. También puedes clasificar publicaciones por las que más me gusta o no me gusta. O incluso clasifique los usuarios específicos por quién ha publicado contenido con la mayoría de los “me gusta” o “no me gusta”.

No permita que a los usuarios les guste / desagrade una publicación si ya tienen un registro en la base de datos. (Básicamente solo verifique el recuento de registros en la tabla de Me gusta donde post_id es igual a la publicación actual y user_id es igual al usuario que inició sesión)

Haga una referencia cruzada a la tabla de publicaciones para obtener el user_id del autor de la publicación. Si el autor de la publicación user_id es el mismo que el usuario que inició sesión, o el usuario NO está actualmente conectado, no les permita votar.

Las consultas para hacer todo eso son simples (simplemente SELECCIONAR * o SELECCIONAR user_id) pero esa es la idea básica.

Los sitios requieren que inicie sesión antes de hacer clic en “me gusta” y “upvote”. El documento de contenido en el DB tendrá un campo que almacenará la cantidad de “me gusta” recibidos. Antes de que se muestre el botón “me gusta”, los sitios verificarán los registros del usuario registrado en el DB, para comprobar si ya le ha gustado, por lo que se mostrará una opción “me gusta” o “diferente”.

Si marca aquí en Stackoverflow, si hace clic en “voto a favor” en su propia pregunta o respuesta, aparece un mensaje que dice que no puede votar por nuestra propia publicación. Lo que ocurre es que al hacer clic en “voto popular”, se enviará una solicitud ajax al servidor con la identificación del usuario y otra información como identificación de la pregunta, etc. y el código del servidor verificará si se permite votar, es decir, su ID de usuario no debe ser la misma como la identificación del creador de la publicación.

Sí, es así de simple. Generalmente, los sitios usan direcciones IP, por lo que los usuarios no votan dos veces en cuentas diferentes.

editar: Lo siento, estaba equivocado. Según Quentin, los sitios web no se basan en IP debido a la posibilidad de que varios usuarios tengan la misma IP y no intenten explotar el sistema. Los sitios de escala más pequeña (al menos algunos de los que he usado) han implementado un sistema de votación basado en IP porque de lo contrario sería más fácil manipular la clasificación de contenido.