-- ============================================================
-- MOM系统 md_bom 表创建脚本
-- 对应ERP系统: erp_md_bom
-- 生成日期: 2026-01-26
-- 兼容 MySQL 5.7+
-- ============================================================

SET NAMES utf8mb4;

-- ============================================================
-- 创建 md_bom 表 (BOM表头)
-- ============================================================

DROP TABLE IF EXISTS `md_bom`;

CREATE TABLE `md_bom` (
  `bom_id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT 'BOM ID (主键)',
  `tenant_id` varchar(20) NOT NULL COMMENT '租户ID',
  `bom_code` varchar(32) NOT NULL COMMENT 'BOM编码',
  `bom_name` varchar(100) DEFAULT NULL COMMENT 'BOM名称',
  `item_id` bigint(20) NOT NULL COMMENT '产品物料ID (外键关联md_item.item_id)',
  `item_code` varchar(32) NOT NULL COMMENT '产品物料编码 (冗余字段)',
  `item_name` varchar(100) NOT NULL COMMENT '产品物料名称 (冗余字段)',
  `item_spec` varchar(200) DEFAULT NULL COMMENT '产品物料规格 (冗余字段)',
  `unit_name` varchar(20) DEFAULT NULL COMMENT '计量单位',
  `base_qty` decimal(18,4) NOT NULL DEFAULT '1.0000' COMMENT '基本数量 (母件基数)',
  `version` varchar(20) DEFAULT NULL COMMENT '版本号',
  `version_desc` varchar(200) DEFAULT NULL COMMENT '版本说明',
  `status` varchar(20) NOT NULL DEFAULT 'DRAFT' COMMENT 'BOM状态 (DRAFT/APPROVED/OBSOLETE)',
  `enable_flag` char(1) NOT NULL DEFAULT 'Y' COMMENT '启用状态 (Y/N)',
  `remark` varchar(500) DEFAULT NULL COMMENT '备注',
  `del_flag` char(1) NOT NULL DEFAULT '0' COMMENT '删除标志 (0存在 1删除)',
  `create_by` varchar(64) DEFAULT NULL COMMENT '创建者',
  `create_time` datetime DEFAULT NULL COMMENT '创建时间',
  `update_by` varchar(64) DEFAULT NULL COMMENT '更新者',
  `update_time` datetime DEFAULT NULL COMMENT '更新时间',
  PRIMARY KEY (`bom_id`),
  UNIQUE KEY `uk_bom_code` (`bom_code`, `tenant_id`) COMMENT 'BOM编码唯一索引',
  KEY `idx_bom_item` (`item_id`) COMMENT '产品物料ID索引',
  KEY `idx_bom_tenant` (`tenant_id`) COMMENT '租户ID索引',
  KEY `idx_bom_status` (`status`) COMMENT '状态索引',
  KEY `idx_bom_code` (`bom_code`) COMMENT 'BOM编码索引'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='产品BOM表头 (同步自ERP: erp_md_bom)';

-- ============================================================
-- 表结构说明
-- ============================================================
-- 
-- 1. 表名: md_bom
-- 2. 说明: 存储产品BOM的表头信息，对应ERP系统的erp_md_bom表
-- 3. 主键: bom_id (自增)
-- 4. 唯一约束: bom_code + tenant_id (同一租户内BOM编码唯一)
-- 5. 外键关联: item_id → md_item.item_id (产品物料)
-- 
-- 6. 与md_product_bom的关系:
--    - md_bom (1) ←→ (N) md_product_bom
--    - 一个BOM表头可以有多条明细记录
--    - 通过md_product_bom.bom_id外键关联md_bom.bom_id
-- 
-- 7. 与md_item的关系:
--    - md_bom.item_id → md_item.item_id (外键)
--    - md_item.default_bom_id → md_bom.bom_id (冗余字段，用于快速查询默认BOM)
--    - 一个产品可以有多个BOM版本，但只有一个默认BOM
-- 
-- ============================================================
-- 字段映射说明 (ERP → MOM)
-- ============================================================
-- 
-- erp_md_bom.bom_id          → md_bom.bom_id
-- erp_md_bom.tenant_id        → md_bom.tenant_id
-- erp_md_bom.bom_code         → md_bom.bom_code
-- erp_md_bom.bom_name         → md_bom.bom_name
-- erp_md_bom.item_id          → md_bom.item_id
-- erp_md_bom.item_code        → md_bom.item_code
-- erp_md_bom.item_name        → md_bom.item_name
-- erp_md_bom.unit_name        → md_bom.unit_name
-- erp_md_bom.base_qty         → md_bom.base_qty
-- erp_md_bom.version          → md_bom.version
-- erp_md_bom.version_desc      → md_bom.version_desc
-- erp_md_bom.status           → md_bom.status
-- erp_md_bom.enable_flag      → md_bom.enable_flag
-- erp_md_bom.remark           → md_bom.remark
-- erp_md_bom.del_flag         → md_bom.del_flag
-- 
-- ============================================================
-- 索引说明
-- ============================================================
-- 
-- 1. PRIMARY KEY (bom_id): 主键索引
-- 2. UNIQUE KEY uk_bom_code (bom_code, tenant_id): BOM编码唯一索引
-- 3. KEY idx_bom_item (item_id): 产品物料ID索引，用于关联查询
-- 4. KEY idx_bom_tenant (tenant_id): 租户ID索引，用于多租户隔离
-- 5. KEY idx_bom_status (status): 状态索引，用于状态筛选
-- 6. KEY idx_bom_code (bom_code): BOM编码索引，用于编码查询
-- 
-- ============================================================
-- 数据同步规则
-- ============================================================
-- 
-- 1. 同步方向: ERP → MOM
-- 2. 同步频率: 实时/准实时
-- 3. 同步顺序: 
--    a. 先同步 erp_md_bom → md_bom (表头)
--    b. 再同步 erp_md_bom_line → md_product_bom (明细)
-- 4. 关联方式: 通过 bom_code 或 bom_id 关联
-- 5. 事务处理: 表头和明细必须在同一事务中同步
-- 6. 删除规则: 删除BOM时，先删除所有明细记录，再删除表头记录
-- 
-- ============================================================
-- 使用示例
-- ============================================================
-- 
-- -- 查询产品的所有BOM版本
-- SELECT * FROM md_bom 
-- WHERE item_id = 123 AND del_flag = '0' 
-- ORDER BY version DESC;
-- 
-- -- 查询产品的默认BOM（通过md_item表）
-- SELECT b.* FROM md_bom b
-- INNER JOIN md_item i ON b.bom_id = i.default_bom_id
-- WHERE i.item_id = 123 AND b.del_flag = '0';
-- 
-- -- 查询BOM及其所有明细
-- SELECT b.*, pb.* FROM md_bom b
-- LEFT JOIN md_product_bom pb ON b.bom_id = pb.bom_id
-- WHERE b.bom_id = 456 AND b.del_flag = '0' AND pb.del_flag = '0'
-- ORDER BY pb.line_no;
-- 
-- ============================================================
