Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

Problema de integridad; ke esllave compuesta? 2 o mas llaves primarias en una tabla?

Estas en el tema de Problema de integridad; ke esllave compuesta? 2 o mas llaves primarias en una tabla? en el foro de SQL Server en Foros del Web. Hola un saludo a todos bueno la cuestion es la siguiente hice la prueb de mi sistema con 30 usaurios al mismo tiempo y bueno ...
  #1 (permalink)  
Antiguo 07/02/2008, 15:32
Avatar de krakxp  
Fecha de Ingreso: junio-2006
Ubicación: NA
Mensajes: 105
Antigüedad: 17 años, 9 meses
Puntos: 0
Pregunta Problema de integridad; ke esllave compuesta? 2 o mas llaves primarias en una tabla?

Hola un saludo a todos

bueno la cuestion es la siguiente hice la prueb de mi sistema con 30 usaurios al mismo tiempo y bueno todo iba bien hasta una parte donde mi aplicacion registraba unos valores y entonces la guardarlos no se guradaban o bien se guardaban pero tomaba los valroes ke otro usuario habia escrito
y bueno me di cuenta ke al hacer el registro 2 o mas usaurios habian hecho clik en la misma hora minuto y segundo y pues eso hacia ke mis llaves foraneas se reptiera el mismo id y con eso el sistema tomaba otros datos y total todo fue un caos ya ke el triger no podia hacer inserts con diferencia de centesimas de segundo y entonces generaba el mismo numero de llave

Y bueno analizando despues me dijieron ke viera algo para evitar ke se generara el mismo id y me sugieron algo de llaves compuestas pero no se eso se solucione agrregando llaves primarias en mis campos ke hacen referencia a otras tablas

y bueno necesito consejos para evitar esto de ke se repita el mismo id, se4 me olvidadba uso SQL server 2000


gracias a todos

Última edición por krakxp; 07/02/2008 a las 15:43
  #2 (permalink)  
Antiguo 07/02/2008, 16:45
 
Fecha de Ingreso: febrero-2008
Mensajes: 93
Antigüedad: 16 años, 2 meses
Puntos: 4
Re: Problema de integridad; ke esllave compuesta? 2 o mas llaves primarias en una ta

Una clave compuesta se trata (si no me equivoco) de una clave que está formada por dos o mas campos (que no 2 claves en la misma tabla, no es lo mismo). El problema que tu comentas no se como solucionarlo, si se me ocurre algo me paso por aquí y te lo comento.

Si me equivoco, que alguien me corrija, aún estoy aprendiendo.
  #3 (permalink)  
Antiguo 07/02/2008, 18:47
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 16 años, 9 meses
Puntos: 180
Re: Problema de integridad; ke esllave compuesta? 2 o mas llaves primarias en una ta

La solucion total esta, en que al momento que hagas un INSERT, UPDATE, manejes transacciones EXPLICITAS, esto es BEGIN TRAN, COMMIT TRAN o ROLLBACK TRAN, con eso, te aseguraras que mas de 1 usuario, no registre lo mismo que otro usuario.

Si estas utilizando IDENTITY, te sugiero que hagas caso omiso de @@IDENTITY y utilices la funcion SCOPE_IDENTITY().

Necesitaria mas datos al respecto, esto es lo que puedo comentar.
  #4 (permalink)  
Antiguo 10/02/2008, 09:44
Avatar de Gabo77  
Fecha de Ingreso: noviembre-2006
Mensajes: 381
Antigüedad: 17 años, 4 meses
Puntos: 6
Re: Problema de integridad; ke esllave compuesta? 2 o mas llaves primarias en una ta

Totalment de acuerdo con el amigo IISLAS, aun que el problema de duplicidad de registros me suena mas a falta de ingeniería en la composicion de las llaves de la tabla, si tuvieras bien definidas tus llaves, las transacciones las manejaría el SQL de manera que no se registren llaves duplicadas.

Por otro lado, el uso explicito o implicito de transacciones supone el uso de banderización de transacciones, esto quiere decir que mientras tengas una transacción abierta nadie podrá hacer uso de la tabla, por lo que te recomiendo que tengas bien definidos tus indices (ya que mencionas que tus tablas con muy concurridas) para optimizar y minimizar los bloqueos que esto ocasiona.

Saludos!
__________________
Hicimos un pacto con Dios... El no desarrolla Sistemas y nosotros no hacemos milagros....
  #5 (permalink)  
Antiguo 13/02/2008, 13:50
Avatar de krakxp  
Fecha de Ingreso: junio-2006
Ubicación: NA
Mensajes: 105
Antigüedad: 17 años, 9 meses
Puntos: 0
Re: Problema de integridad; ke esllave compuesta? 2 o mas llaves primarias en una ta

Cita:
Iniciado por iislas Ver Mensaje
La solucion total esta, en que al momento que hagas un INSERT, UPDATE, manejes transacciones EXPLICITAS, esto es BEGIN TRAN, COMMIT TRAN o ROLLBACK TRAN, con eso, te aseguraras que mas de 1 usuario, no registre lo mismo que otro usuario.

Si estas utilizando IDENTITY, te sugiero que hagas caso omiso de @@IDENTITY y utilices la funcion SCOPE_IDENTITY().

Necesitaria mas datos al respecto, esto es lo que puedo comentar.
Orales pues deja pruebo eso de indentity aunke si me explican mejor como usarlo bien en base a este sp ke es el pricncipal ke hace el registro se los agradecere mucho

porke mi sp lo tengo asi:

Código:
CREATE PROCEDURE [dbo].[spSetStsEntInd]
(@CveEntInd int, @Sts int output)
 AS
DECLARE @TpoFrmInd int
    SET @TpoFrmInd = 0
    SET @Sts = 0
    
    SELECT @TpoFrmInd = @TpoFrmInd  FROM TblEntInd (NOLOCK) WHERE CveEntInd = @CveEntInd
    
     --Indicador-Ente Fiscalizable
    IF NOT EXISTS (SELECT CveEntInd FROM TblIndFis (NOLOCK) WHERE CveEntInd = @CveEntInd)
        BEGIN
            SET @Sts = 2
        END
    
    --Indicador basado en fórmula
    IF @TpoFrmInd = 1
        BEGIN
            IF NOT EXISTS ( SELECT CveEntInd FROM TblEntInd (NOLOCK) WHERE CveEntInd = @CveEntInd)
                SET @Sts = 4
        END
    IF @Sts = 0
        BEGIN
            BEGIN TRAN
                UPDATE TblEntInd SET StsEntInd = 1 WHERE CveEntInd = @CveEntInd
                IF @@ERROR <> 0
                    BEGIN
                        ROLLBACK TRAN
                        SET @Sts = 5
                        RETURN -1
                    END
            COMMIT TRAN
        END
GO
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 15:36.