ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [postgresSQL] enum 타입
    TIL 2024. 2. 19. 19:20

     

     

    DB에서 enum type은 성별(남,녀) , 요일(월화수목금토일) 과 같이 사용자 정의 타입을 만든다고 생각하면 된다.

     

    DB에서 해당 속성을 enum type으로 지정할 경우 해당 속성은 정해진 값 내에서만 입력이 가능하다.

     

    CREATE TYPE으로 생성한다

     

     

    예시)

    mood타입을 생성하고 이 타입에는 sad, ok, happy만 들어갈 수 있게 만들기

     

     

     

     

    CREATE TYPE mood as ENUM ('sad', 'ok', 'happy');

    CREATE TABLE person(
        name text,
        current_mood mood
    );

    INSERT INTO person values ('kiju', 'happy');    
     
    SELECT * FROM person WHERE current_mood = 'happy';

     

     

    결과)

    name | current_mood

      ------+--------------

      Moe | happy (1 row)

     

     

     

     

     

     

     

    enum type 기능 - 순서

     

    enum 타입은 생성될때 순서가 부여되는데 이 순서를 통해 비교연산자, 집계함수를 사용해 비교가 가능하다.

     

    enum에 들어간 인덱스 순서를 갖고 비교한다.

     

    다만, 다른 종류의 enum 타입과는 비교할 수 없다. 

     

    그리고 대소문자, 공백등을 구별하므로 헷갈리지 않게 조심한다.

     

     

    비교연산자 ">" 사용하기)

     

     
    INSERT INTO person VALUES ('Larry', 'sad');
    INSERT INTO person VALUES ('Curly', 'ok');
     
    SELECT * FROM person WHERE current_mood > 'sad';
     

     

     

    결과)

    name | current_mood

     -------+--------------

      kiju  | happy

    Curly | ok

     

     

     

    ORDER BY 적용)

     
    SELECT * FROM person WHERE current_mood > 'sad' ORDER BY current_mood;
     

     

     

    name | current_mood

     -------+--------------

     Curly | ok

      kiju | happy

     

     

     

     

     

    ** enum 타입은 새로운 데이터 타입의 추가는 가능하지만, 수정, 삭제는 불편하다.

     

    새로운 enum을 생성해서 거기에 옮겨줘야하기 때문이다.

     

    그래서,  enum 타입 대신 별도의 데이터 테이블을 이용해서 관리하는 것이 수정, 삭제도 비교적 자유롭기 때문에 관리하기

     

    편하다

     

     

     

    enum 타입을 사용해도 좋은 경우)

     

    1. 유일하고 변하지않는 값을 저장할 경우

     

    2.연관된 정보를 저장할 필요 없는 경우 

     

    3. 2개초과, 20개 이하의 데이터를 다루는 경우

    ㄴ 2개의 데이터만을 다룬다면 boolean타입을 이용하는 것이 좋다

    ㄴㄴgender(male, female) 보다 is_male속성에 true, false로 넣어주기

    'TIL' 카테고리의 다른 글

    [DB] DB 모델링 - 소셜 로그인기능  (0) 2024.02.25
    [WEB] REST API 설계하기  (0) 2024.02.24
    [DB] 식별관계와 비식별관계  (0) 2024.02.19
    [DB] 트랜잭션 (Transaction)  (0) 2024.02.19
    [AWS] aws 탄력적IP  (0) 2024.02.07
Designed by Tistory.