![]() |
![]() |
| Paypal | FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
|||||||
| Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
![]() |
|
|
Herramientas | Buscar en Tema | Desplegado |
|
|
|
#1
|
|||
|
|||
|
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 |
|