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

SQL Server에 MySQL의 ENUM 데이터 유형이 있을까요?

SQL Server에 MySQL의 ENUM 데이터 유형이 있을까요?

결론부터 말씀드리면, SQL Server에는 MySQL과 같은 ENUM 데이터 유형이 기본적으로 제공되지 않습니다. 하지만 걱정하지 마세요. CHECK 제약 조건(CONSTRAINT)을 활용하면 SQL Server에서도 동일한 효과를 낼 수 있습니다.

먼저 MySQL에서 ENUM이 어떻게 사용되는지 살펴본 후, SQL Server에서 이를 대체하는 방법을 알아보겠습니다.

MySQL에서 ENUM 사용하기

아래 예제는 MySQL 8.0.12 버전에서 정상적으로 작동합니다. 기본 문법은 다음과 같습니다.

CREATE TABLE yourTableName
(
   yourColumnName ENUM('Value1', 'Value2', 'Value3', ......N)
   DEFAULT 'Value1' 또는 'Value2' 또는 'Value3', ...N
);

실제로 MySQL에서 ENUM 유형의 컬럼을 가진 테이블을 생성하는 쿼리는 다음과 같습니다.

mysql> CREATE TABLE EnumInMySQL
-> (
-> WebCRUD ENUM('CREATE','READ','UPDATE','DELETE')
-> DEFAULT 'CREATE'
-> );
Query OK, 0 rows affected (0.60 sec)

위 쿼리는 'CREATE', 'READ', 'UPDATE', 'DELETE' 네 가지 값만 허용하는 WebCRUD 컬럼을 생성하며, 별도로 값을 지정하지 않으면 기본값으로 'CREATE'가 저장됩니다.

SQL Server에서 ENUM 흉내 내기

SQL Server에는 전용 ENUM 유형이 없기 때문에, VARCHAR 컬럼에 CHECK 제약 조건을 추가하여 같은 기능을 구현합니다. 기본 문법은 다음과 같습니다.

CREATE TABLE yourTableName
(
   yourColumnName VARCHAR(100)
   CHECK(yourColumnName IN ('Value1', 'Value2', 'Value3', ......N))
   DEFAULT 'Value1' 또는 'Value2' 또는 'Value3', ...N
);

즉, 컬럼은 일반 문자열(VARCHAR)로 선언하되, CHECK 조건으로 허용 가능한 값의 목록을 제한하는 방식입니다. 이렇게 하면 목록에 없는 값이 입력될 경우 데이터베이스가 자동으로 오류를 반환하여 데이터 무결성을 보장할 수 있습니다.

두 방식의 차이점 정리

  • MySQL ENUM: 데이터베이스 엔진 차원에서 열거형을 지원하며, 내부적으로 숫자 인덱스로 저장되어 저장 공간이 상대적으로 효율적입니다.
  • SQL Server 대체 방식: VARCHAR + CHECK 제약 조건 조합으로 구현하며, 값 목록이 변경될 경우 제약 조건을 수정해야 하는 번거로움이 있습니다.

만약 SQL Server에서 더 견고한 열거형 관리가 필요하다면, 별도의 참조(lookup) 테이블을 만들고 외래 키(Foreign Key)로 연결하는 방법도 좋은 대안이 될 수 있습니다. 이 방식은 새로운 값을 추가할 때 테이블 구조나 제약 조건 변경 없이 데이터 삽입만으로 확장이 가능하다는 장점이 있습니다.