2011-02-07 1 views
19

기본 키는 대개 양의 정수임을 알고 있습니다.데이터 모델 클래스의 기본 키로 int 대신 uint를 사용하는 것이 좋습니다.

int 대신 uint을 데이터 모델 클래스의 기본 키로 사용하는 것이 좋습니까?

:

public class Customer 
{ 
    public uint CustomerId {get;set;} 
    //others are omitted for the sake of simplicity. 
} 
+1

너는 9,223,372,036854775807이 너에게 충분하지 않다고 너무 낙관적이다 .-) – zerkms

+0

@zerkms : 생각하지 마라. 그것은 내 상상을 초월합니다. – xport

+0

@Recycle Bin : 그러면 아무런 차이가 없습니다. – zerkms

답변

11

대응하는 SQL 데이터 유형은 부호가있는 번호이므로 어떤 놀라움을 피하기 위해 int을 사용합니다.

+0

해당 SQL 데이터 유형을 uint로 변경할 수 있습니까? – xport

+1

@Recycle Bin : 내가 알고있는 것은 아니기 때문에 왜 당신이 원하는지 확신 할 수 없습니다. 2 억 이상의 숫자가 필요하다면 항상 bigint로 전환하거나 UniqueIdentifier와 같은 것을 고려할 수 있습니다. –

3

나는 그것이 INT 타입의 원인은 더 .NET Framework의 사용에 최적화되어 나쁜 생각, 생각합니다.

+0

그래서 int.MaxValue 고객보다 더 많은 것을 처리 할 수 ​​있습니까? – xport

+4

@Recycle Bin : 20 억 이상의 고객이있는 경우 서명 된 대 서명되지 않은 int를 키에 사용하는 것에 대한 질문은 내 우려 목록의 상단 부근에 있지 않습니다. 그리고 만약 그렇다면, 항상 길거나 큰 것이 있습니다. –

+0

내가 강력히 권장하는 한 가지 방법은 키를 짧게 사용하는 것입니다. 좋은 (매우 똑똑한) 친구는 특정 성능에 중요한 테이블이 2^16 레코드에 접근 할 수 없다는 매우 현실적인 가정하에 한 번 그렇게했습니다. 데이터베이스 리팩터 몇 개, 비즈니스 성장 및 문제의 테이블이 그 한계에 부딪혔다. 데이터의 양과 키 전파로 인해 한 열을 int로 마이그레이션하는 데 한 달에 12 명이 필요했습니다. –

8

단위는 CLS compliant이 아니므로 일반적으로 공용 API에서 사용하지 않는 것이 좋습니다.

+0

링크가 끊어졌습니다. –

8

다른 사람이이 질문에 비틀 거리는 경우 - uint을 키에 사용하지 마십시오. 필자는 Entity Framework 6.1.12를 사용하여이 작업을 시도했으며 암호화 된 "Entity does not have key"예외로 인해 코드가 계속 실패했습니다.

uint 속성을 int로 변경 한 후에야 예상대로 작동하기 시작했습니다.

그래, 네, 사용하지 않는 2 억 이상의 범위를 사용하는 것이 낫지 만 그게 상황입니다. 그리고 10 억을 넘는 기록을 남기게 될지 약간 의심 스럽다면 오래 갈 것입니다. 아이러니하게도 사용하지 않은 숫자는 9,223,372,036854775808입니다.).

관련 문제