스키마 설계 및 쿼리 최적화를 위한 가이드를 실행합니다.
Scanned 6/6/2026
Install via CLI
openskills install excatt/superclaude-plusplus---
name: "db-design"
description: "스키마 설계 및 쿼리 최적화를 위한 가이드를 실행합니다."
user-invocable: true
---
# Database Design Skill
스키마 설계 및 쿼리 최적화를 위한 가이드를 실행합니다.
## 스키마 설계 원칙
### 정규화 체크리스트
- [ ] 1NF: 원자값, 중복 컬럼 없음
- [ ] 2NF: 부분 함수 종속 제거
- [ ] 3NF: 이행 함수 종속 제거
- [ ] 적절한 비정규화 고려 (성능)
### 테이블 설계
- [ ] 명확한 Primary Key
- [ ] 적절한 Foreign Key 관계
- [ ] NOT NULL 제약조건 검토
- [ ] UNIQUE 제약조건 검토
- [ ] DEFAULT 값 설정
- [ ] CHECK 제약조건 (필요시)
### 인덱스 전략
- [ ] WHERE 절 컬럼 인덱스
- [ ] JOIN 컬럼 인덱스
- [ ] ORDER BY 컬럼 인덱스
- [ ] 복합 인덱스 순서 최적화
- [ ] 커버링 인덱스 고려
- [ ] 불필요한 인덱스 제거
### 데이터 타입 선택
```
# 권장 데이터 타입
ID: BIGINT / UUID
금액: DECIMAL(19,4)
날짜: TIMESTAMP WITH TIME ZONE
문자열: VARCHAR(n) - 적절한 길이
불리언: BOOLEAN
JSON: JSONB (PostgreSQL)
```
## 쿼리 최적화
### 성능 체크리스트
- [ ] SELECT * 대신 필요한 컬럼만
- [ ] N+1 쿼리 문제 해결
- [ ] 적절한 JOIN 사용
- [ ] 서브쿼리 vs JOIN 비교
- [ ] LIMIT/OFFSET 페이징 (큰 offset 주의)
- [ ] 인덱스 활용 확인 (EXPLAIN)
### 안티패턴 감지
```sql
-- 피해야 할 패턴
SELECT * FROM ... -- 불필요한 컬럼
WHERE column LIKE '%value' -- 인덱스 무효화
WHERE FUNCTION(column) -- 인덱스 무효화
OR 조건 남발 -- 인덱스 비효율
NOT IN (subquery) -- NULL 문제
```
### EXPLAIN 분석 포인트
- Seq Scan vs Index Scan
- Nested Loop vs Hash Join
- Sort 연산 비용
- 예상 rows vs 실제 rows
## 출력 형식
```
## Database Design Review
### Schema Analysis
- 테이블 수: N
- 관계: [1:N, M:N 등]
- 정규화 수준: [1NF/2NF/3NF]
### Findings
#### Schema Issues
- [테이블명] 이슈 설명 및 권장사항
#### Index Recommendations
- [테이블명] 권장 인덱스: (col1, col2)
- 이유: WHERE/JOIN 패턴 분석
#### Query Optimization
- [쿼리 위치] 현재 비용 → 예상 개선
- 수정 방법: 구체적 쿼리 제안
### ERD (텍스트)
```
[User] 1──N [Order] N──M [Product]
```
### Migration Plan
1. [스키마 변경 단계]
2. [데이터 마이그레이션]
3. [인덱스 생성]
```
---
위 가이드를 기반으로 데이터베이스 설계를 분석하세요.
No comments yet. Be the first to comment!