Hoy os vengo a hablar de una característica de SQL Server y las bases de datos de SQL en Azure que normalmente no se usa pero que es muy importante. La opción ROWGUIDCOL cuando estamos definiendo el tipo de datos de nuestras tablas.
ATENCIÓN este artículo es de nivel avanzado, no sufras si no entiendes nada ahora mismo. Te recomiendo investigar sobre los nuevos conceptos que te encuentres y no sepas de que van. Yo voy a intentar enlazarte con anteriores artículos relacionados o documentación extra siempre que sea posible.
¿Qué es ROWGUIDCOL y por qué es importante?
ROWGUIDCOL es una propiedad que vamos a poner a nuestras columnas GUID (identificadores globales). Aunque se puede poner en columnas con otros tipos de datos lo normal es usarlo en campos de tipo Uniqueidentifier. Es especialmente útil en entornos con distintas bases de datos pues nos va a permitir que la clave sea única entre todas las bases de datos.
NEWSECUENTIALID
Si además acompañamos la propiedad ROWGUIDCOL con un valor por defecto NEWSECUENTIALID() en lugar del tradicional NEWID() vamos a conseguir un mejor resultado. La diferencia entre estas dos funciones es que mientras NEWID genera un GUID aleatorio NEWSECUENTIALID va a generar un GUID mayor que cualquier otro generado desde el último reinicio del servidor. También está preparado para trabajar correctamente en entornos de clúster por lo que si tienes un balanceo en tu AlwaysOn va a tener en cuenta los valores generados anteriormente en el otro nodo.
NEWSECUENTIALID es mejor en términos de rendimiento ya que no tiene que generar la aleatoriedad de NEWID y, por tanto, consume menos recursos de páginas en la caché. Además usar NEWSECUENTIALID nos va a ayudar a llenar completamente las páginas de datos e índices y a permitir un FILLFACTOR del 100%. Por contra, el hecho de generar identificadores globales mayores puede ser un riesgo de seguridad. Si la privacidad es clave en tus sistemas seguramente prefieras un GUID totalmente aleatorio y que no se pueda estimar cual es el próximo valor.
Usos Prácticos de ROWGUIDCOL
Como ya hemos visto, la propiedad ROWGUIDCOL puede sernos útil en escenarios donde necesitamos una clave primaria que sea única en todas las bases de datos, no sólo en una base de datos individual. Por ejemplo, estamos desarrollando una aplicación que necesita sincronizar datos entre varias bases de datos, usaremos ROWGUIDCOL para asegurar que cada fila tiene un identificador único en todas las bases de datos.
ROWGUIDCOL en la replicación
Además de lo que ya hemos visto, ROWGUIDCOL es extremadamente útil en escenarios de replicación. En la replicación, a menudo es necesario tener una forma de identificar de manera única cada fila en una tabla. ROWGUIDCOL proporciona una forma fácil de hacer esto sin tener que generar manualmente valores únicos.
Si tenemos una replicación de mezcla (Merge Replication) SQL Server usará el campo marcado como ROWGUIDCOL para identificar las filas. Esto puede sernos un inconveniente ya que no podremos luego usar nosotros ese campo para filtros en la replicación. También es importante que sepas que si configuras una replicación de mezcla sobre una tabla con una columna ROWGUIDCOL SQL asignará automáticamente el valor de NEWSECUENTIALID() como por defecto para esta columna.
Conclusión
El tema de los identificadores únicos para nuestros datos da mucho juego, hoy hemos profundizado en uno de sus aspectos más complejos en SQL Server pero siempre se puede ir un poco más allá. Si te has quedado con ganas de más te recomiendo este artículo del blog de Microsoft en el que se explica cómo se ordenan estos uniqueidentifier hexadecimales.
Si tenéis alguna duda o sugerencia, podéis dejarla en Twitter, por mail o dejarnos un mensaje en los comentarios. Y recuerda que también tenemos un grupo de Telegram y un canal de YouTube a los que te puede unir. ¡Hasta la próxima!

