그것은 좋은 아이디어를 정수를 사용하여 열을 저장하기 위해 미국 우편 번호는 데이터베이스에서?

StackOverflow https://stackoverflow.com/questions/893454

문제

에서 첫 눈이 나타날 것이라고 나는 두 가지 기본적인 선택에 대한 저장 우편 번호 데이터베이스에서 테이블:

  1. 텍스트를(아마도 가장 일반적),즉 char(5)varchar(9) 지+4extension
  2. 숫자,즉32-bit integer

둘 것이라고의 요구사항을 충족하는 데이터는 경우에,우리 가정이 없는 국제 문제입니다.과거에 우리는 일반적으로 그냥 갔을 텍스트로,하지만 내가 궁금했던 사람이 반대 습?에서 간단한 비교와 같이 정수 방법은 두 가지 분명한 장점이 있습니다.

  • 그것은에 의해,그것의 자연을 자동으로 제한 수치만(반면 유효성 검사 없이 텍스트 스타일을 저장할 수 있는 문자와 같은 있는지,내 지식으로,지금까지 유효 우편 번호).이 우리를 의미할 수 있/것입/해야 유효성 검증을 포기 사용자의 입력으로 정상적인,하지만!
  • 더 적은 공간이 되는 4 바이트(어야 하는 많은 심지어는 9-digit 우편번호)는 대신 또는 9 5 바이트입니다.

또한,그것은 해치지 않을 것 디스플레이 출력이 훨씬.그것은 간단하는 때리 ToString() 에는 숫자 값을 사용하여 간단한 문자열 조작을 삽입 하이픈 또는 공간 또는 어떤 대+4extension,그리고 사용할 문자열 형식을 복원하는 주요 터널을 설정하는 방식이다

아무거나가 있는 사용 억제 int 으로 데이터 유형에 대한 미만 우편 번호?

도움이 되었습니까?

해결책

숫자 우편 번호는 작은 방식으로 오해의 소지가 있습니다.

숫자는 무언가를 의미해야합니다 숫자. 우편 번호는 숫자 작업에 추가하거나 빼거나 참여하지 않습니다. 12309-12345는 Schenectady 시내에서 이웃까지의 거리를 계산하지 않습니다.

우편 번호의 경우 아무도 혼란스럽지 않습니다. 그러나 다른 숫자와 같은 필드의 경우 혼란 스러울 수 있습니다.

우편 번호는 숫자가 아니기 때문에 제한된 알파벳으로 코딩되는 것입니다. 숫자 필드를 피하는 것이 좋습니다. 1 바이트 절약은 그다지 가치가 없습니다. 그리고 나는 그렇게 생각합니다 의미 바이트보다 더 중요합니다.


편집하다.

"주요 0에 관해서는 ..."가 나의 요점이다. 숫자는 제로를 선도하지 않습니다. 우편 번호에 의미있는 주요 0의 존재는 숫자가 아니라는 또 다른 증거입니다.

다른 팁

비 US 우편 번호를 저장 하시겠습니까? 캐나다는 문자가있는 6 자입니다. 나는 보통 10 문자 필드를 사용합니다. 디스크 공간이 저렴하므로 데이터 모델을 재 작업 해야하는 것은 아닙니다.

유효성 검사와 함께 문자열을 사용하십시오. 우편 번호는 0으로 시작할 수 있으므로 숫자는 적합한 유형이 아닙니다. 또한 이는 국제 우편 번호 (예 : 영국, 최대 8 자)에 깔끔하게 적용됩니다. 우편 번호가 병목 현상이 될 가능성이 거의 없으면 10 자로 제한 할 수 있지만 확인하십시오. 대상 형식 첫 번째.

여기에 있습니다 영국, 미국 및 캐나다에 대한 검증 Regexes.


예, 당신은 주도적 인 제로를 되찾기 위해 패드 할 수 있습니다. 그러나 이론적으로 오류가 발생할 때 도움이 될 수있는 정보를 버리고 있습니다. 누군가가 데이터베이스에서 1235를 찾는 경우 원래 01235입니까, 아니면 다른 숫자가 놓쳤습니까?

모범 사례는 당신이 의미하는 바를 말해야한다고 말합니다. 우편 번호는 숫자가 아닌 코드입니다. 당신은 갈거야 추가/빼기/배수/분할 우편 번호? 그리고 실제적인 관점에서 볼 때 확장 ZIP를 배제하는 것이 훨씬 더 중요합니다.

일반적으로 더 많은 우편 번호 유형을 허용하는 Varchar와 같은 비수막 데이터 유형을 사용합니다. 5 자리 [xxxxx] 또는 9 자리 [xxxxx-xxxx] 우편 번호 만 허용하는 경우 죽은 경우 char (5) 또는 char (10)를 사용할 수 있지만 권장하지 않습니다. Varchar는 가장 안전하고 가장 제정신 선택입니다.

편집 : 또한 현장에서 수치 계산을 계획하지 않으면 숫자 데이터 유형을 사용해서는 안됩니다. 우편 번호는 추가하거나 빼는 의미에서 숫자가 아닙니다. 일반적으로 숫자로 구성되는 문자열이므로 숫자 데이터 유형을 사용하지 않아야합니다.

기술적 관점에서 어떤 점을 여기에 제기는 매우 간단하다.작업 주소 데이터의 클렌징에 일일 기초에서는 특정 클렌징 주소에서 데이터 전 세계입니다.그것은 간단한 작업 스트레칭으로서의 상상력입니다.에 올 때 우편 번호,당신 매장들이 정수로 되지 않을 수도 있지만"의미"맞습니다.사실은,데이터의 숫자 형태는지 여부를,엄격하게 말하기 으로 간주 숫자 값입니다.

그러나 매우 실제의 단점으로 저장하는 숫자 종류는 당신이 할 수있는 능력을 잃을 쉽게 확인하는 경우에 데이터가 잘못 입력(i.e가 누락 값)또는 시스템이 제거된 주 제를 선도하여 비용이 많이 드는 작업을 확인하 잠재적으로는 잘못된 우편 번호는 그렇지 않으면 정확합니다.

그것은 또한 매우 단단을 사용하면 사용자 입력 정확한 데이터를 하나의 영향이 지연의 사업이다.사용자가 자주 있지 않는 인내심을 입력한 정확한 데이터를지 않는 경우에는 즉시 분명하다.Using regex 은 하나의 방법이 보장하는 정확한 데이터를,그러나는 경우에는 사용자가 입력하는 값에 따르지 않고 그들은 오류가 표시됩,그들은 단지 생략 이 값을 모두 입력하거나 뭔가에 맞는하지만 그렇지 않으면 잘못되었습니다.중 하나를 들어[를 사용하여 캐나다의 우편코드]당신을 종종 보게 A0A0A0 입력하는 유효하지 않습니다 그러나 준수하는 regex 에 대한 캐나다의 우편코드입니다.더 자주하지 않고,이것은 사용자에 의해 입력을 강제로 제공하는 우편번호만,그들 중 하나가 무엇인지 몰라 그것이 없거나 그것을 모두 맞습니다.

한 가지 제안을 확인합체의 항목 단위로 검증하는 지를 정확과 비교했을 때 나머지 주소입니다.잘못된 경우,다음을 제공하는 다른 유효한 우편 주소를 위해 만들 것입니다 그것은 쉽게 그들을 위해 입력하는 유효한 데이터이다.마찬가지로 우편 번호가 정확한 주소지만,거리의 숫자를 벗어나 도메인의 우편 번호,다음을 제공합체 스트리트에 대한 숫자는 우편 번호/리합니다.

우편 번호 데이터에 대한 수학적 계산을 수행하기위한 비즈니스 요구 사항이 없다면 int를 사용하는 데 아무런 의미가 없습니다. 당신은 엔지니어링을 끝냈습니다.

도움이 되었기를 바랍니다,

계산서

아니요. 왜냐하면

  • 우편 번호에서 수학 기능을하지 않습니다
  • 대시를 포함 할 수 있습니다
  • 0으로 시작할 수 있습니다
  • 널 값은 정수와 같은 스칼라 유형의 경우 때때로 0으로 해석됩니다 (예 : 데이터를 어떻게 든 내보내는 경우)
  • 우편 번호는 숫자이더라도 영역을 지정하는 것입니다. 즉, 이것은 숫자 수량이 아닌 이름입니다.

우편 번호는 실제로 코딩 된 네임 스페이스입니다. 전통적으로 숫자뿐만 아니라 하이픈과 대문자 :

"10022 신발"

http://www.saksfifthavenue.com/main/10022-shoe.jsp

현실적으로, 많은 비즈니스 애플리케이션은 유효 하더라도이 에지 케이스를 지원할 필요가 없습니다.

정수는 좋지만 미국에서만 작동하므로 대부분의 사람들이 그렇게하지 않습니다. 보통 나는 단지 바르 차 (20) 정도를 사용합니다. 아마도 모든 로케일에 대한 과잉 일 것입니다.

US ZIPS에 정수를 사용하려면 주요 부품에 10,000을 곱하고 +4를 추가해야합니다. 데이터베이스의 인코딩은 입력 유효성 검사와 관련이 없습니다. 항상 입력을 유효 해야하는지 여부를 요구할 수 있지만, 저장소는 요구 사항 또는 USP가 변경 될 것이라고 생각하는 것이 중요합니다. (힌트 : 요구 사항 ~ 할 것이다 변화.)

최근에 배웠습니다 루비에서 당신이 이것을 피하고 싶은 한 가지 이유는 정수에서 저장된 제로로 시작하는 우편 번호가 있기 때문에 자동으로 옥탈로 변환 될 것입니다.

에서 문서:

특수 접두사를 사용하여 소수점, 16 진수, 옥탈 또는 이진 형식으로 숫자를 쓸 수 있습니다. 10 진수의 경우 0D의 접두사를 사용하십시오.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top