안녕하세요. 초보가 질문 드립니다.
예전부터 궁금한 것이 있었는데요.
테이블 설계 시 메인 키를 int로 잡느냐, varchar(char)로 잡느냐를 한참 고민해 본 적이 있습니다.
저의 경우 보통 int 형으로 선언하여 자동증가 옵션을 사용합니다.
데이터 식별성은 떨어지지만 ID의 변경 등 데이터의 수정이 필요한 일이 있을 경우
메인키가 int 형으로 연결되어 있어 관련 중요 데이터 변경에도 대응이 편해서였습니다.
물론 자동 증가가 되니 중복에 대한 처리도 따로 신경쓰지 않아 편한 부분도 있구요.
하지만 요즘 작은 서비스지만 운영을 하다 보니 데이터베이스의 데이터 자체를 보는 일이 많아 졌습니다.
메인키가 숫자로 되어 있다 보니 식별성이 떨어져 데이터 확인을 위해 한번 더 검색을 해야하는 불편함이 있더군요.
요즘 성능에 int로 하든 varchar로 하든 저장 공간의 차이가 있을 지언정 속도에 대해서는 큰 차이가 없는 것으로 알고있는데요.
대충 생각해본바로는 아이디와 같이 변하지 않는 유저 테이블의 경우 varchar를 메인키로
결제내역, 메시지 전송내역과 같이 히스토리 성의 데이터 테이블의 경우 int를 메인키로 잡는 것이 어떨까 하는데요.
헌데 듣기로는 주문내역과 같은 것에서 날짜+숫자 조합으로 varchar 형으로 사용하기도 한다 하더라구요.
흠
보통 실무에서는 메인키의 자료형으로 어떤 형식을 선호하나요?
또 메인키가 varchar인 경우 중복 처리에 대해서 어떤 방식으로 처리하는지요?
펠코스님께서 이미 답을 다 알고 계시면서 한번더 확인하고 싶으신거 같네요..
이미 알고 계신바와 같이 테이블의 특성이나 업무의 특성을 고려해서 병행해서 사용하는게 보통입니다.
문자형의 경우 당연히 중복 제거를 위한 규칙을 만들어서 사용해야겠죠..
이미 예로 드신 방법들을 사용하는 정도 입니다.
흔히 쓰는 방식이 YYYYMMDDHH24MISS 형식의 날자에 렌덤숫자를 붙이는 방법을 많이 쓰죠.
오라클의 경우는 시퀀스를 만들어 쓸수 있으므로 문자열에 시퀀스값을 붙여서 쓰기도 합니다.
결론적으로 정답은 없으며 특성에 맞게 효율적으로 사용합니다.