Número 36
30 de novembro de 2022

Distinguide as cousas distintas

Era o ano 2002, os weblogs estaban de moda, Martiño quería facer un e, como era de rigor daquela, decidiu escribir o seu propio software de weblogs. Había que facelo ben, así que comezou deseñando o modelo de datos: usuarios, artigos e comentarios.

—Un momento! —dixo Martiño—. Os artigos e os comentarios son case a mesma cousa! Teñen un autor, teñen un título e teñen un texto. Teñen relacións pai/fillo. Podo facer que os dous sexan a mesma entidade no meu modelo de datos, e aforrar unha morea de código!

E así o fixo. Puxo os artigos e os comentarios na mesma táboa da base de datos e, para distinguir entre eles, engadiu un campo chamado “tipo”. Despois púxose a programar, e todas as funcións que accedían a artigos tiñan unha condición “tipo=artigo” e todas as que accedían a comentarios tiñan a condición “tipo=comentario”. Por suposto, había algúns campos desa entidade unificada que non utilizaba nos artigos, ou outros campos que non usaba nos comentarios.

Unha pera e unha laranxa.Dúas pezas de froita que podo facer que sexan a mesma entidade e aforrar unha morea de código.

Un día quixo ter páxinas estáticas no seu software de weblog e dixo:

—Un momento! As páxinas, os artigos e os comentarios son case a mesma cousa! Teñen un autor, teñen un título e teñen un texto. Podo facer que os tres sexan a mesma entidade!

E así o fixo, e agora as funcións que accedían ás páxinas tiñan a condición “tipo=páxina” e tamén había campos que só usaba nas páxinas e outros que non utilizaba nelas.

Uns anos despois, logo de ter traballado co seu software e sufrido as consecuencias do seu deseño, díxome:

—No final, todo iso de unificar os artigos, os comentarios e as páxinas nun só tipo de entidade no meu modelo de datos non me facilitou nada. Os tres estaban na mesma táboa na base de datos, pero os campos que empregaban eran diferentes, o que se podía facer con eles era diferente, as súas aparencias eran diferentes e os tres utilizaban código diferente. Parecía que eran moi semellantes, pero resultaron ser tres cousas totalmente distintas.

Ese foi o erro de Martiño: viu dúas cousas que parecían moi semellantes, ou das que unha parecía un caso especial da outra, e unificounas no seu modelo. Despois, cando levou ese deseño á práctica e viu que tiña que engadir condicións para manipular as entidades do tipo correcto (“tipo=comentario”) ou que moitos campos da táboa eran só relevantes nun tipo de entidade, decatouse de que esa unificación daba máis traballo do que aforraba.

Mellor lle tería sido ter tres táboas: unha para artigos, outra para comentarios e outra para páxinas.

Isto veume á cabeza por causa dun problema que tivo algunha xente que migrou de Twitter a Mastodon. No medio dunha conversa por mensaxes directas descubriron que, cando mencionaban a un terceiro polo seu nome de usuario, esa persoa recibía unha copia desa mensaxe.

Iso non é o que un espera que pase cando está a lerchear!

Iso ocorreu porque, en Mastodon, as mensaxes directas non existen, senón que son mensaxes normais pero só visibles para as persoas mencionadas nelas. Cando un menciona a alguén nunha mensaxe directa, esa mensaxe tamén se fai visible para esa persoa, que recibe unha copia dela.

Seguro que a persoa que engadiu as mensaxes directas a Mastodon pensou:

—Un momento! As mensaxes directas e as mensaxes visibles só para as persoas mencionadas nelas son case a mesma cousa! Teñen un texto, teñen un autor e teñen un destinatario. Podo facer que os dous sexan a mesma entidade no meu modelo de datos e así aforrar unha morea de código!

A ilustración desta Folla é unha combinación de imaxes producidas mediante intelixencia artificial.