2009-11-06 8 views

Respuesta

11

número de versión es mejor porque no importa qué formato de tiempo que utiliza, puede todavía ser arrojado fuera si el reloj del servidor está mal o se vuelve incorrecta en el tiempo.

Tengo que admitir, que he usado una marca de tiempo en muchas bases de datos, ya que puede servir a un doble propósito de verificar la concurrencia, así como la legibilidad de los datos cuando se cambió por última vez. Sin embargo, usar un número de versión es realmente la mejor manera de hacerlo.

+0

Sí, idd, ya tengo una columna ModifiedOn y estaba pensando en usar eso, ¿pero recomendaría una columna adicional? –

+0

Sí. Por mucho que odie tener muchas columnas en una mesa, es la solución más a prueba de balas. – NYSystemsAnalyst

+0

Bueno, estoy un poco confundido por la respuesta de Jim. Si TimeStamp cambia automáticamente al modificar la fila, entonces es bastante útil. ¿A qué te refieres con "todavía puede ser expulsado"? thx –

3

Número de versión. O si estoy usando timestamp, me aseguraré de que sea UTC, para que no haya confusión con la zona horaria.

3

Usaría un número de versión, especialmente si el recurso puede actualizarse alguna vez más que la resolución de sus marcas de tiempo (por ejemplo, si almacena marcas de tiempo a una resolución de segundos, si tiene múltiples actualizaciones en un solo segundo , tu versión se romperá).

4

Lieven,

sé que no especificó SQL Server, pero si usted está hablando de SQL Server entonces la marca de hora tipo de datos sería el mejor método a utilizar. A pesar de su descripción, realmente no tiene nada que ver con la fecha y la hora. En realidad, es solo un número binario que cambia cada vez que se modifica la fila. Por lo tanto, si se realizan enmiendas en la fila, la columna timestamp cambiará. Esto tiene la ventaja sobre los números de versión porque usted, el programador, no tiene que "mantener" el número de versión. Las marcas de tiempo actuales de Fecha/Hora deben utilizarse con más cuidado como otro cartel mencionado anteriormente - diferencias de tiempo, etc.

+0

¿Y a qué tipo debo asignar la marca de tiempo en C#? Porque antes de una actualización o eliminación, quiero verificar si hay problemas de concurrencia. (estoy trabajando realmente con el servidor sql. Flex-WebORB-.NET-SQLServer). Estamos enviando dto's a Flex. En ese dto tendré que poner la marca de tiempo. Siempre que el dto vuelva a ser guardado, tendré que chack si la marca de tiempo en el dto corresponde a la marca de tiempo en la base de datos. Gracias. –

+0

Aquí hay un chat al respecto: http://social.msdn.microsoft.com/Foros/es-ES/adodotnetdataproviders/thread/0ad05e31-c3b2-44fb-99f5-32e80754e37a/ Sin embargo, ¿ha considerado permitir que el servidor maneje las versiones? Si está utilizando un bloqueo optimista, sería su inserto SQL el que detectaría un problema y arrojaría la excepción. – BIDeveloper

+0

Iba a hacer eso, dejando que la inserción de sql detectara el problema. ¿Pero necesita enviar la marca de tiempo al cliente o no? Si está insertando, necesita comparar la marca de tiempo en db con la marca de tiempo en el objeto. ¿O me estoy perdiendo algo aquí? –

0

Si está en Windows, recomiendo usar un identificador único global (GUID) como identificador de versión.

Una marca de tiempo (incluso si UTC) puede hacer que los problemas si el reloj está ajustado por el usuario. Un número creciente (si se mantiene en la memoria) puede ocasionar problemas si se reinicia la aplicación del servidor o si se desborda (si solo se trata de un entero de 16 o 32 bits).

-1

Número de versión. DateTime no es único por algunas razones, por ejemplo, 'Horario de verano' - podría haber dos '2 AM' h. (Ambiguous Time).

supongo que su número entero más que suficiente sin signo de 32 bits, ya que prácticamente hay una probabilidad cero de que mientras que el ahorro podría ocurrir 4294967295 transacción.

Cuestiones relacionadas