Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

MySQL에서 별점(1~5점) 컬럼에 적합한 데이터 유형, ENUM 활용법

별점 저장에는 ENUM 데이터 유형 활용하기

1~5점 사이의 별점을 저장하는 컬럼이 필요하다면 ENUM 데이터 유형을 사용하는 것이 좋습니다. ENUM은 미리 정의된 값 목록 중 하나만 저장할 수 있어서, 허용되지 않는 값이 들어오는 것을 데이터베이스 차원에서 자동으로 차단해 줍니다.

먼저 테이블을 생성해 보겠습니다.

mysql> create table DemoTable
(
    Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
    UserRating ENUM('1','2','3','4','5')
);
Query OK, 0 rows affected (0.54 sec)

UserRating 컬럼은 '1'부터 '5'까지 다섯 가지 값만 허용하도록 정의되어 있습니다. 이제 INSERT 명령으로 테이블에 레코드를 삽입해 보겠습니다.

mysql> insert into DemoTable(UserRating) values('5');
Query OK, 1 row affected (0.19 sec)
mysql> insert into DemoTable(UserRating) values('3');
Query OK, 1 row affected (0.11 sec)
mysql> insert into DemoTable(UserRating) values('1');
Query OK, 1 row affected (0.17 sec)
mysql> insert into DemoTable(UserRating) values('3');
Query OK, 1 row affected (0.24 sec)
mysql> insert into DemoTable(UserRating) values('4');
Query OK, 1 row affected (0.18 sec)

저장된 데이터 조회하기

SELECT 명령을 사용하면 테이블에 저장된 레코드를 확인할 수 있습니다.

mysql> select *from DemoTable;

위 쿼리는 다음과 같은 결과를 출력합니다.

+----+------------+
| Id | UserRating |
+----+------------+
| 1  | 5          |
| 2  | 3          |
| 3  | 1          |
| 4  | 3          |
| 5  | 4          |
+----+------------+
5 rows in set (0.00 sec)

ENUM을 별점 저장에 사용하면 좋은 이유

  • 데이터 무결성 보장: 목록에 없는 값은 아예 저장되지 않으므로 '6'이나 '0' 같은 잘못된 별점 입력을 원천적으로 막을 수 있습니다.
  • 저장 공간 절약: 문자열처럼 보이지만 내부적으로는 숫자 인덱스로 관리되며, 값이 255개 이하일 경우 컬럼당 1바이트면 충분합니다.
  • 스키마 가독성 향상: 테이블 구조만 봐도 허용 가능한 별점 범위가 무엇인지 바로 파악할 수 있습니다.

참고로 단순히 숫자 범위만 제한하고 싶다면 TINYINT 타입에 CHECK 제약 조건을 거는 방법도 있습니다. 다만 MySQL 8.0.16 이전 버전에서는 CHECK 제약 조건이 실제로 강제되지 않았기 때문에, 버전 호환성과 안정성을 고려하면 ENUM이 더 확실한 선택입니다.