Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General »

Como hacer tablas de consecutivos ??

Estas en el tema de Como hacer tablas de consecutivos ?? en el foro de Bases de Datos General en Foros del Web. Buenas tardes amigos, espero esten bien hoy mi duda es con base a ORACLE, tengo una serie de tablas que necesito que se incrementen automaticamente ...
  #1 (permalink)  
Antiguo 13/11/2009, 15:00
 
Fecha de Ingreso: noviembre-2009
Mensajes: 4
Antigüedad: 14 años, 5 meses
Puntos: 0
Como hacer tablas de consecutivos ??

Buenas tardes amigos, espero esten bien hoy mi duda es con base a ORACLE, tengo una serie de tablas que necesito que se incrementen automaticamente cada ves que se inserten datos....

Conozco una forma de hacerlo que es por medio de secuencias pero el inconveniente es que si llego a borrar un registro, pues se perderia el consecutivo.

CREATE SEQUENCE TIPAR
START WITH 1
INCREMENT BY 1;

con sus propiedades nextval, currval.....

Pero me comento el profesor de Bases de datos que habia una forma mejor de hacerlo y ademas no se perderia el consecutivo es decir q seria reutilizable, si borro un registro pues su consecutivo se podra aplicar a una nueva entrada de registro. Me dijo que se podia hacer por medio de tablas especiales dedicadas a guardar unicamente consecutivos, y pues mi duda es como serian esas tablas....
su estructira y su forma de uso....

Agradeceria enormente la ayuda pues es para aplicarlo en mi proyecto final de la materia Bases de datos....
  #2 (permalink)  
Antiguo 13/11/2009, 17:17
Avatar de gildus  
Fecha de Ingreso: agosto-2003
Mensajes: 1.495
Antigüedad: 20 años, 8 meses
Puntos: 105
Respuesta: Como hacer tablas de consecutivos ??

Holas,

Si haces un subquery como esto en vez del secunciador:

Cita:
INSERT INTO tabla((SELECT MAX(id_campo)+1 FROM tabla), 'dato1,'dato2','dato3','dato4');
Esto claro con el campo id_campo con el valor intero o numero.

Saludos
Gildus
__________________
.: Gildus :.
  #3 (permalink)  
Antiguo 14/11/2009, 09:46
Avatar de huesos52
Colaborador
 
Fecha de Ingreso: febrero-2009
Ubicación: Manizales - Colombia
Mensajes: 5.980
Antigüedad: 15 años, 2 meses
Puntos: 360
Respuesta: Como hacer tablas de consecutivos ??

pues para mi las secuencias son la forma mas optima de hacer esto.

cuando tu profe te dee la respuesta, te agradecería la compartieras.

saludos
__________________
Without data, You are another person with an opinion.
W. Edwads Deming
  #4 (permalink)  
Antiguo 14/11/2009, 10:14
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Como hacer tablas de consecutivos ??

Cita:
Conozco una forma de hacerlo que es por medio de secuencias pero el inconveniente es que si llego a borrar un registro, pues se perderia el consecutivo.
Partamos de una base: El sentido de un valor incremental es la creación de una PK, y en ese sentido, es lógico, esperable y necesario que si eliminas un registro, la secuencia tenga saltos.

La pregunta central aquí es ¿para qué quieres conservar la secuencia incremental?

Entendamos lo siguiente, cuando hablamos de PK: Una PK basada en un campo numérico incremental no se debe renumerar por cuestiones estéticas, ya que debes tener en cuenta que:

1. No es conveniente "reorganizar" un índice autoincremental porque en esencia es una tarea sin funcionalidad, carente de practicidad y consumidora innecesaria de tiempo de proceso.

2. El renumerar las PRIMARY KEY de un campo incremental no produce ninguna mejora en la optimización de consultas, por lo que hacerlo solamente resulta en tiempo de PC consumido.

3. Renumerar un campo autoincremental, genera un nuevo ordenamiento FISICO de los datos (una PK genera un índice tipo clúster), con la consiguiente sobrecarga del microprocesador, porque tiene que reescribir físicamente la tabla cada vez y reconstruir el índice completamente.

4. Tampoco es recomendable bajo ninguna circunstancia renumerar una PK (es el caso, por ejemplo, en MySQL donde un AUTOINCREMENT es PK por default) si se usa como FK de otras tablas, porque generará inconsistencia de datos entre registros de tablas relacionadas.

5. No se recomienda renumerar si existen datos históricos de otras transacciones, que hacen referencia a otros registros que tenían el mismo número. De hecho, en una tabla de stock, las ID jamás cambian porque el hecho que un producto ya no exista ni se fabrique no quiere decir que no aparezca en registros más antiguos. Pisar un ID sería lo mismo que ponerle a un recién nacido el número de documento de un muerto.

6. Por otro lado, ¿qué te importa que tengas espacios de números que ya no usas, en tanto la numeración sea secuencial e incremental? ¿para qué perder tiempo en renumerar?, ¿para que quede más lindo? . Eso lo puedes hacer perfectamente en la interfase, donde visualizas la tabla de datos, o bien usando ciertas formas de consulta que te permitan un "orden" numérico transitorio que no afecta las tablas.

7. Si tu temor es quedarte sin números para usar, un ID generado en un campo numérico tiene como rango límite:18.446.744.073.709.551.615

Si y sólo si no se cumple el supuesto de ser usado como PK, parte de la PK o ser FK, tiene algún sentido mantener la continuidad de la numeración. Pero no es la mayoría de los casos.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Última edición por gnzsoloyo; 14/11/2009 a las 10:22
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 06:17.