FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
|||
|
|||
El mejor método para generar IDs en tablas de movimiento
Saludos amigos,
En un entorno multiusuario, garantizar que las IDs (PKs) son únicas es parte fundamental de cualquier sistema bien estructurado. Actualmente, por ejemplo yo hago lo siguiente:
Función:
Consulta q_CalcIDNewPago:
sin embargo, no estoy seguro que sea la mejor forma de hacerlo. Cualquier aporte será bienvenido. Atte, Américo |
#2
|
||||
|
||||
Estas duplicando, de forma mas ineficiente*, lo que hace una bd. Usa:
Lo que es dificil es garantizar que sea perfectamente incremental sin 'huecos' pero eso es otro asunto. * p.d: Y adicionalmente este codigo trae un bug incorporado!
__________________
El malabarista. Última edición por mamcx fecha: 13-05-2024 a las 17:44:18. |
#3
|
|||
|
|||
Cita:
|
#4
|
||||
|
||||
En firebird existen los generadores.
Los generadores siempre devuelven números diferentes (garantizado por la base de datos). Los generadores siempre se incrementan, a pesar de que la transacción falle (Rollback). Yo suelo dejar que la base de datos lo genere y me lo devuelva. Con esta sentencia y el generador en el trigger:
Cuando por alguna razón no puedo utilizarlo de esta manera, pido un número al generador y luego lo utilizo en el insert
|
#5
|
||||
|
||||
En tu caso, básicamente haces un SELECT MAX(ID).
Si justo al mismo tiempo dos usuarios piden el MAX(ID) les devolverá el mismo número. Luego al hacer el INSERT el primero logrará hacerlo y el segundo dará error porque estará insertando un duplicado. Particularmente esta forma de obtener un ID es muy ineficiente en Firebird. A pesar de tener índices por ese campo. Tiene que ver con la multi versión de registros. En otros motores no sabría decirte. Última edición por duilioisola fecha: 28-05-2024 a las 18:58:07. |
#6
|
||||
|
||||
Otro bug: Insertas 10 registros, el id va en 10. Ahora:
Borras el ultimo Borras todos Borras el primero etc. Un id debe ser global(en su contexto), único y *no repetible*
__________________
El malabarista. |
#7
|
|||
|
|||
Campo autonumerico
Creo que la mejor forma de generar un id es con campo autonumerico o autoincrementable. Ahí simplemente el motor de bd genera el siguiente número sin necesidad de averiguar cual es el mayor número de un campo de tabla.
|
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Combinación de teclas para generar el método de una función | danny915 | Varios | 4 | 21-11-2014 18:24:03 |
Mejor Metodo para Verificar Numeros Primos | Victor Luis | Varios | 2 | 20-10-2013 06:33:03 |
Mejor Metodo para leer las teclas | pmtzg | Varios | 3 | 08-11-2007 18:05:16 |
Otro metodo de insercion que sea mejor hacerlo via query | ilichhernandez | Conexión con bases de datos | 2 | 01-07-2006 12:26:06 |
Mejor opcion para trabajar con tablas planas | andre | Tablas planas | 0 | 30-06-2004 19:17:03 |
|