Clave sustituta
Una clave sustituta (o clave sintética, pseudoclave, identificador de entidad, clave sin datos, 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 sustituta no se deriva de los datos de la aplicación, a diferencia de una clave natural (o comercial).
Definición
Hay al menos dos definiciones de madre sustituta:
- Surrogate (1) – Hall, Owlett y Todd (1976)
- Un sustituto representa un entidad en el mundo exterior. El sustituto es generado internamente por el sistema, pero es visible al usuario o aplicación.
- Surrogate (2) – Wieringa y De Jonge (1991)
- Un sustituto representa un objeto en la propia base de datos. El sustituto es generado internamente por el sistema y es invisible para el usuario o aplicación.
La definición Sustituto (1) se relaciona con un modelo de datos en lugar de un modelo de almacenamiento y se utiliza a lo largo de este artículo. Ver Fecha (1998).
Una distinción importante entre una clave sustituta y una clave primaria depende de si la base de datos es una base de datos actual o una base de datos temporal. Dado que una base de datos actual almacena sólo datos actualmente válidos, existe una correspondencia uno a uno entre un sustituto en el mundo modelado y la clave primaria de la base de datos. En este caso, la clave sustituta se puede utilizar como clave principal, lo que da como resultado el 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 sustituta. Dado que puede haber varios objetos en la base de datos correspondientes a un único sustituto, no podemos utilizar el sustituto como clave principal; Se requiere otro atributo, además del sustituto, para identificar de forma única cada objeto.
Aunque Hall et al. (1976) no dice nada al respecto, otros han argumentado que una madre sustituta debe tener las siguientes características:
- el valor nunca se reutiliza
- el valor se genera
- el valor no es manipulable por el usuario o la aplicación
- el valor no contiene significado semántico
- el valor no es visible para el usuario o aplicación
- el valor no se compone de varios valores de diferentes dominios.
Sustitutos en la práctica
En una base de datos actual, la clave sustituta puede ser la clave principal, generada por el sistema de gestión de la base de datos y no derivada de ningún dato de aplicación en la base de datos. El único significado de la clave sustituta es actuar como clave principal. También es posible que exista la clave sustituta además del UUID generado por la base de datos (por ejemplo, un número de recursos humanos para cada empleado que no sea el UUID de cada empleado).
Una clave sustituta es frecuentemente un número secuencial (por ejemplo, una "columna de identidad" de Sybase o SQL Server, un AUTO_INCREMENT
en MySQL). Algunas bases de datos proporcionan UUID/GUID como posible tipo de datos para claves sustitutas (por ejemplo, PostgreSQL UUID o SQL Server UNIQUEIDENTIFIER).
Tener la clave independiente de todas las demás columnas aísla las relaciones de la base de datos de cambios en los valores de los datos o en el diseño de la base de datos (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 sustituta y la clave comercial. Cada fila tendría una clave comercial y una clave sustituta. La clave sustituta identifica una fila única en la base de datos, la clave comercial identifica una entidad única del mundo modelado. Una fila de la tabla representa un período de tiempo que contiene todos los atributos de la entidad durante un período de tiempo definido. Esas porciones representan toda la vida útil de una entidad comercial. Por ejemplo, una tabla EmployeeContracts puede contener información temporal para realizar un seguimiento de las horas de trabajo contratadas. La clave comercial para un contrato será idéntica (no única) en ambas filas; sin embargo, la clave sustituta para cada fila es única.
Surrogate Clave | BusinessKey | EmployeeName | WorkingHoursPerWeek | RowValidDesde | RowValidTo |
---|---|---|---|---|---|
1 | BOS0120 | John Smith | 40 | 2000-01-01-01 | 2000-12-31 |
56 | P0000123 | Bob Brown | 25 | 1999-01-01 | 2011-12-31 |
234 | BOS0120 | John Smith | 35 | 2001-01-01 | 2009-12-31 |
Algunos diseñadores de bases de datos utilizan claves sustitutas sistemáticamente independientemente de la idoneidad de otras claves candidatas, mientras que otros utilizarán una clave ya presente en los datos, si es que existe alguna.
Did you mean:Some of the alternate names ("system-generated key and#34;) describe the way of generating new surrogate values rather than the nature of the surrogate concept.
Los enfoques para generar sustitutos incluyen:
- Identificadores universalmente únicos (UUID)
- Globally Unique Identifiers (GUIDs)
- Identificadores de objetos (OIDs)
- Sybase o SQL Columna de identidad del servidor
IDENTITY
OIDENTITY(n,n)
- Oracle
SEQUENCE
, oGENERATED AS IDENTITY
(comenzando desde la versión 12.1) - SQL Server
SEQUENCE
(comenzando desde SQL Server 2012) - PostgreSQL o IBM Informix serial
- MySQL
AUTO_INCREMENT
- SQLite
INTEGER PRIMARY KEY
(siAUTOINCREMENT
es utilizado evitará la reutilización de los números que ya se han utilizado pero están disponibles) - Tipo de datos AutoNumber en Microsoft Access
AS IDENTITY GENERATED BY DEFAULT
en IBM Db2 " PostgreSQL.- Columna de identidad (emplementada en DDL) en Teradata
- Secuencia de la tabla cuando la secuencia se calcula mediante un procedimiento y una tabla de secuencia con campos: id, secuenciaName, secuenciaValue y aumento Valor
Ventajas
Estabilidad
Las claves sustitutas normalmente no cambian mientras existe la fila. 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 clave primarios o naturales siempre pueden ser modificados, incluso con bases de datos que no soportan actualizaciones de cascada en claves extranjeras relacionadas.
Cambios de requisitos
Los atributos que identifican de forma única una entidad pueden cambiar, lo que podría invalidar la idoneidad de las claves naturales. Considere el siguiente ejemplo:
- El nombre de usuario de la red de un empleado es elegido como una llave natural. Al fusionarse con otra empresa, deben insertarse nuevos empleados. Algunos de los nuevos nombres de usuarios de la red crean conflictos porque sus nombres de usuario fueron generados independientemente (cuando las empresas estaban separadas).
En estos casos, generalmente se debe agregar un nuevo atributo a la clave natural (por ejemplo, una columna original_company). Con una clave sustituta, solo se debe cambiar la tabla que define la clave sustituta. Con claves naturales, todas las tablas (y posiblemente otro software relacionado) que utilicen la clave natural tendrán que cambiar.
Algunos dominios problemáticos no identifican claramente una clave natural adecuada. Las claves sustitutas evitan elegir una clave natural que pueda ser incorrecta.
Rendimiento
Las claves sustitutas tienden a ser un tipo de datos compacto, como un entero de cuatro bytes. Esto permite que la base de datos consulte una sola columna de clave más rápido que varias columnas. Además, una distribución no redundante de claves hace que el índice del árbol b resultante esté completamente equilibrado. Las claves sustitutas también son menos costosas de unir (menos columnas para comparar) que las claves compuestas.
Compatibilidad
Al utilizar varios sistemas de desarrollo de aplicaciones de bases de datos, controladores y sistemas de mapeo relacional de objetos, como Ruby on Rails o Hibernate, es mucho más fácil usar un número entero o claves sustitutas GUID para cada tabla en lugar de claves naturales para admite operaciones independientes del sistema de base de datos y mapeo de objeto a fila.
Uniformidad
Cuando cada tabla tiene una clave sustituta uniforme, algunas tareas se pueden automatizar fácilmente escribiendo el código de forma independiente de la tabla.
Validación
Es posible diseñar valores-clave que sigan un patrón o estructura bien conocido que pueda verificarse automáticamente. Por ejemplo, las claves que están destinadas a usarse en alguna columna de alguna tabla pueden estar diseñadas para "verse diferentes" de las claves que están destinadas a usarse en alguna columna de alguna tabla. aquellas que están destinadas a ser utilizadas en otra columna o tabla, simplificando así la detección de errores de aplicaciones en las que se han extraviado las claves. Sin embargo, esta característica de las claves sustitutas nunca debe usarse para controlar la lógica de las aplicaciones mismas, ya que esto violaría los principios de normalización de bases de datos.
Desventajas
Did you mean:Dissociation
Los valores de las claves sustitutas generadas no tienen relación con el significado del mundo real de los datos contenidos en una fila. Al inspeccionar una fila que contiene una referencia de clave externa a otra tabla usando una clave sustituta, el significado de la fila de la clave sustituta no se puede discernir a partir de la clave misma. Cada clave externa debe estar unida para ver el elemento de datos relacionado. Si no se han establecido las restricciones adecuadas de la base de datos, o si no se han importado datos de un sistema heredado donde no se empleó la integridad referencial, es posible tener un valor de clave externa que no corresponda a un valor de clave primaria y, por lo tanto, no sea válido. (En este sentido, C.J. Date considera que la falta de sentido de las claves sustitutas es una ventaja).
Para descubrir tales errores, se debe realizar una consulta que utilice una combinación externa izquierda entre la tabla con la clave externa y la tabla con la clave principal, mostrando ambos campos clave además de cualquier campo requerido para distinguir el registro; todos los valores de clave externa no válidos tendrán la columna de clave principal como NULL. La necesidad de realizar dicha verificación es tan común que Microsoft Access proporciona una función "Buscar consulta no coincidente" asistente que genera el SQL apropiado después de guiar al usuario a través de un cuadro de diálogo. (Sin embargo, no es demasiado difícil redactar este tipo de consultas manualmente). "Buscar no coincidente" Las consultas suelen emplearse como parte de un proceso de limpieza de datos cuando se heredan datos heredados.
Las claves sustitutas no son naturales para los datos que se exportan y comparten. Una dificultad particular es que las tablas de dos esquemas idénticos (por ejemplo, un esquema de prueba y un esquema de desarrollo) pueden contener registros que son equivalentes en un sentido comercial, pero que tienen claves diferentes. Esto se puede mitigar NO exportando claves sustitutas, excepto como datos transitorios (más obviamente, al ejecutar aplicaciones que tienen una conexión "en vivo" a la base de datos).
Cuando las claves sustitutas reemplazan a las claves naturales, la integridad referencial específica del dominio se verá comprometida. Por ejemplo, en una tabla maestra de clientes, el mismo cliente puede tener varios registros con ID de cliente separados, aunque la clave natural (una combinación de nombre del cliente, fecha de nacimiento y dirección de correo electrónico) sea única. Para evitar compromisos, la clave natural de la tabla NO debe ser reemplazada: debe preservarse como una restricción única, que se implementa como un índice único en la combinación de campos de clave natural.
Optimización de consultas
Las bases de datos relacionales suponen que se aplica un índice único a la clave principal de una tabla. El índice único tiene dos propósitos: (i) hacer cumplir la integridad de la entidad, ya que los datos de la clave principal deben ser únicos en todas las filas y (ii) buscar filas rápidamente cuando se consultan. Dado que las claves sustitutas reemplazan los atributos de identificación de una tabla (la clave natural) y dado que es probable que los atributos de identificación sean los consultados, el optimizador de consultas se ve obligado a realizar un escaneo completo de la tabla cuando cumple con las consultas probables. La solución al escaneo completo de la tabla es aplicar índices a los atributos de identificación o conjuntos de ellos. Cuando dichos conjuntos son en sí mismos una clave candidata, el índice puede ser un índice único.
Sin embargo, estos índices adicionales ocuparán espacio en el disco y ralentizarán las inserciones y eliminaciones.
Normalización
Las claves sustitutas pueden generar valores duplicados en cualquier clave natural. Para evitar la duplicación, se debe preservar la función de las claves naturales como restricciones únicas al definir la tabla utilizando la instrucción CREATE TABLE
de SQL o ALTER TABLE... ADD CONSTRAINT declaración, si las restricciones se agregan como una ocurrencia tardía.
Modelado de procesos de negocio
Debido a que las claves sustitutas no son naturales, pueden aparecer fallas al modelar los requisitos comerciales. Los requisitos comerciales que dependen de la clave natural deben traducirse a la clave sustituta. Una estrategia es trazar una distinción clara entre el modelo lógico (en el que no aparecen claves sustitutas) y la implementación física de ese modelo, para garantizar que el modelo lógico sea correcto y razonablemente bien normalizado, y para garantizar que el modelo físico sea correcto. una correcta implementación del modelo lógico.
Divulgación involuntaria
La información de propiedad puede filtrarse si las claves sustitutas 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 de tiempo. Esto podría exponer, por ejemplo, el número de transacciones o cuentas nuevas por período. Por ejemplo, consulte el problema de los tanques alemanes.
Hay algunas maneras de superar este problema:
- aumentar el número secuencial por una cantidad aleatoria;
- generar una clave aleatoria como un UUID.
Suposiciones inadvertidas
Las claves sustitutas 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, porque dichos valores no garantizan la secuencia temporal, ya que es posible que las inserciones fallen y dejen espacios que pueden llenarse más adelante. Si la cronología es importante entonces la fecha y la hora deben registrarse por separado.
Contenido relacionado
Línea A20
Confusión y difusión
Cabeza (Unix)