2009-11-06 4 views

답변

11

사용하는 시간 형식에 관계없이 버전 번호가 더 좋으므로 서버의 시계가 잘못되었거나 시간이 지나면 잘못되었을 때 여전히 버려 질 수 있습니다.

데이터가 마지막으로 변경된 경우 동시성 검사와 가독성의 두 가지 목적을 수행 할 수 있으므로 많은 데이터베이스에서 타임 스탬프를 사용했습니다. 그러나 버전 번호를 사용하는 것이 실제로 더 좋은 방법입니다.

+0

예, idd, 저는 이미 ModifiedOn 열을 가지고 있고 그것을 사용하려고 생각했지만 여분의 열을 권장할까요? –

+0

예. 테이블에 많은 기둥을 넣는 것이 싫어서 방탄 솔루션입니다. – NYSystemsAnalyst

+0

글쎄, 나는 짐의 대답 때문에 약간 혼란 스럽다. 행을 수정할 때 TimeStamp가 자동으로 변경되면 매우 유용합니다. '여전히 버려 질 수있다'는 것은 무엇을 의미합니까? thx –

3

버전 번호. 또는 타임 스탬프를 사용하는 경우 UTC인지 확인하므로 시간대와 혼동이 없습니다.

3

특히 리소스가 타임 스탬프의 해상도 이상으로 업데이트 될 수있는 경우 버전 번호를 사용합니다 (예 : 초 단위로 타임 스탬프를 저장하는 경우, 초 단위로 여러 번 업데이트하는 경우). , 버전 관리가 중단됩니다).

4

리벤,

난 당신이 SQL 서버를 지정하지 않은 알지만, 당신은 SQL 서버에 대해 이야기하는 경우 다음 데이터 유형 타임 스탬프 사용하는 가장 좋은 방법이 될 것입니다. 그것의 묘사에도 불구하고 실제로 날짜와 시간을 할 아무 것도 없다. 실제로 행이 수정 될 때마다 변경되는 이진수입니다. 따라서 행에 대한 수정 사항이 있으면 타임 스탬프 열이 변경된다는 것을 알 수 있습니다. 프로그래머가 버전 번호를 "유지"할 필요가 없으므로 버전 번호보다 이점이 있습니다. 실제 날짜/시간 타임 스탬프는 이전시기의 다른 포스터와 같이 더 신중하게 사용해야합니다.

+0

그리고 C 타입으로 타임 스탬프를 매핑 할 필요가있는 타입은 무엇입니까? 왜냐하면 업데이트 나 삭제 전에 동시성 문제가 있는지 확인하기를 원하기 때문입니다. (사실 SQL Server와 협력하고 있습니다.) Flex-WebORB-.NET-SQLServer. 우리는 플렉스에게 보내고 있습니다. 그 시간에 타임 스탬프를 써야합니다. dto가 반환 될 때마다 dto의 타임 스탬프가 데이터베이스의 타임 스탬프와 일치하면 chack해야합니다. 고마워. –

+0

다음은 채팅 내용입니다. http://social.msdn.microsoft.com/Forums/ko-adodotnetdataproviders/thread/0ad05e31-c3b2-44fb-99f5-32e80754e37a/ 그러나 서버에서 버전을 처리하도록 허용 한 것으로 생각하십니까? 낙관적 인 잠금을 사용하는 경우 문제를 발견하고 예외를 throw하는 SQL 삽입이됩니다. – BIDeveloper

+0

나는 SQL 인서트가 문제를 탐지하도록 할 것이다. 하지만 타임 스탬프를 클라이언트에 보내야합니까, 안할까요? 삽입하는 경우 DB의 타임 스탬프와 개체의 타임 스탬프를 비교해야합니다. 아니면 여기에 뭔가 빠졌나요? –

0

Windows 사용자는 버전 식별자로 GUID (Globally Unique Identifier)를 사용하는 것이 좋습니다.

시계가 사용자에 의해 설정되면 타임 스탬프 (UTC 일지라도)가 문제를 일으킬 수 있습니다. 서버 응용 프로그램을 다시 시작하거나 오버플로 (16 비트 또는 32 비트 정수만있는 경우)하는 경우 증가하는 숫자 (메모리에 고정 된 경우)로 문제가 발생할 수 있습니다.

-1

버전 번호. DateTime은 '일광 절약 시간'과 같이 몇 가지 이유로 인해 고유하지 않습니다. '오전 2시'가 두 번있을 수 있습니다. (Ambiguous Time).

4,294,967,295 트랜잭션을 저장하는 동안 트랜잭션이 발생할 가능성이 거의 없으므로 부호없는 32 비트 정수 이상인 것으로 추측됩니다.