DB2 Auto generado columna / GENERADO SIEMPRE pros y contras sobre secuencia

StackOverflow https://stackoverflow.com/questions/1026936

  •  06-07-2019
  •  | 
  •  

Pregunta

Anteriormente estábamos usando ' GENERADO SIEMPRE ' para generar los valores para una clave primaria. Pero ahora se sugiere que deberíamos, en lugar de usar 'SIEMPRE GENERADO', usar la secuencia para completar el valor de la clave primaria. ¿Cuál crees que puede ser la razón de este cambio? ¿Es solo una cuestión de elección?

Código anterior:

CREATE TABLE SCH.TAB1
 (TAB_P         INTEGER         NOT NULL GENERATED ALWAYS AS IDENTITY (START WITH 1, INCREMENT BY 1, NO CACHE),
.
.
);

Ahora es

CREATE TABLE SCH.TAB1
 (TAB_P         INTEGER ),
.
.
);

ahora mientras inserta, genere el valor para TAB_P a través de la secuencia.

¿Fue útil?

Solución

Tiendo a usar columnas de identidad más que secuencias, pero las compararé por usted.

Las secuencias pueden generar números para cualquier propósito, mientras que una columna de identidad está estrictamente unida a una columna en una tabla.

Dado que una secuencia es un objeto independiente, puede generar números para varias tablas (o cualquier otra cosa), y no se ve afectada cuando se descarta cualquier tabla. Cuando se descarta una tabla con una columna de identidad, no hay memoria del último valor asignado por esa columna de identidad.

Una tabla solo puede tener una columna de identidad, por lo que si desea registrar múltiples números secuenciales en diferentes columnas de la misma tabla, los objetos de secuencia pueden manejar eso.

El requisito más común para un generador de números secuenciales en una base de datos es asignar una clave técnica a una fila, que se maneja bien mediante una columna de identidad. Para necesidades de generación de números más complicadas, un objeto de secuencia ofrece más flexibilidad.

Otros consejos

Esto podría ser para manejar identificadores en caso de que haya muchas eliminaciones en la tabla.

Por ejemplo: en caso de identidad, si sus identificadores son 1 2 3

Ahora, si elimina el registro 3, su tabla tendrá 1 2

Y luego, si inserta un nuevo registro, los identificadores serán 1 2 4

A diferencia de esto, si no está utilizando una columna de identidad y está generando la identificación utilizando el código, luego de eliminar para la nueva inserción, puede calcular la identificación como max (id) + 1, por lo que los identificadores estarán en orden 1 2 3

No puedo pensar en ninguna otra razón, por qué no se debe usar una columna de identidad.

Aquí hay algo que encontré en el sitio publib:

Comparación de columnas y secuencias de IDENTIDAD

Si bien existen similitudes entre las columnas y secuencias IDENTITY, también hay diferencias. Las características de cada uno se pueden utilizar al diseñar su base de datos y aplicaciones.

Una columna de identidad tiene las siguientes características:

  • Una columna de identidad se puede definir como parte de una tabla solo cuando la tabla es creado. Una vez que se crea una tabla, no puede modificarlo para agregar un columna de identidad. (Sin embargo, existente características de la columna de identidad podrían ser alterado.)
  • Una columna de identidad genera automáticamente valores para un Mesa individual.
  • Cuando una identidad la columna se define como GENERADA SIEMPRE, los valores utilizados son siempre generado por el administrador de la base de datos. Las aplicaciones no tienen permitido proporcionar sus propios valores durante el modificación de los contenidos de la mesa.

Un objeto de secuencia tiene las siguientes características:

  • Un objeto de secuencia es una base de datos objeto que no está atado a nadie mesa.
  • Un objeto de secuencia genera valores secuenciales que se pueden usar en cualquier instrucción SQL o XQuery.
  • Dado que se puede usar un objeto de secuencia por cualquier aplicación, hay dos expresiones utilizadas para controlar el recuperación del siguiente valor en el secuencia especificada y el valor generado antes de la declaración ser ejecutado. El valor anterior la expresión devuelve el más reciente valor generado para el especificado secuencia para una declaración anterior dentro de la sesión actual. El siguiente La expresión VALOR devuelve el siguiente valor para la secuencia especificada. los El uso de estas expresiones permite mismo valor para ser utilizado en varios Sentencias SQL y XQuery dentro de varias mesas.

Si bien estas no son todas las características de estos dos elementos, estas características lo ayudarán a determinar cuál usar según el diseño de su base de datos y las aplicaciones que utilizan la base de datos.

No sé por qué alguien usaría NUNCA una columna de identidad en lugar de una secuencia. Las secuencias logran lo mismo y son mucho más sencillas. Las columnas de identidad son mucho más difíciles, especialmente cuando desea descargar y cargar los datos en otros entornos. No voy a entrar en todas las diferencias, ya que esa información se puede encontrar en los manuales, pero puedo decirle que los DBA tienen que involucrarse casi siempre cuando un usuario desea migrar datos de un entorno a otro cuando una tabla con una identidad está involucrado porque puede ser confuso para los usuarios. No tenemos problemas cuando se utiliza una secuencia. Permitimos a los usuarios actualizar cualquier objeto de esquema para que puedan alterar sus secuencias si lo necesitan.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top