SQL Server - Propiedad Identity para llave compuesta???

   
Vista:

Propiedad Identity para llave compuesta???

Publicado por eduardo (7 intervenciones) el 30/08/2013 20:52:32
Buenas. Tengo una duda. Cuando tenemos una tabla con llave primaria simple podemos establecer dicho campo con la propiedad IDENTITY(1,1) para que se vaya incrementando. Pero ¿qué pasa cuando la tabla tiene una llave compuesta?
Sucede que tengo un maestro-detalle y me he preguntado si existe la opción de hacer IDENTITY a la segunda llave. O es que debo crear una función que encuentra el máximo para cada valor de la primera llave, es decir, algo como lo siguiente:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
CREATE FUNCTION F_OBTSIGUIENTECORRELATIVO
(
  @PRIMERA_LLAVE  INT
)
RETURNS INT
BEGIN
  DECLARE @SEGUNDA_LLAVE  INT
 
  IF NOT EXISTS(SELECT 1 FROM TABLA_MAESTRA
                WHERE CODIGO = @PRIMERA_LLAVE)
    RETURN NULL
 
  SELECT
    @SEGUNDA_LLAVE = COALESCE(MAX(SEGUNDA_LLAVE),0) + 1
  FROM TABLA_DETALLE
  WHERE PRIMERA_LLAVE = @PRIMERA_LLAVE
 
  RETURN @SEGUNDA_LLAVE
END

De momento, esto me funciona pero me gustaría conocer una manera más óptima.

Saludos cordiales.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Isaias Islas Gonzalez

Propiedad Identity para llave compuesta???

Publicado por Isaias Islas Gonzalez (3180 intervenciones) el 30/08/2013 23:46:19
En lo personal, no me gusta utilizar el IDENTITY, para una PK, yo he desarrollado sistemas de ENCABEZADO-DETALLE y siempre, he controlado los folios por una tabla de FOLIOS, donde se toma el que esta, se suma 1 y se guarda para el siguiente encabezado.

Es claro que el DETALLE, deberá llevar la PK del encabezado, mas, el ID del detalle (del 1 al n), esta combinación, se vuelve en PK del DETALLA.

¿No se si me explique?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Propiedad Identity para llave compuesta???

Publicado por eduardo (7 intervenciones) el 31/08/2013 18:35:22
Hola Isaías, gracias por responder. Imagino que para hacer el seguimiento de "el que está + 1", implementas una función, ya que si no utilizas IDENTITY no queda de otra que seguirle la pista manualmente. Personalmente yo sÍ utilizo IDENTITY para para tablas de una sola llave y quería saber si existe la forma de aplicarlo para una tabla de 2 llaves. Tengo claro que un tabla detalle debe tener la llave de su tabla padre más la suya propia. Bueno, creo que en este caso de llave compuesta sí debo hacerme de la función sin más.

Saludos cordiales.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Isaias Islas Gonzalez

Propiedad Identity para llave compuesta???

Publicado por Isaias Islas Gonzalez (3180 intervenciones) el 03/09/2013 17:47:08
No creo que sea necesario el IDENTITY para la tabla DETALLE, el ingreso de encabezado y detalle lo haras en el mismo store procedure, entonces, debes enviar el ID del encabezado, por lo que lo tomarias para tu segunda tabla. ¿cierto?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Propiedad Identity para llave compuesta???

Publicado por Andrickson (2 intervenciones) el 05/02/2014 04:52:59
Saludos Eduardo,

Estuve viendo tu mensaje y tengo la misma necesidad que tu, con relaciona a las llaves Identity compuesta. SI has conseguido como hacerlo, por favor compartelo y te estare agradecido.

Gracias.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar