트리구조 카테고리 테이블 설계 방법 / 카테고리 조회 쿼리

카테고리 테이블 설계

설계 시 고려사항

카테고리 테이블은 카테고리 추가 및 삭제가 용이하도록 트리구조 형태로 설계하는 것이 좋습니다.

성격이 다른 카테고리 분류는 테이블을 분리하여 설계하는 것이 데이터 일관성과 유지보수 측면에서 좋습니다.

카테고리 테이블 예시

제약조건 컬럼명 데이터 타입 기본값 설명
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