2010-07-05 28 views
12

Estoy pensando en usar un GUID en mi aplicación .NET que usa SQL Server. ¿Debo escribir un procedimiento almacenado que genere el GUID en cada registro ingresado o debería generarlo directamente desde la aplicación?Generación de GUID

Las razones para hacer la pregunta (Si mal me estoy correcto en este):

I (como/PRE) Sume:

Al generar el GUID de la base de datos, se puede asumir que el PP recuerda el GUID generado anteriormente donde, como la aplicación que lo recuerda, es difícil.

+1

Por qué es recordar el GUID anterior importante o necesaria? –

+2

Si está utilizando el GUID como clave principal en su base de datos, tome nota de los pros y los contras;) http://www.codinghorror.com/blog/2007/03/primary-keys-ids-versus- guids.html – Tony

Respuesta

22

SQL Server tiene la creación de GUID incorporados. No es necesario escribir un procedimiento almacenado separado para esto.

Puede utilizar

La diferencia clave entre los dos procedimientos sería que la secuencial GUID se debe utilizar si es para un principal agrupada llave.

No estoy seguro por qué desea que el motor de base de datos recuerde el GUID generado anteriormente.

5

No, su suposición es incorrecta: la base de datos no recordará nada, por lo que no hay beneficio desde ese punto de vista.

Si está utilizando el GUID como clave primaria clave/agrupación en SQL Server, que es una mala idea para empezar (ver here, here o here por qué ese es el caso), debe al menos uso la función newsequentialid() como restricción predeterminada en esa columna.

CREATE TABLE YourTable(ColumnA uniqueidentifier DEFAULT NEWSEQUENTIALID()) 

De esta manera, la base de datos generaría de seudo-secuencial GUID para su PK y por lo tanto haría que los efectos negativos del uso de un GUID como PK/CK al menos soportable ....

Si' No utilizo el GUID como clave principal, entonces no veo ningún beneficio en la creación de ese GUID en el servidor, realmente.

+0

Puedo pensar en algunos casos de negocios válidos donde usar un GUID (secuencial) sería una buena opción. AMOF, si supiéramos hace unos años lo que sabemos ahora, lo más probable es que lo hayamos implementado y nos haya ahorrado muchos problemas (y dinero) al tratar de intercambiar datos de ida y vuelta con nuestra sucursal. –

+1

@lieven: parece que estás hablando de replicación: ese es probablemente el único caso válido en el que realmente lo necesitas. Conviértelos en su PK, pero si es posible, ¡use algo más como su clave de agrupamiento! –

+0

@marc_s Gracias. Pero, ¿y si el servidor se reinicia? Como sé, perderás tu secuencia. Me equivoco ? –