Buscar

Del spot a la obra
Del spot a la obra

La publicidad tradicional ha funcionado, en gran medida, como una disciplina de impacto: captar…

Arquitectura digital
Arquitectura digital

Hace no tanto, buena parte de la conversación sobre innovación en marketing giraba alrededor de una…

Login sin contraseñas
Login sin contraseñas

Las contraseñas no fallan porque la gente sea “despistada”. Fallan porque el propio modelo está…

SQL: ¿Por qué evitar el incremento automático?

  • Compartir esto:

Identificación de las entidades

Uno de estos problemas está directamente relacionado con la identificación (ID) de las entidades.

La clave primaria

Una base de datos relacional “es una colección de items de datos” con relaciones predefinidas entre ellos. Es, por tanto, un grafo en que los nodos se llaman entidades y las aristas son las relaciones. Para expresar una relación entre entidades necesitamos referir a una entidad de forma única, y es para ello que sirve la clave primaria.

Número de serie

Algunos proyectos — seguro que todos los tuyos — utilizan el número de serie para tener claves primarias estables, ya que los número de series son claves técnicas y no están relacionados con los contenidos de su entidad.

  • Enumeraciones de entidades. Otro problema, relacionado con el anterior, es que es muy fácil enumerar las entidades en una tabla, ya que empiezas con el valor 1 y vas incrementando el valor. Así es muy fácil “rascar” datos de todas tus entidades, ya que cualquier spammer que descubra que no controlas correctamente el acceso al contenido puede acceder a esta información, también mediante una URL, de cualquier entidad.
  • No unicidad entre tablas. Cada tabla tiene su propia secuencia y cada valor idéntico (p.e.1) se puede encontrar como clave primaria de entidades diferentes. Si te equivocas eliminando una línea de otra entidad cualquiera en tu base de datos, tendrás problemas. Estos problemas son aún mayores si tienes configuradas reglas ON DELETE CASCADE.

¿Cuál es la solución?

Creo que en el mundo IT todos los problemas tienen solución. Podrías hacer algún workaround, como por ejemplo empezar la secuencia en un punto arbitrario, o que el valor de incremento sea mayor que uno, o incluso compartir la secuencia entre las tablas. Lo que pasa es que seguirás divulgando información sobre el crecimiento de la base de datos y alcanzarás rápidamente el desbordamiento de enteros.

¿Por qué los UUIDs pueden ser una buena alternativa?

Los UUIDs, por ejemplo los UUIDv4, se basan en la aleatoriedad. Esto significa que no puedes garantizar la unicidad, pero la probabilidad de colisión es muy pequeña.

  • No puedes saber cuántos valores hay actualmente en cada tabla
  • No tienes que comunicar con la base de datos para construir un valor

¿Cómo generar UUIDs de forma fácil?

Recuerda que en sistemas como MySQL o PostgreSQL tienes disponibles tipos de columna uuid que te permiten generar uuids de forma fácil. Si por casualidad el motor que utilizas para tus bases de datos no lo permite hacer de forma nativa para valores de UUIDv4, puedes usar extensiones para lograrlo. También puedes generar UUIDs en tu lenguaje o framework de programación preferido, utilizando Java, Scala, Node.js, Python, o PHP.

Hazte miembro

Recibe las últimas novedades directamente en tu correo. Sin spam.

Comentarios