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. 관계도
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 테이블 활용: