트리구조 카테고리 테이블 설계 방법 / 카테고리 조회 쿼리
카테고리 테이블 설계
설계 시 고려사항
카테고리 테이블은 카테고리 추가 및 삭제가 용이하도록 트리구조 형태로 설계하는 것이 좋습니다.
성격이 다른 카테고리 분류는 테이블을 분리하여 설계하는 것이 데이터 일관성과 유지보수 측면에서 좋습니다.
카테고리 테이블 예시
제약조건 | 컬럼명 | 데이터 타입 | 기본값 | 설명 |
---|---|---|---|---|
PK | id | INT | 카테고리ID | |
name | VARCHAR(255) | 카테고리명 | ||
depth | INT | 1 | 카테고리Depth | |
parent_id | INT | 상위카테고리ID | ||
sort | INT | 1 | 정렬순서 | |
create_date | DATETIME | NOW() | 등록일시 | |
create_user_id | INT | 등록자 | ||
update_date | DATETIME | NOW() | 수정일시 | |
update_user_id | INT | 수정자 | ||
show_yn | CHAR(1) | 'N' | 노출여부 | |
delete_yn | CHAR(1) | 'N' | 삭제여부 |
카테고리-콘텐츠 매핑 테이블 예시
제약조건 | 컬럼명 | 데이터 타입 | 기본값 | 설명 |
---|---|---|---|---|
PK | id | INT | 매핑ID | |
FK | content_id | INT | 콘텐츠ID | |
last_ctgry_id | INT | 마지막카테고리ID | ||
create_date | DATETIME | NOW() | 등록일시 | |
delete_yn | CHAR(1) | 'N' | 삭제여부 |
카테고리 매핑 테이블에는 마지막 카테고리 ID만 저장하는 것이 카테고리 구조 변경 시 유연성이 높습니다.
만약, 중간 카테고리 선택이 ‘필수’가 아니라면 각 뎁스 카테고리ID 컬럼이 모두 필요합니다.
카테고리 조회 쿼리
카테고리 전체 조회 쿼리
SELECT
IFNULL(T1.name, '') depth1
,IFNULL(T2.name, '') depth2
,IFNULL(T3.name, '') depth3
FROM 카테고리테이블명 AS T1
LEFT JOIN 카테고리테이블명 AS T2 ON T2.parent_id = T1.id AND T2.use_yn = 'Y' AND T2.delete_yn = 'N'
LEFT JOIN 카테고리테이블명 AS T3 ON T3.parent_id = T2.id AND T3.use_yn = 'Y' AND T3.delete_yn = 'N'
WHERE
T1.parent_id is null
AND T1.use_yn = 'Y'
AND T1.delete_yn = 'N'
ORDER BY T1.sort, T2.sort, T3.sort
카테고리를 뎁스 컬럼 형태로 전체 조회하는 쿼리 예시입니다.
Leave a comment