Ver Mensaje Individual
  #6  
Antiguo 09-04-2015
Avatar de mamcx
mamcx mamcx is offline
Moderador
 
Registrado: sep 2004
Ubicación: Medellín - Colombia
Posts: 3.911
Reputación: 25
mamcx Tiene un aura espectacularmamcx Tiene un aura espectacularmamcx Tiene un aura espectacular
Cita:
Empezado por camiz Ver Mensaje
¿ Como hago para decirle al otro usuario que el codigo 000001 es mio y por lo tanto el tiene que generar el 000002 ?
9 de cada 10, esa es la idea equivocada. Como te explicaron, la forma correcta es usar un campo autonumerico (IDENTITY en sql server) y dejar que la BD se encargue del tema.

Porque es equivocada?

Porque genera un punto de contención (= un cuello de botella) en la BD, asi que ha menos que tengas que *garantizar* por regulacion que hay un consecutivo fijo (como en ciertos paises con las facturas), no te pongas en esas.

Ademas, es *ideal* que las claves de las tablas *carezcan* de sentido en la logica de negocios, y solo sirvan como punteros para llegar al registro, hacer relaciones y demas. Son las claves naturales (como # de cedula, nombre pais) las que le importan al usuario, y esas tienden a ser unicas.

Ademas, hacer esto desde Delphi? eso ya ES TARDE. Del lado del cliente ya ha pasado tiempo (mas aun si el servidor se accede remoto) y pa rematar el usuario se puede ir a tomar un cafe o dejar un proceso a medias. Todo esto se debe hacer directamente desde el motor, para reducir el margen de contención.

Solo hay UN caso de uso donde se puede desde el cliente generar IDS: si estos son del tipo GUID o similares.

-----

Pa no dejarte en ascuas, la forma tradicional es usar una tabla de consecutivos (con tabla, campo, siguiente consecutivo), y con triggers se obtiene y aumentan los tales y se asignan al campo en particular.

Pero NO lo hagas si es solo algo "estetico" o por que si. Las facturas/documentos legales es quizas de los pocos casos donde es una solucion valida.
__________________
El malabarista.
Responder Con Cita