# 5130 품목 테이블 스키마 분석

> 분석일: 2025-12-21
> DB: chandj (MySQL 8.0)

---

## 1. 테이블 구조 개요

### 1.1 품목 관련 테이블
| 테이블 | 레코드 수 | 설명 |
|--------|----------|------|
| `models` | 18 | 제품 모델 (KSS01, KSE01 등) |
| `parts` | 37 | 모델별 부품 |
| `parts_sub` | 134 | 부품별 세부 자재 |
| `item_list` | 9 | 품목 목록 (별도 용도) |

### 1.2 계층 구조
```
models (제품 모델)
  └─ parts (부품) - model_id 참조
       └─ parts_sub (세부 자재) - part_id 참조
```

---

## 2. 테이블 상세 스키마

### 2.1 models (제품 모델)

| 필드 | 타입 | NULL | 키 | 설명 |
|------|------|------|-----|------|
| model_id | int | NO | PRI | 모델 ID |
| model_name | varchar(255) | NO | | 모델명 (KSS01, KSE01 등) |
| major_category | enum('스크린','스라트') | NO | | 대분류 |
| finishing_type | enum('SUS마감','EGI마감') | NO | | 마감 유형 |
| description | text | YES | | 설명 |
| guiderail_type | varchar(20) | YES | | 가이드레일 유형 |
| is_deleted | tinyint(1) | NO | | 삭제 여부 |
| update_log | text | YES | | 변경 이력 |
| created_at | datetime | YES | | 생성일 |
| updated_at | datetime | YES | | 수정일 |

**샘플 데이터:**
```
model_id=12, model_name='KSS01', major_category='스크린', finishing_type='SUS마감'
model_id=14, model_name='KSE01', major_category='스크린', finishing_type='SUS마감'
```

### 2.2 parts (부품)

| 필드 | 타입 | NULL | 키 | 설명 |
|------|------|------|-----|------|
| part_id | int | NO | PRI | 부품 ID |
| model_id | int | NO | MUL | 모델 ID (FK → models) |
| part_name | varchar(30) | NO | | 부품명 |
| spec | varchar(50) | YES | | 규격 (120*70 등) |
| unit | varchar(15) | YES | | 단위 (SET 등) |
| quantity | int | NO | | 수량 |
| unitprice | varchar(15) | YES | | 단가 |
| memo | text | YES | | 메모 |
| img_url | text | YES | | 이미지 URL |
| is_deleted | tinyint(1) | YES | | 삭제 여부 |
| created_at | datetime | YES | | 생성일 |
| updated_at | datetime | YES | | 수정일 |

**샘플 데이터:**
```
part_id=49, model_id=12, part_name='상부브라켓', spec='120*70', unit='SET', quantity=1
part_id=50, model_id=12, part_name='하부브라켓', spec='60*40', unit='SET', quantity=2
```

### 2.3 parts_sub (세부 자재)

| 필드 | 타입 | NULL | 키 | 설명 |
|------|------|------|-----|------|
| subpart_id | int | NO | PRI | 세부 자재 ID |
| part_id | int | NO | MUL | 부품 ID (FK → parts) |
| subpart_name | varchar(255) | NO | | 자재명 |
| quantity | int | NO | | 수량 |
| material | varchar(255) | YES | | 재질 (SUS 1.2T 등) |
| bendSum | varchar(15) | YES | | 벤딩 합계 |
| plateSum | varchar(15) | YES | | 판재 합계 |
| finalSum | varchar(15) | YES | | 최종 합계 |
| unitPrice | varchar(15) | YES | | 단가 |
| computedPrice | varchar(15) | YES | | 계산 단가 |
| lineTotal | varchar(15) | YES | | 라인 합계 |
| image_url | varchar(255) | YES | | 이미지 URL |
| is_deleted | tinyint(1) | YES | | 삭제 여부 |
| created_at | datetime | YES | | 생성일 |
| updated_at | datetime | YES | | 수정일 |

**샘플 데이터:**
```
subpart_id=64, part_id=49, subpart_name='1차(전면)', quantity=1, material='SUS 1.2T'
subpart_id=65, part_id=49, subpart_name='2차(후면)', quantity=2, material='EGI 1.55T'
```

### 2.4 item_list (품목 목록)

| 필드 | 타입 | NULL | 키 | 설명 |
|------|------|------|-----|------|
| num | int | NO | PRI | 번호 |
| item_name | varchar(100) | NO | | 품목명 |
| col13 | decimal(10,2) | YES | | 가격 |
| col60~col80 | varchar(50) | YES | | 추가 속성들 |

> ⚠️ 컬럼명이 col60~col80으로 되어 있어 의미 파악 필요

---

## 3. 관계도

```
┌─────────────────┐
│     models      │
│   (18 레코드)    │
│                 │
│ model_id (PK)   │
│ model_name      │
│ major_category  │
│ finishing_type  │
└────────┬────────┘
         │ 1:N
         ▼
┌─────────────────┐
│     parts       │
│   (37 레코드)    │
│                 │
│ part_id (PK)    │
│ model_id (FK) ──┤
│ part_name       │
│ spec            │
└────────┬────────┘
         │ 1:N
         ▼
┌─────────────────┐
│   parts_sub     │
│  (134 레코드)    │
│                 │
│ subpart_id (PK) │
│ part_id (FK) ───┤
│ subpart_name    │
│ material        │
└─────────────────┘
```

---

## 4. 데이터 특성

### 4.1 major_category (대분류)
- `스크린` (Screen)
- `스라트` (Slat)

### 4.2 finishing_type (마감 유형)
- `SUS마감` (스테인리스)
- `EGI마감` (아연도금)

### 4.3 material (재질) - parts_sub
- `SUS 1.2T`, `SUS 1.5T` (스테인리스)
- `EGI 1.55T` (아연도금)

---

## 5. 마이그레이션 고려사항

### 5.1 구조적 차이
| 5130 | SAM | 비고 |
|------|-----|------|
| 3단계 계층 (models→parts→parts_sub) | items + item_bom_items | 구조 변환 필요 |
| 단순 FK 관계 | entity_relationships 사용 | 관계 정의 방식 다름 |
| 고정 컬럼 | JSON attributes | 유연한 속성 저장 |

### 5.2 매핑 방향
1. **models** → `items` (item_type='FG', 완제품)
2. **parts** → `items` (item_type='PT', 부품)
3. **parts_sub** → `items` (item_type='RM', 원자재)
4. **parts → models 관계** → `item_bom_items` 또는 `entity_relationships`
5. **parts_sub → parts 관계** → `item_bom_items` 또는 `entity_relationships`

### 5.3 데이터 변환 필요 항목
- `major_category` → `attributes.category` 또는 별도 분류
- `finishing_type` → `attributes.finishing_type`
- `material` → `attributes.material`
- 가격 필드들 (varchar) → decimal 변환