Pregunta ¿Qué es una secuencia (base de datos)? ¿Cuándo lo necesitaríamos?


¿Por qué creamos una secuencia incluso si hay una clave principal?


28
2017-10-30 10:46


origen


Respuestas:


La clave principal es una columna en una tabla.

La clave principal necesita un valor único, que debe provenir de algún lugar.

La secuencia es una característica de algunos productos de base de datos que solo crea valores únicos. Simplemente incrementa un valor y lo devuelve. Lo especial es que no hay aislamiento de transacción, por lo que varias transacciones no pueden obtener el mismo valor, el incremento tampoco se retrotrae. Sin una secuencia de base de datos, es muy difícil generar números incrementales únicos.

Otros productos de bases de datos admiten columnas que se inicializan automáticamente con un número creciente.

Existen otros medios para crear valores únicos para las claves principales, por ejemplo, Guids.


37
2017-10-30 10:51



La clave principal es (en términos técnicos) simplemente un índice que refuerza la unicidad (además de acelerar el rendimiento de las consultas). Hay cierta información semántica que es la "clave" para la entidad que describe la fila, pero eso es todo.

Una secuencia es una entidad diferente por completo; existe separada de las tablas (como lo haría un procedimiento almacenado) y puede llamarse para producir números secuenciales.

Los dos se usan a menudo juntos, para generar claves primarias automáticas para entidades que no tienen claves "nativas" sensibles. Pero son dos conceptos separados; puede tener tablas donde la clave primaria se rellena explícitamente durante una inserción, y puede tener secuencias que se utilizan para poblar columnas que no sean PK (o incluso que se utilicen imperativamente durante un procedimiento almacenado, distinto de la inserción de registros).


5
2017-10-30 10:51



La secuencia le permitirá completar la clave principal con un número único y serializado.

Es diferente de un serial o auto_incremement clave principal en el sentido de que:

  • Es un objeto de base de datos real (debe crearlo):

    sql> create sequence NAME_OF_YOUR_SEQUENCE;

  • Puede asignarle permisos independientes a diferentes usuarios de la base de datos:

    sql> grant select on NAME_OF_YOUR_SEQUENCE to NAME_OF_YOUR_USER;

  • Puede usar para tener un número único que es diferente entre varias tablas (no solo una). Supongamos que tiene cuatro tablas con claves primarias numéricas, y desea números únicos entre esas cuatro tablas. Podría usar una secuencia para eso, sin tener que preocuparse por implementar mecanismos de bloqueo para hacerlo 'a mano'.

  • Puede cambiar su número a cualquier valor que desee con alter sequence

  • Puedes recorrer sus números

    sql> create sequence NAME_OF_YOUR_SEQUENCE maxvalue 1500 cycle;


4
2017-10-30 10:49