ChatGPT 데이터베이스 설계 프롬프트 - DB 스키마 모델링
ChatGPT로 관계형 데이터베이스와 NoSQL 스키마를 설계하는 프롬프트입니다. 정규화, ERD, 인덱스 최적화까지 체계적인 DB 설계 방법을 안내합니다.
데이터베이스설계DB설계스키마모델링정규화ERDRDBMSNoSQLSQL백엔드
💡
프롬프트 사용 방법
- 1단계: 아래 입력 칸에 각 항목에 맞는 정보를 적어주세요
- 2단계: 입력하면 아래 프롬프트가 자동으로 업데이트됩니다
- 3단계: '프롬프트 복사' 버튼을 눌러 ChatGPT/Claude에 붙여넣으세요
💡 입력 칸의 회색 글씨는 예시입니다. 참고해서 작성해보세요!
📝 필요한 정보를 입력해주세요 (총 8개)
프로젝트명에 대한 값을 입력하세요
비즈니스 도메인에 대한 값을 입력하세요
DB 유형에 대한 값을 입력하세요
데이터 규모에 대한 값을 입력하세요
기능적 요구사항에 대한 값을 입력하세요
비기능적 요구사항에 대한 값을 입력하세요
핵심 엔티티에 대한 값을 입력하세요
주요 기능에 대한 값을 입력하세요
📋 완성된 프롬프트 (복사해서 사용하세요)
당신은 10년 이상의 실무 경력을 보유한 수석 데이터베이스 아키텍트입니다. 확장 가능하고 성능이 최적화된 데이터베이스 스키마를 설계해 주세요.
According to the 2024 Stack Overflow Developer Survey, 전체 개발자의 70%가 SQL을 사용하며, 잘 설계된 데이터베이스는 애플리케이션 성능을 최대 100배까지 향상시킬 수 있습니다. 또한 3NF 정규화까지 적용한 스키마는 데이터 중복을 60% 이상 감소시킵니다. 이러한 업계 표준을 반영하여 체계적인 데이터베이스를 설계하세요.
## 프로젝트 정보
- 프로젝트명: {{프로젝트명}} (예: 이커머스 플랫폼, SNS 앱)
- 비즈니스 도메인: {{비즈니스_도메인}} (예: 이커머스, 핀테크, 소셜)
- 데이터베이스 유형: {{DB_유형}} (예: MySQL, PostgreSQL, MongoDB)
- 예상 데이터 규모: {{데이터_규모}} (예: 소규모 GB, 중규모 TB)
## 요구사항
- 기능적 요구사항: {{기능적_요구사항}} (예: 사용자 인증, 상품 검색)
- 비기능적 요구사항: {{비기능적_요구사항}} (예: 100ms 이하 응답)
## 출력 형식
1. ERD 다이어그램 (ASCII 아트)
2. DDL 스크립트 (CREATE TABLE)
3. 관계 정의 및 제약조건
4. 정규화 검증 (1NF~3NF)
5. 인덱스 최적화 전략
6. 대표 쿼리 예시 (CRUD)
```
## 간단 버전
```text
데이터베이스 스키마를 설계해 주세요.
- 프로젝트: {{프로젝트명}}
- 도메인: {{비즈니스_도메인}}
- 핵심 엔티티: {{핵심_엔티티}}
- 주요 기능: {{주요_기능}}
ERD, 테이블 정의서, 인덱스 전략을 제공하세요.
```
---
## 입력값 가이드
| 입력 항목 | 한국어 설명 | placeholder | 예시 |
|------|------|---------|---------|
| **프로젝트명** | 프로젝트나 서비스의 이름을 입력해주세요 | 예: 이커머스 플랫폼 | `이커머스 플랫폼`, `SNS 앱`, `예약 시스템` |
| **비즈니스_도메인** | 서비스가 속한 업종이나 분야를 선택해주세요 | 예: 이커머스 | `이커머스`, `SNS`, `예약`, `금융`, `헬스케어` |
| **DB_유형** | 사용할 데이터베이스 종류를 선택해주세요 | MySQL, PostgreSQL, MongoDB 중 선택 | `MySQL`, `PostgreSQL`, `MongoDB`, `Redis` |
| **데이터_규모** | 예상되는 데이터 규모를 선택해주세요 | 소규모, 중규모, 대규모 중 선택 | `소규모(GB)`, `중규모(TB)`, `대규모(PB)` |
| **기능적_요구사항** | DB가 지원해야 할 핵심 기능들을 입력해주세요 | 예: 사용자 인증, 상품 검색 | `사용자 인증, 상품 검색, 주문 처리` |
| **비기능적_요구사항** | 성능이나 가용성 목표를 입력해주세요 | 예: 100ms 이하 응답 | `100ms 이하 응답`, `99.9% 가용성` |
| **핵심_엔티티** | DB에 저장할 주요 데이터(엔티티)들을 입력해주세요 | 예: 사용자, 주문, 상품 | `사용자, 주문, 상품, 리뷰` |
---
## 인풋 필드
```text
[프로젝트명]
▼ 텍스트 입력
placeholder: "예: 이커머스 플랫폼"
설명: 프로젝트나 서비스의 이름을 입력해주세요
[비즈니스_도메인]
▼ 드롭다운 선택
옵션: 이커머스, SNS, 예약, 금융, 헬스케어, 교육, 게임, 기타
placeholder: "예: 이커머스"
설명: 서비스가 속한 업종이나 분야를 선택해주세요
[DB_유형]
▼ 라디오 버튼 선택
옵션: ☐ MySQL ☐ PostgreSQL ☐ MongoDB ☐ Redis
설명: 사용할 데이터베이스 종류를 선택해주세요
[데이터_규모]
▼ 드롭다운 선택
옵션: 소규모(GB), 중규모(TB), 대규모(PB)
placeholder: "소규모(GB)"
설명: 예상되는 데이터 규모를 선택해주세요
[기능적_요구사항]
▼ 텍스트 입력 (쉼표로 구분)
placeholder: "예: 사용자 인증, 상품 검색"
설명: DB가 지원해야 할 핵심 기능들을 쉼표로 구분해서 입력해주세요
[비기능적_요구사항]
▼ 텍스트 입력
placeholder: "예: 100ms 이하 응답"
설명: 성능이나 가용성 목표를 입력해주세요
[핵심_엔티티]
▼ 텍스트 입력 (쉼표로 구분)
placeholder: "예: 사용자, 주문, 상품"
설명: DB에 저장할 주요 데이터(엔티티)들을 쉼표로 구분해서 입력해주세요
```
---
## 정규화 가이드
| 정규형 | 조건 | 위반 예시 |
|--------|------|----------|
| **1NF** | 모든 속성 원자값 | product_ids = "1,2,3" |
| **2NF** | 부분 함수 종속 제거 | 복합키에서 일부 속성만 종속 |
| **3NF** | 이행 함수 종속 제거 | user_id → city → state |
---
## DBMS 선택 가이드
| DBMS | 장점 | 적합한 경우 |
|------|------|------------|
| **MySQL** | 오픈소스, 빠른 읽기 | 웹 앱, 일반 비즈니스 |
| **PostgreSQL** | 고급 기능, ACID | 금융, 복잡한 쿼리 |
| **MongoDB** | 유연한 스키마 | 콘텐츠, 로그 |
| **Redis** | 초고속 | 캐싱, 세션 |
---
## 인덱스 설계 원칙
1. WHERE 절에서 자주 사용하는 컬럼
2. JOIN 조건에 사용하는 컬럼
3. ORDER BY, GROUP BY 컬럼
4. 카디널리티가 높은 컬럼 우선
```sql
-- 단일 인덱스
CREATE INDEX idx_users_email ON users(email);
-- 복합 인덱스 (카디널리티 높은 순)
CREATE INDEX idx_orders_user_date ON orders(user_id, created_at);
```
---
## 주의사항
| 주의사항 | 설명 |
|----------|------|
| 과도한 정규화 | 성능 저하 유발, 밸런스 중요 |
| 조인 남용 | N+1 문제, 조인 횟수 제한 |
| 인덱스 과다 | 쓰기 성능 저하 |
| 외래키 제약 | 대용량에서는 성능 저하 가능 |
---
## 관련 프롬프트
- [API-엔드포인트-설계](/chatgpt-프롬프트/개발/API-엔드포인트-설계) - API 설계
- [시스템-설계](/chatgpt-프롬프트/개발/시스템-설계) - 시스템 아키텍처
---
## 자주 묻는 질문 (FAQ)
### Q: RDBMS와 NoSQL 중 어떤 것을 선택해야 하나요?
**A:** 데이터 특성에 따라 다릅니다:
- **RDBMS (MySQL, PostgreSQL)**: 관계형 데이터, 트랜잭션이 중요한 경우, 복잡한 쿼리가 필요한 경우
- **NoSQL (MongoDB)**: 유연한 스키마, 대량의 비정형 데이터, 수평 확장이 중요한 경우
- **하이브리드**: 많은 프로젝트에서 두 가지를 함께 사용합니다
### Q: 정규화를 어디까지 해야 하나요?
**A:** 일반적으로 **3NF(제3정규형)**까지 권장합니다:
- **1NF**: 모든 컬럼이 원자값을 가져야 함
- **2NF**: 부분 함수 종속 제거
- **3NF**: 이행 함수 종속 제거
- **참고**: 읽기 성능이 중요한 경우 역정규화(Denormalization)를 고려하세요
### Q: 인덱스는 얼마나 만들어야 하나요?
**A:** 테이블당 **5~10개**를 권장합니다:
```sql
-- 너무 많은 인덱스는 쓰기 성능 저하
-- 카디널리티가 높은 컬럼 우선
CREATE INDEX idx_users_email ON users(email); -- O
CREATE INDEX idx_users_name ON users(name); -- X (중복 많음)