Skip to content

10.2 테이블 구조와 스키마

VOLATILE 테이블의 PRIMARY KEY 설계와 스키마 구성 방법을 다룹니다.

PRIMARY KEY 설계

VOLATILE 테이블은 PRIMARY KEY 없이도 생성할 수 있습니다. 단, PK 기반 조회나 ON DUPLICATE KEY UPDATE를 사용하려면 PRIMARY KEY가 필요합니다.

단일 PRIMARY KEY

CREATE VOLATILE TABLE ch10_schema_state (
    device_id  VARCHAR(32) PRIMARY KEY,
    state      VARCHAR(16),
    updated_at DATETIME
);

복합 키가 필요한 경우

여러 컬럼 조합으로 행을 고유하게 식별해야 하면 조합 키를 별도 PRIMARY KEY 컬럼으로 둡니다.

CREATE VOLATILE TABLE ch10_schema_hourly (
    key_id     VARCHAR(96) PRIMARY KEY,
    sensor_id  VARCHAR(64),
    hour_ts    DATETIME,
    avg_value  DOUBLE,
    sample_cnt INTEGER
);

-- 조합 키 삽입
INSERT INTO ch10_schema_hourly
VALUES ('TEMP-01:2026010110', 'TEMP-01', TO_DATE('2026-01-01 10:00:00', 'YYYY-MM-DD HH24:MI:SS'), 23.5, 60);
INSERT INTO ch10_schema_hourly
VALUES ('TEMP-01:2026010111', 'TEMP-01', TO_DATE('2026-01-01 11:00:00', 'YYYY-MM-DD HH24:MI:SS'), 24.1, 60);
INSERT INTO ch10_schema_hourly
VALUES ('TEMP-02:2026010110', 'TEMP-02', TO_DATE('2026-01-01 10:00:00', 'YYYY-MM-DD HH24:MI:SS'), 21.0, 60);

-- 조합 키 조회
SELECT sensor_id, avg_value FROM ch10_schema_hourly
 WHERE key_id = 'TEMP-01:2026010110';

ON DUPLICATE KEY UPDATE와 함께 사용

-- PRIMARY KEY 중복 시 UPDATE 실행
INSERT INTO ch10_schema_state VALUES ('DEV-01', 'ONLINE', NOW)
ON DUPLICATE KEY UPDATE SET state = 'ONLINE', updated_at = NOW;

주의사항

  • PRIMARY KEY 없이 생성할 수 있지만, PK 기반 동작(UPSERT, PK 조회 등)은 사용할 수 없습니다.
  • PRIMARY KEY가 같은 행을 둘 이상 저장할 수 없습니다. ON DUPLICATE KEY UPDATE는 중복 행을 추가하는 대신 기존 행을 갱신합니다.
  • PRIMARY KEY 컬럼은 하나만 지정합니다.

VOLATILE 테이블 설계

VOLATILE 테이블은 데이터를 메모리에만 두고, 서버 재시작 시 데이터가 소멸합니다. 테이블 정의는 남으므로 설계에서 정할 것은 “무엇을 잃어도 되는가"와 “어떻게 다시 채우는가” 두 가지입니다. 여러 세션이 공유하되 재시작 후 복구할 필요가 없는 상태나 캐시에 사용합니다.

스키마를 정할 때는 다음 항목을 함께 검토합니다.

이 페이지의 실습 테이블은 다음과 같이 정리합니다.

DROP TABLE ch10_schema_hourly;
DROP TABLE ch10_schema_state;
최근 업데이트