Articulo de referencia

Llave sustituta

Una clave subrogada (o clave sintética , pseudoclave , identificador de entidad , clave sin hechos o clave técnica ) en una base de datos es un identificador único para una enti...

Una clave subrogada (o clave sintética , pseudoclave , identificador de entidad , clave sin hechos o clave técnica ) en una base de datos es un identificador único para una entidad en el mundo modelado o un objeto en la base de datos. La clave subrogada no se deriva de los datos de la aplicación, a diferencia de una clave natural (o de negocio ) . [ 1 ]

Definición

Existen al menos dos definiciones de madre sustituta:

Sustituto (1) Hall, Owlett y Todd (1976)
Un sustituto representa una entidad del mundo exterior. El sustituto es generado internamente por el sistema, pero no obstante es visible para el usuario o la aplicación. [ 2 ]
Sustituto (2) Wieringa y De Jonge (1991)
Un objeto sustituto representa un objeto en la propia base de datos. El sistema genera internamente el objeto sustituto, que resulta invisible para el usuario o la aplicación.

La definición de Sustituto (1) se refiere a un modelo de datos en lugar de un modelo de almacenamiento y se utiliza a lo largo de este artículo. Véase Date (1998).

Una distinción importante entre una clave sustituta y una clave primaria depende de si la base de datos es actual o temporal . Dado que una base de datos actual almacena solo datos válidos en ese momento , existe una correspondencia uno a uno entre una clave sustituta en el mundo modelado y la clave primaria de la base de datos. En este caso, la clave sustituta puede utilizarse como clave primaria, dando lugar al término clave sustituta . Sin embargo, en una base de datos temporal, existe una relación de muchos a uno entre las claves primarias y la clave sustituta. Dado que puede haber varios objetos en la base de datos que correspondan a una sola clave sustituta, no podemos utilizarla como clave primaria; se requiere otro atributo, además de la clave sustituta, para identificar de forma única cada objeto.

Aunque Hall et al. (1976) no dicen nada al respecto, otros han argumentado que una madre sustituta debería tener las siguientes características:

  • El valor nunca se reutiliza
  • El valor es generado por el sistema.
  • El valor no es manipulable por el usuario ni por la aplicación.
  • El valor no contiene ningún significado semántico.
  • El valor no es visible para el usuario ni para la aplicación.
  • El valor no está compuesto por varios valores de diferentes dominios.

Sustitutos en la práctica

En una base de datos actual , la clave subrogada puede ser la clave primaria , generada por el sistema de gestión de la base de datos y no derivada de ningún dato de la aplicación en la base de datos. La única función de la clave subrogada es actuar como clave primaria. También es posible que la clave subrogada exista además del UUID generado por la base de datos (por ejemplo, un número de RR. HH. para cada empleado distinto del UUID de cada empleado).

Una clave subrogada suele ser un número secuencial (por ejemplo, una "columna de identidad" de Sybase o SQL Server , una de PostgreSQL o Informixserial , una de Oracle o SQL Server SEQUENCEo una columna definida AUTO_INCREMENTen MySQL ). Algunas bases de datos ofrecen UUID / GUID como posible tipo de datos para claves subrogadas (por ejemplo, PostgreSQL UUID[ 3 ] o SQL Server UNIQUEIDENTIFIER[ 4 ] ).

Tener la clave independiente de todas las demás columnas aísla las relaciones de la base de datos de los cambios en los valores de los datos o el diseño de la base de datos [ 5 ] (haciendo que la base de datos sea más ágil ) y garantiza la unicidad.

En una base de datos temporal , es necesario distinguir entre la clave subrogada y la clave de negocio . Cada fila tendrá tanto una clave de negocio como una clave subrogada. La clave subrogada identifica una fila única en la base de datos, mientras que la clave de negocio identifica una entidad única del mundo modelado. Una fila de la tabla representa un segmento de tiempo que contiene todos los atributos de la entidad para un lapso de tiempo definido. Estos segmentos representan la vida útil completa de una entidad de negocio. Por ejemplo, una tabla EmployeeContracts puede contener información temporal para llevar un registro de las horas de trabajo contratadas. La clave de negocio para un contrato será idéntica (no única) en ambas filas, pero la clave subrogada para cada fila es única.

Algunos diseñadores de bases de datos utilizan claves sustitutas de forma sistemática, independientemente de la idoneidad de otras claves candidatas , mientras que otros utilizan una clave que ya está presente en los datos, si existe.

Algunos de los nombres alternativos ("clave generada por el sistema") describen la forma de generar nuevos valores sustitutos, en lugar de la naturaleza del concepto de valor sustituto.

Entre los métodos para generar madres sustitutas se incluyen:

Ventajas

Estabilidad

Las claves subrogadas normalmente no cambian mientras la fila existe. Esto tiene las siguientes ventajas:

  • Las aplicaciones no pueden perder su referencia a una fila en la base de datos (ya que el identificador no cambia).
  • Los datos de la clave primaria o natural siempre se pueden modificar, incluso con bases de datos que no admiten actualizaciones en cascada a través de claves foráneas relacionadas .

Cambios en los requisitos

Los atributos que identifican de forma única a una entidad pueden cambiar, lo que podría invalidar la idoneidad de las claves naturales. Considere el siguiente ejemplo:

El nombre de usuario de red de un empleado se elige como clave natural. Al fusionarse con otra empresa, se deben agregar nuevos empleados. Algunos de los nuevos nombres de usuario de red generan conflictos porque se crearon de forma independiente (cuando las empresas estaban separadas).

En estos casos, generalmente se debe agregar un nuevo atributo a la clave natural (por ejemplo, una columna llamada `original_company` ). Con una clave subrogada, solo se debe modificar la tabla que la define. Con las claves naturales, todas las tablas (y posiblemente otro software relacionado) que las utilicen deberán modificarse.

En algunos dominios problemáticos no se identifica claramente una clave natural adecuada. Las claves sustitutas evitan elegir una clave natural que podría ser incorrecta.

Actuación

Las claves subrogadas suelen ser de un tipo de dato compacto, como un entero de cuatro bytes. Esto permite que la base de datos consulte la columna de clave única más rápido que si consultara varias columnas (que a menudo son de texto, lo cual es aún más lento). Además, una distribución no redundante de claves hace que el índice B-tree resultante esté completamente equilibrado. Las claves subrogadas también son menos costosas de unir (menos columnas para comparar) que las claves compuestas .

Compatibilidad

Al utilizar diversos sistemas de desarrollo de aplicaciones de bases de datos, controladores y sistemas de mapeo objeto-relacional , como Ruby on Rails o Hibernate , resulta mucho más sencillo utilizar claves sustitutas enteras o GUID para cada tabla en lugar de claves naturales, con el fin de admitir operaciones independientes del sistema de base de datos y el mapeo de objetos a filas.

Uniformidad

Cuando todas las tablas tienen una clave subrogada uniforme, algunas tareas se pueden automatizar fácilmente escribiendo el código de forma independiente de la tabla.

Validación

Es posible diseñar pares clave-valor que sigan un patrón o estructura bien definidos y que puedan verificarse automáticamente. Por ejemplo, las claves destinadas a una columna de una tabla podrían diseñarse para que tengan un aspecto diferente al de las destinadas a otra columna o tabla, simplificando así la detección de errores en la aplicación causados ​​por la ubicación incorrecta de las claves. Sin embargo, esta característica de las claves sustitutas nunca debe utilizarse para controlar la lógica de las aplicaciones, ya que esto infringiría los principios de normalización de bases de datos .

Sencillez de las relaciones

Las claves subrogadas simplifican la creación de relaciones de clave externa, ya que solo requieren una columna (a diferencia de las claves compuestas, que requieren varias). Al crear una consulta en la base de datos, olvidar incluir todas las columnas de una clave externa compuesta al unir tablas puede generar resultados inesperados, como un producto cartesiano no deseado .

Desventajas

Disociación

Los valores de las claves subrogadas generadas no guardan relación con el significado real de los datos contenidos en una fila. Al inspeccionar una fila que contiene una referencia de clave externa a otra tabla mediante una clave subrogada, el significado de la fila de la clave subrogada no se puede discernir a partir de la clave misma. Es necesario unir cada clave externa para visualizar el elemento de datos relacionado. Si no se han establecido las restricciones de base de datos adecuadas, o si se han importado datos de un sistema heredado donde no se empleaba la integridad referencial , es posible que un valor de clave externa no se corresponda con un valor de clave primaria y, por lo tanto, sea inválido. (En este sentido, CJ Date considera que la falta de significado de las claves subrogadas es una ventaja. [ 9 ] )

Para detectar estos errores, es necesario realizar una consulta que utilice una combinación externa izquierda entre la tabla con la clave externa y la tabla con la clave primaria, mostrando ambos campos clave además de cualquier otro campo necesario para distinguir el registro; todos los valores de clave externa no válidos tendrán la columna de clave primaria como NULL. La necesidad de realizar esta comprobación es tan común que Microsoft Access ofrece un asistente de "Buscar consultas sin coincidencia" que genera la consulta SQL adecuada tras guiar al usuario a través de un cuadro de diálogo. (Sin embargo, no es demasiado difícil crear estas consultas manualmente). Las consultas de "Buscar consultas sin coincidencia" se suelen emplear como parte de un proceso de limpieza de datos al heredar datos heredados.

Las claves subrogadas no son adecuadas para datos que se exportan y comparten. Una dificultad particular radica en que las tablas de dos esquemas idénticos (por ejemplo, un esquema de prueba y uno de desarrollo) pueden contener registros equivalentes desde el punto de vista empresarial, pero con claves diferentes. Esto se puede mitigar evitando la exportación de claves subrogadas, salvo como datos transitorios (principalmente en aplicaciones en ejecución con conexión directa a la base de datos).

Cuando las claves sustitutas reemplazan a las claves naturales, la integridad referencial específica del dominio se ve comprometida. Por ejemplo, en una tabla maestra de clientes, un mismo cliente puede tener varios registros con diferentes identificadores, aunque la clave natural (una combinación de nombre, fecha de nacimiento y dirección de correo electrónico) sea única. Para evitar esta vulnerabilidad, la clave natural de la tabla no debe ser reemplazada: debe conservarse como una restricción de unicidad , implementada como un índice único en la combinación de campos de clave natural.

Optimización de consultas

Las bases de datos relacionales asumen que se aplica un índice único a la clave primaria de una tabla. Este índice único cumple dos funciones: (i) garantizar la integridad de la entidad, ya que los datos de la clave primaria deben ser únicos en todas las filas, y (ii) facilitar la búsqueda rápida de filas al realizar consultas. Dado que las claves sustitutas reemplazan los atributos identificativos de una tabla (la clave natural ) y que es probable que estos atributos sean los que se consultan, el optimizador de consultas se ve obligado a realizar un escaneo completo de la tabla al procesar consultas probables. La solución a este escaneo completo consiste en aplicar índices a los atributos identificativos, o a conjuntos de ellos. Cuando dichos conjuntos constituyen una clave candidata , el índice puede ser un índice único.

Sin embargo, estos índices adicionales ocuparán espacio en disco y ralentizarán las inserciones y eliminaciones.

Normalización

Las claves subrogadas pueden generar valores duplicados en las claves naturales . Para evitar la duplicación, es necesario preservar la función de las claves naturales como restricciones únicas al definir la tabla mediante la instrucción SQL CREATE TABLEo ALTER TABLE ... ADD CONSTRAINTla instrucción, si las restricciones se agregan posteriormente.

Modelado de procesos de negocio

Dado que las claves sustitutas no son naturales, pueden surgir fallos al modelar los requisitos del negocio. Estos requisitos, que dependen de la clave natural, deben entonces traducirse a la clave sustituta. Una estrategia consiste en establecer una clara distinción entre el modelo lógico (en el que no aparecen claves sustitutas) y la implementación física de dicho modelo, para garantizar que el modelo lógico sea correcto y esté razonablemente bien normalizado, y que el modelo físico sea una implementación correcta del modelo lógico.

Divulgación involuntaria

La información confidencial puede filtrarse si las claves subrogadas se generan secuencialmente. Al restar una clave secuencial generada previamente de una clave secuencial generada recientemente, se podría conocer el número de filas insertadas durante ese período. Esto podría revelar, por ejemplo, el número de transacciones o cuentas nuevas por período. Véase, por ejemplo, el problema del tanque alemán .

Hay varias maneras de superar este problema:

  • aumentar el número secuencial en una cantidad aleatoria;
  • generar una clave aleatoria como un UUID .

Suposiciones involuntarias

Las claves subrogadas generadas secuencialmente pueden implicar que los eventos con un valor de clave más alto ocurrieron después de eventos con un valor más bajo. Esto no es necesariamente cierto, ya que dichos valores no garantizan la secuencia temporal, pues es posible que las inserciones fallen y dejen huecos que podrían rellenarse posteriormente. Si la cronología es importante, la fecha y la hora deben registrarse por separado.

Véase también

Referencias

Citas

  1. "¿Qué es una clave sustituta? - Definición de Techopedia" . Techopedia.com . 15 de junio de 2017. Consultado el 21 de febrero de 2020 .
  2. PAV Hall, J Owlett, SJP Todd, "Relaciones y entidades", Modelado en sistemas de gestión de bases de datos (ed. GM Nijssen) , North Holland 1976.
  3. "8.12. Tipo de UUID" . 9 de mayo de 2024.
  4. "Identificador único (Transact-SQL) - SQL Server" . 23 de mayo de 2023.
  5. Este artículo se basa en material tomado de Surrogate+key en el Free On-line Dictionary of Computing antes del 1 de noviembre de 2008 e incorporado bajo los términos de "relicencia" de la GFDL , versión 1.3 o posterior.
  6. "Referencia del lenguaje SQL para bases de datos" .
  7. "CREATE SEQUENCE (Transact-SQL) - SQL Server" . 29 de diciembre de 2022.
  8. "Autoincremento SQLite" . SQLite . 2017-02-02 . Consultado el 2022-12-02 .
  9. CJ Fecha. La primacía de las claves primarias. De "Relational Database Writings, 1991-1994". Addison-Wesley, Reading, MA.

Fuentes

  • Nijssen, GM (1976). Modelado en Sistemas de Gestión de Bases de Datos . Pub de Holanda Septentrional. ISBN del condado 0-7204-0459-2.
  • Engles, RW: (1972), Un tutorial sobre organización de bases de datos , Annual Review in Automatic Programming, Vol. 7, Parte 1, Pergamon Press, Oxford, pp.  1–64.
  • Langefors, B (1968). Archivos elementales y registros de archivos elementales , Actas del Archivo 68, un seminario internacional IFIP/IAG sobre organización de archivos, Ámsterdam, noviembre, págs.  89-96.
  • Wieringa, Roel; de Jonge, Wiebren (1991). La identificación de objetos y roles - Identificadores de objetos revisados ​​(PDF) (Informe técnico). Informe Técnico / Facultad de Matemáticas e Informática. vol.  IR-267. Ámsterdam: Facultad de Matemáticas e Informática, Vrije Universiteit. CiteSeerX 10.1.1.16.3195 . Consultado el 2 de diciembre de 2022 . 
  • Date, CJ (1998). «Capítulos 11 y 12». Relational Database Writings 1994–1997 . Addison-Wesley. ISBN 0201398141.
  • Carter, Breck. "Claves inteligentes versus claves sustitutas" . Consultado el 3 de diciembre de 2006 .
  • Richardson, Lee. "Crear un desastre de datos: evitar índices únicos (error 3 de 10)" . Archivado del original el 30 de enero de 2008. Consultado el 19 de enero de 2008 .
  • Berkus, Josh. "Sopa de bases de datos: Clave primaria, Parte I" . Recuperado el 3 de diciembre de 2006 .