티스토리 뷰

리액트로 웹 개발 A to Z

enum과 char / tinyint

1200seconds 2024. 10. 23. 12:08

나는 베이킹 레시피를 알려주는 홈페이지를 만들고 있다.

아직은 피그마와 mysql를 통해 필요한 db들과 디자인을 구성하고 있다. 일사천리로 구현을 하기 위한 밑작업에 시간을 들이는 중이다.

 

사용자가 회원가입을 할 때 맞춤형 정보를 추천해주기 위해 `난이도`라는 필드를 구성했는데,

0~5단계로 나누어볼 생각이어서 글자 하나만 저장하는 char 타입을 택할지, 해당 값만 저장이 가능하도록 enum을 택할건지 고민이 되었다. 그러다 tinyint라는 타입도 있다는 것을 알고 세 개 중에 어떤 것을 고르는 게 좋을지 고민이 깊어졌다.

 

선택 기준

명확한 옵션을 제공해야 하고 잘못된 값이 저장되면 안 되는 경우에는 enum가 적합하다.

사용자가 자유롭게 입력해야 하는 필드를 구성하고 싶을 경우에는 char가 적합하다.

데이터 분석이나 통계 처리를 할 예정이 있다면 tinyint가 적합하다.

 

  tinyint enum char
타입 숫자 문자 문자
공간 1바이트 내부적으로는 숫자로 저장 고정된 길이의 문자열
사용 - 문자열보다 데이터 데이터 저장 공간을 적게 사용할 수 있다.
- 데이터 분석이나 통계 처리를 할 때 계산이 간편하다.
예) 난이도의 평균값을 구하거나 최고 난이도를 찾기 쉽다.
- 숫자로 저장이 되기 때문에 정렬이 간편하다.


단점
- 데이터를 보고 바로 알아듣기 어렵다.
예) 난이도 3이 어느 정도의 난이도를 의미하는지 쉽게 알기 어렵다.
- 데이터를 바로 봤을 때 의미를 쉽게 이해할 수 있다.
- 미리 정의된 값 이외에는 입력할 수 없도록 강제할 수 있어 데이터 무결성을 쉽게 유지할 수 있다.
- 0~5와 같이 숫자로 저장할 경우에는, 내부적으로도 숫자로 저장되기 때문에 실제로는 tinyint와 유사한 크기의 저장 공간을 차지한다.


단점
- 만일 숫자로 저장할 경우 각 값의 의미를 기억해야 한다.
- 선택지가 고정되어 있어 유연성이 떨어진다.
새로운 값이 추가될 경우 테이블을 변경해야 한다.
- 문자열로 정의된 `숫자` 값이라도 실제로는 숫자와 연관되어 처리되므로, 문자열이 아닌 숫자 기반의 작업에서는 비효율적일 수 있다.
- 고정된 길이로 저장되므로 길이가 변하지 않는 데이터를 일관되게 저장할 수 있다.
- 간단한 텍스트 데이터를 저장할 때 유용하다.

단점
- 길이가 짧은 데이터를 저장할 때에도 고정된 공간을 사용하므로, 길이가 일정하지 않은 데이터에는 비효율적일 수 있다.
예) 공간 비효율성:
CHAR(5)로 정의된 필드에 "A"라는 값이 들어가면, 나머지 4바이트도 차지하게 된다.
- 문자 기반이기 때문에 숫자 연산이 필요한 경우에는 적합하지 않다.
  난이도처럼 범위가 0~5로 고정된 경우라면 `tinyint`가 가장 적합하며, 문자열로 의미를 직접 제공하고 싶다면 `enum`이 적합하다.

- 숫자 값을 저장하고 효율적인 연산을 원한다면 TINYINT.
- 미리 정해진 선택지에서 사용자가 선택할 수 있게 하려면 ENUM.
- 고정 길이의 문자를 일관되게 저장해야 한다면 CHAR.
결론 숫자를 저장하고 숫자 범위가 작을 때 적합함.

- 숫자 데이터를 저장하고 연산이 필요할 때
- 0~5같이 고정된 숫자 범위를 저장할  때
- 공간 효율성을 중요시할  때
데이터를 보고 직관적으로 받아드릴 때 적합함.

- 미리 정의된 고정된 값을 강제해야 할 때
예) 난이도가 `쉬움` `보통` `어려움`으로 고정하고 싶을 때
- 값의 의미를 직관적으로 파악할 수 있게 하고 싶을 때
- 고정된 길이의 `문자` 데이터를 저장할 때
- 길이의 일관성이 중요할 때

 

 

처음에는 enum과 char만 고려했었는데, 난이도를 평균내거나 정렬할 때의 이점도 괜찮다고 생각드는 tinyint로 꾸려보려 한다.

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2026/06   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30
글 보관함