Alguna vez hemos necesitado hacer formar parte de una clave única en la base de datos un campo cuyo contenido correspondía a un tipo varchar/2 (una frase, un nombre de archivo …). Normalmente esto no se debe hacer, si bien, cuando esto es necesario, aún la base de datos más flexible -mysql por ejemplo- solo permite que una “unique key” tenga 255 caracteres como máximo.
La solución para estos casos, pasa por crear un campo auxiliar que contenga el valor md5 del campo, el cual utilizaremos como parte de la clave única, ya que este campo sólo requiere que sea un char(32).
Por ejemplo, supongamos que tenemos un campo abierto, en el que los usuarios pueden introducir libremente sus preferencias, delimitada cada una por un carácter (se supone un sistema ideal en el que el usuario no comete errores tipográficos). Posteriormente, necesitamos hacer un análisis de dichas preferencias y extraer las frecuencias de cada una de ellas y desechar las que no nos sirven.
Para ello, las preferencias únicas son almacenadas de forma discreta, pero queremos evitar que aparezcan repetidas en las base de datos, es decir, que sean “unique key”. En este caso lo mejor que podemos hacer es calcular el valor md5 de la preferencia y almacenarlo en un campo paralelo, y utilizarlo como parte o en sí como clave única.
Este ejemplo quizás resulte un poco oscuro, quizás mucho más claro sea aplicar el método anterior al almacenamiento de nombres de archivos que deben formar parte de una clave primaria.