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