컬럼 데이터 형식을 어떻게 결정하는가? 직감으로 보면 알 수 있나? 아니면 기준을 가지고 하는가? 훈련 없는 직감은 아차 하는 실수를 낳을 수 있다. 기준을 가지고 컬럼 데이터 형식을 판단하는 훈련을 여러 번 하다 보면 훈련 받은 직감이 생긴다. 이 직감은 객관적인 판단기준이 휘리릭 ~ 하고 계산되고 나온 결과이다. 여러분이 이러한 훈련을 하는데 필요한 기준이 무엇인지를 설명한다.
 
첫 번째 기준은 “논리적인 데이터 형식 먼저 생각하라.” 논리적인 데이터 형식이라는 것은 해당 컬럼 혹은 변수가 문자(character), 숫자(Number), 날짜(Datetime), 바이너리(Binary) 카테고리 중 어디에 속하는가 이다.
 
모든 데이터 형식들은 이 4가지 범주 안에 반드시 속하게 되어있다. 그리고 이 4가지 데이터 형식들은 모두 문자열(String)에서 파생되었다. 따라서 모든 값은 문자열로 표현될 수 있다. 예를 들어 숫자도 문자열로 표현될 수 있다. 2는 정수(Int) 값이지만 ‘02’ 혹은 ‘2’ 라는 문자열 값으로 저장할 수 있다. ‘2008-01-01’도 문자열로 저장이 가능하며, ;0x080000000100’ 와 같은 바이너리도 문자열로 저장할 수 있다. 따라서 모든 데이터 형식은 문자열이라고 볼 수 있고, 이를 Char 혹은 Varchar 형식에 저장할 수 있다. 원래의 데이터베이스는 이렇게 모든 데이터 형식을 문자열 형식 하나에 저장하였다. 하지만 시간이 흐르면서 여러 가지 형태의 데이터 형식들을 필요로 하게 되면서 이렇게 세분화된 것이다.
 

문자열 보다 다른 데이터 형식을 사용하는 첫 번째 이유는 문자열 보다 적은 바이트 수로 값을 표현할 수 있다는 것이다. ‘10000’은 문자열로는 5바이트이지만, 정수형으로는 4바이트로 표현 가능하다. 날짜도 마찬가지이다. 두 번째 이유는 데이터 연산을 위해서 데이터 형식을 규정 짓고 싶기 때문이다.
 

정수는 사칙연산을 포함해서 다양한 수식 연산을 할 수 있고, 날짜도 더하거나 뺄 수 있다. 하지만 문자열은 고작해야 문자열을 자르고, 붙이고, 치환하는 작업만이 가능할 뿐이다. 내재적인 숫자 타입들은 이러한 연산 보다는 더하고, 빼고, 나누고, 곱하는 연산이 더 중요하다. 따라서 세분화된 데이터 형식은 문자열로는 수행하기 힘든 다양한 형식들을 이용할 수 있다. 
 

세 번째는 데이터 형식 각각이 값에 대한 검사 조건(Check constraint)으로서 사용된다는 것이다. 예를 들어, 정수형 컬럼에 ‘가나다’ 라는 문자열을 포함할 수는 없다. 오직 정수 형식의 데이터들만이 포함될 뿐이다. 날짜 형식도 마찬가지이다. 날짜 커럼에는 날짜 데이터 형식에 맞는 값들만이 들어갈 뿐이고, 벗어나는 값들은 오류를 발생한다. 이러한 검사 조건으로 컬럼형식을 사용할 수 있다.
 
① 적은 바이트 수로 값을 표현
② 연산 가능한 값을 위해
③  값의 형식 검사를 위해


참고서적:Deep Inside T-SQL


크리에이티브 커먼즈 라이센스
Creative Commons License 이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
트랙백 주소: http://ggoma.isblog.net/trackback_post_448.aspx

댓글을 달아 주세요