[MySQL] 테이블의 메인키는 Int vs varchar 어떤 것이 좋을까? 0 4 8,696

by 펠코스 [DB 모델링/설계] [2015.11.11 01:06:30]


안녕하세요. 초보가 질문 드립니다.

 

예전부터 궁금한 것이 있었는데요.

테이블 설계 시 메인 키를 int로 잡느냐, varchar(char)로 잡느냐를 한참 고민해 본 적이 있습니다.

저의 경우 보통 int 형으로 선언하여 자동증가 옵션을 사용합니다.

데이터 식별성은 떨어지지만 ID의 변경 등 데이터의 수정이 필요한 일이 있을 경우 

메인키가 int 형으로 연결되어 있어 관련 중요 데이터 변경에도 대응이 편해서였습니다.

물론 자동 증가가 되니 중복에 대한 처리도 따로 신경쓰지 않아 편한 부분도 있구요.

 

하지만 요즘 작은 서비스지만 운영을 하다 보니 데이터베이스의 데이터 자체를 보는 일이 많아 졌습니다.

메인키가 숫자로 되어 있다 보니 식별성이 떨어져 데이터 확인을 위해 한번 더 검색을 해야하는 불편함이 있더군요.

 

요즘 성능에 int로 하든 varchar로 하든 저장 공간의 차이가 있을 지언정 속도에 대해서는 큰 차이가 없는 것으로 알고있는데요.

대충 생각해본바로는 아이디와 같이 변하지 않는 유저 테이블의 경우 varchar를 메인키로

결제내역, 메시지 전송내역과 같이 히스토리 성의 데이터 테이블의 경우 int를 메인키로 잡는 것이 어떨까 하는데요.

헌데 듣기로는 주문내역과 같은 것에서 날짜+숫자 조합으로 varchar 형으로 사용하기도 한다 하더라구요.

흠 

 

보통 실무에서는 메인키의 자료형으로 어떤 형식을 선호하나요?

또 메인키가 varchar인 경우 중복 처리에 대해서 어떤 방식으로 처리하는지요?

 

 

 

 

by 우리집아찌 [2015.11.11 08:34:20]

http://wiki.gurubee.net/pages/viewpage.action?pageId=28115827


by 창조의날개 [2015.11.11 09:05:38]

 

펠코스님께서 이미 답을 다 알고 계시면서 한번더 확인하고 싶으신거 같네요..

 

이미 알고 계신바와 같이 테이블의 특성이나 업무의 특성을 고려해서 병행해서 사용하는게 보통입니다.

 

문자형의 경우 당연히 중복 제거를 위한 규칙을 만들어서 사용해야겠죠..

이미 예로 드신 방법들을 사용하는 정도 입니다.

흔히 쓰는 방식이 YYYYMMDDHH24MISS 형식의 날자에 렌덤숫자를 붙이는 방법을 많이 쓰죠. 

 

오라클의 경우는 시퀀스를 만들어 쓸수 있으므로 문자열에 시퀀스값을 붙여서 쓰기도 합니다.

 

결론적으로 정답은 없으며 특성에 맞게 효율적으로 사용합니다.

 

 


by 마농 [2015.11.11 09:52:48]

순번을 이용한 인조키는 로그성이나 게시판성 테이블에서 많이 사용하죠.

업무적인 성격의 테이블에서는 해당 자료에 적합한 실제 데이터를 키로 사용하는게 좋습니다.

우선 후보키들을 선정해 본뒤 마땅한게 없을 때 사용하는게 인조키입니다.

인조키부터 우선 고려해서는 안되겠죠. 인조키는 대안입니다.


by 펠코스 [2015.11.11 14:28:36]

우리집아찌,창조의날개,마농 님 답변 감사합니다.

결국 정해진 규칙이나 , 통상적으로 많이 사용하는 방법은 없으며

그때 그때 맞춰 사용하면 된다는 거네요.

primary key로 자주 사용하던 int형 순차 값이 인조키라고 하는 것을 오늘에서야 알다니 ...

( 복합키, 후보키 등 다 알았는데.. 왜 이걸.... ㅡㅡ;;)

공부를 더 해야 겠습니다.

위 내용 관련해서 조금은 고민이 줄었습니다.^^

- 답변채택은... 선착순...으로... 할게요 ㅡㅡ;;

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입