- MASTER_PLAN.md: 마이그레이션 전체 계획 - PROGRESS.md: 진행 상황 및 최종 결과 - phase-1: 5130 소스 스키마 분석 - phase-2: SAM 타겟 스키마 분석 - phase-3: 필드 매핑 설계 마이그레이션 결과: - 총 425건 품목 이관 완료 (models 18, parts 36, parts_sub 117, BDmodels 59, BOM 195) - tenant_id: 287 (경동기업) 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
249 lines
10 KiB
Markdown
249 lines
10 KiB
Markdown
# SAM 품목 테이블 스키마 분석
|
|
|
|
> 분석일: 2025-12-21
|
|
> DB: samdb (MySQL 8.0)
|
|
|
|
---
|
|
|
|
## 1. 테이블 구조 개요
|
|
|
|
### 1.1 품목 관련 테이블
|
|
| 테이블 | 설명 |
|
|
|--------|------|
|
|
| `items` | 품목 기본 정보 (통합 테이블) |
|
|
| `item_details` | 품목 상세 정보 |
|
|
| `item_sections` | 섹션 정의 (UI 그룹핑) |
|
|
| `item_fields` | 필드 정의 (동적 속성) |
|
|
| `item_pages` | 페이지 정의 (품목 유형별) |
|
|
| `item_bom_items` | BOM 구성 품목 |
|
|
| `item_id_mappings` | 레거시 ID 매핑 |
|
|
| `entity_relationships` | 엔티티 간 관계 |
|
|
|
|
### 1.2 Multi-tenant 구조
|
|
모든 테이블에 `tenant_id` 필드로 테넌트 분리
|
|
|
|
---
|
|
|
|
## 2. 테이블 상세 스키마
|
|
|
|
### 2.1 items (품목 기본 정보)
|
|
|
|
| 필드 | 타입 | NULL | 키 | 설명 |
|
|
|------|------|------|-----|------|
|
|
| id | bigint unsigned | NO | PRI | 품목 ID |
|
|
| tenant_id | bigint unsigned | NO | MUL | 테넌트 ID |
|
|
| item_type | varchar(15) | NO | | 품목 유형 (FG/PT/SM/RM/CS) |
|
|
| code | varchar(100) | NO | | 품목 코드 |
|
|
| name | varchar(255) | NO | | 품목명 |
|
|
| unit | varchar(20) | YES | | 단위 |
|
|
| category_id | bigint unsigned | YES | | 카테고리 ID |
|
|
| bom | json | YES | | BOM 정보 (JSON) |
|
|
| attributes | json | YES | | 동적 속성 (JSON) |
|
|
| attributes_archive | json | YES | | 속성 이력 |
|
|
| options | json | YES | | 옵션 |
|
|
| description | text | YES | | 설명 |
|
|
| is_active | tinyint(1) | NO | | 활성 여부 |
|
|
| created_by | bigint unsigned | YES | | 생성자 |
|
|
| updated_by | bigint unsigned | YES | | 수정자 |
|
|
| deleted_by | bigint unsigned | YES | | 삭제자 |
|
|
| created_at | timestamp | YES | | 생성일 |
|
|
| updated_at | timestamp | YES | | 수정일 |
|
|
| deleted_at | timestamp | YES | | 삭제일 (Soft Delete) |
|
|
|
|
**item_type 값:**
|
|
- `FG`: Finished Goods (완제품)
|
|
- `PT`: Parts (부품)
|
|
- `SM`: Semi-finished (반제품)
|
|
- `RM`: Raw Materials (원자재)
|
|
- `CS`: Consumables (소모품)
|
|
|
|
### 2.2 item_details (품목 상세)
|
|
|
|
| 필드 | 타입 | NULL | 설명 |
|
|
|------|------|------|------|
|
|
| id | bigint unsigned | NO | ID |
|
|
| item_id | bigint unsigned | NO | 품목 ID (FK) |
|
|
| is_sellable | tinyint(1) | NO | 판매 가능 |
|
|
| is_purchasable | tinyint(1) | NO | 구매 가능 |
|
|
| is_producible | tinyint(1) | NO | 생산 가능 |
|
|
| safety_stock | int | YES | 안전 재고 |
|
|
| lead_time | int | YES | 리드 타임 |
|
|
| is_variable_size | tinyint(1) | NO | 가변 사이즈 |
|
|
| product_category | varchar(50) | YES | 제품 분류 |
|
|
| part_type | varchar(50) | YES | 부품 유형 |
|
|
| bending_diagram | varchar(255) | YES | 벤딩 도면 |
|
|
| bending_details | json | YES | 벤딩 상세 |
|
|
| specification_file | varchar(255) | YES | 규격서 파일 |
|
|
| certification_file | varchar(255) | YES | 인증서 파일 |
|
|
| certification_number | varchar(255) | YES | 인증 번호 |
|
|
| certification_start_date | date | YES | 인증 시작일 |
|
|
| certification_end_date | date | YES | 인증 종료일 |
|
|
| is_inspection | varchar(1) | NO | 검사 대상 여부 |
|
|
| item_name | varchar(255) | YES | 품목명 (검색용) |
|
|
| specification | varchar(255) | YES | 규격 |
|
|
| search_tag | text | YES | 검색 태그 |
|
|
| remarks | text | YES | 비고 |
|
|
|
|
### 2.3 item_bom_items (BOM 구성)
|
|
|
|
| 필드 | 타입 | NULL | 설명 |
|
|
|------|------|------|------|
|
|
| id | bigint unsigned | NO | ID |
|
|
| tenant_id | bigint unsigned | NO | 테넌트 ID |
|
|
| group_id | int unsigned | NO | 그룹 ID |
|
|
| item_code | varchar(100) | YES | 품목 코드 |
|
|
| item_name | varchar(255) | NO | 품목명 |
|
|
| quantity | decimal(15,4) | NO | 수량 |
|
|
| unit | varchar(50) | YES | 단위 |
|
|
| unit_price | decimal(15,2) | YES | 단가 |
|
|
| total_price | decimal(15,2) | YES | 합계 |
|
|
| spec | text | YES | 규격 |
|
|
| note | text | YES | 비고 |
|
|
|
|
### 2.4 item_sections (섹션 정의)
|
|
|
|
| 필드 | 타입 | NULL | 설명 |
|
|
|------|------|------|------|
|
|
| id | bigint unsigned | NO | ID |
|
|
| tenant_id | bigint unsigned | NO | 테넌트 ID |
|
|
| group_id | int unsigned | NO | 그룹 ID |
|
|
| title | varchar(255) | NO | 섹션 제목 |
|
|
| type | enum('fields','bom') | NO | 섹션 유형 |
|
|
| order_no | int | NO | 정렬 순서 |
|
|
| is_template | tinyint(1) | NO | 템플릿 여부 |
|
|
| is_default | tinyint(1) | NO | 기본 여부 |
|
|
| description | text | YES | 설명 |
|
|
|
|
### 2.5 item_fields (필드 정의)
|
|
|
|
| 필드 | 타입 | NULL | 설명 |
|
|
|------|------|------|------|
|
|
| id | bigint unsigned | NO | ID |
|
|
| tenant_id | bigint unsigned | NO | 테넌트 ID |
|
|
| group_id | int unsigned | NO | 그룹 ID |
|
|
| field_name | varchar(255) | NO | 필드명 |
|
|
| field_key | varchar(100) | YES | 필드 키 |
|
|
| field_type | enum(...) | NO | 필드 유형 |
|
|
| order_no | int | NO | 정렬 순서 |
|
|
| is_required | tinyint(1) | NO | 필수 여부 |
|
|
| default_value | text | YES | 기본값 |
|
|
| validation_rules | json | YES | 검증 규칙 |
|
|
| options | json | YES | 선택 옵션 |
|
|
| storage_type | enum('column','json') | NO | 저장 방식 |
|
|
| json_path | varchar(200) | YES | JSON 경로 |
|
|
| is_common | tinyint(1) | NO | 공통 필드 여부 |
|
|
| is_active | tinyint(1) | NO | 활성 여부 |
|
|
|
|
**field_type 값:**
|
|
- `textbox`, `number`, `dropdown`, `checkbox`, `date`, `textarea`
|
|
|
|
### 2.6 item_pages (페이지 정의)
|
|
|
|
| 필드 | 타입 | NULL | 설명 |
|
|
|------|------|------|------|
|
|
| id | bigint unsigned | NO | ID |
|
|
| tenant_id | bigint unsigned | NO | 테넌트 ID |
|
|
| group_id | int unsigned | NO | 그룹 ID |
|
|
| page_name | varchar(255) | NO | 페이지명 |
|
|
| item_type | enum('FG','PT','SM','RM','CS') | NO | 품목 유형 |
|
|
| source_table | varchar(100) | YES | 소스 테이블 |
|
|
| absolute_path | varchar(500) | YES | 절대 경로 |
|
|
| is_active | tinyint(1) | NO | 활성 여부 |
|
|
|
|
### 2.7 item_id_mappings (레거시 매핑)
|
|
|
|
| 필드 | 타입 | NULL | 설명 |
|
|
|------|------|------|------|
|
|
| id | bigint unsigned | NO | ID |
|
|
| source_table | varchar(20) | NO | 소스 테이블 |
|
|
| source_id | bigint unsigned | NO | 소스 ID |
|
|
| item_id | bigint unsigned | NO | SAM 품목 ID |
|
|
|
|
> ⭐ **마이그레이션 추적용 테이블** - 5130 원본 ID와 SAM ID 매핑
|
|
|
|
### 2.8 entity_relationships (엔티티 관계)
|
|
|
|
| 필드 | 타입 | NULL | 설명 |
|
|
|------|------|------|------|
|
|
| id | bigint unsigned | NO | ID |
|
|
| tenant_id | bigint unsigned | NO | 테넌트 ID |
|
|
| group_id | int unsigned | NO | 그룹 ID |
|
|
| parent_type | varchar(50) | NO | 부모 엔티티 유형 |
|
|
| parent_id | bigint unsigned | NO | 부모 ID |
|
|
| child_type | varchar(50) | NO | 자식 엔티티 유형 |
|
|
| child_id | bigint unsigned | NO | 자식 ID |
|
|
| order_no | int | NO | 정렬 순서 |
|
|
| metadata | json | YES | 메타데이터 |
|
|
|
|
---
|
|
|
|
## 3. 관계도
|
|
|
|
```
|
|
┌─────────────────────────────────────────────────────────────┐
|
|
│ items │
|
|
│ (통합 품목 테이블: FG/PT/SM/RM/CS) │
|
|
│ │
|
|
│ id, tenant_id, item_type, code, name, attributes(JSON) │
|
|
└──────────────────────┬───────────────────────────────────────┘
|
|
│
|
|
┌───────────┼───────────┬────────────────┐
|
|
│ │ │ │
|
|
▼ ▼ ▼ ▼
|
|
┌──────────┐ ┌──────────┐ ┌──────────┐ ┌───────────────┐
|
|
│ item_ │ │ item_ │ │ item_ │ │ entity_ │
|
|
│ details │ │bom_items │ │id_mappings│ │ relationships │
|
|
│ │ │ │ │ │ │ │
|
|
│ 1:1 관계 │ │ BOM 구성 │ │ 레거시 │ │ 일반 관계 │
|
|
│ │ │ │ │ ID 매핑 │ │ (N:N 가능) │
|
|
└──────────┘ └──────────┘ └──────────┘ └───────────────┘
|
|
|
|
┌─────────────────────────────────────────────────────────────┐
|
|
│ 메타데이터 테이블 │
|
|
├─────────────────┬─────────────────┬─────────────────────────┤
|
|
│ item_sections │ item_fields │ item_pages │
|
|
│ (섹션 정의) │ (필드 정의) │ (페이지 정의) │
|
|
│ UI 그룹핑 용도 │ 동적 속성 정의 │ 품목 유형별 페이지 │
|
|
└─────────────────┴─────────────────┴─────────────────────────┘
|
|
```
|
|
|
|
---
|
|
|
|
## 4. 5130 → SAM 매핑 전략
|
|
|
|
### 4.1 테이블 매핑
|
|
|
|
| 5130 테이블 | → | SAM 테이블 | item_type |
|
|
|-------------|---|-----------|-----------|
|
|
| models | → | items | FG (완제품) |
|
|
| parts | → | items | PT (부품) |
|
|
| parts_sub | → | items | RM (원자재) |
|
|
|
|
### 4.2 관계 매핑
|
|
|
|
| 5130 관계 | → | SAM 구현 |
|
|
|-----------|---|----------|
|
|
| parts.model_id → models | → | entity_relationships (parent=FG, child=PT) |
|
|
| parts_sub.part_id → parts | → | entity_relationships (parent=PT, child=RM) |
|
|
| 또는 | → | item_bom_items로 BOM 구성 |
|
|
|
|
### 4.3 필드 매핑
|
|
|
|
| 5130 필드 | → | SAM 필드 |
|
|
|-----------|---|----------|
|
|
| model_name / part_name / subpart_name | → | items.name |
|
|
| spec | → | item_details.specification |
|
|
| unit | → | items.unit |
|
|
| quantity | → | item_bom_items.quantity |
|
|
| material | → | items.attributes.material |
|
|
| major_category | → | items.attributes.major_category |
|
|
| finishing_type | → | items.attributes.finishing_type |
|
|
|
|
### 4.4 ID 추적
|
|
|
|
`item_id_mappings` 테이블 활용:
|
|
```sql
|
|
-- 마이그레이션 후 매핑 저장
|
|
INSERT INTO item_id_mappings (source_table, source_id, item_id)
|
|
VALUES ('models', 12, 1001); -- models.model_id=12 → items.id=1001
|
|
``` |