1.0.510.sql 9.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. -- =====================================================================================
  2. -- 1.0.510 · S0 MASTER DATA PLATFORM · PHASE 2 · dim_item(大数据量门)
  3. --
  4. -- ItemMaster → mdp_stg_s0_item → dim_item
  5. --
  6. -- 【为什么是 dim_item 而不是复用 mdp_std_item —— 已封板,勿再讨论】
  7. -- mdp_std_item 是 Supply/S3 的**多源**物料目录:实测混入 ic_item(另一业务域主数据),
  8. -- 租户 797 有 75 个 item_code 只来自 ic_item、在 ItemMaster 里 0 命中;其写入 SQL
  9. -- (S3MdpSyncTransformService)取值用 COALESCE($.ItemNum,$.number) 且不过滤 source_table/source_system。
  10. -- 物理上它也无法当父维度:只有 6 个业务列,无 Domain、无 ItemMaster.RecID,
  11. -- 两个最大租户的 factory_id/company_id 100% NULL。
  12. -- dim_item 不是第二份权威,是 ItemMaster 的第一次物化;二者消费方实测零重叠。
  13. --
  14. -- 【身份 = tenant_id + ItemNum】
  15. -- 实测租户内重复 0、空白 0、非法租户 0;ItemNum 跨租户碰撞 663 码 / 1534 行 ⇒ 租户必须入身份。
  16. -- 旧 UK uk_ItemMaster_factory_item 含 factory_ref_id,**不予继承**:它连 f(tenant) 都不是
  17. -- (租户 838257186181189 有 3 个取值含 0),且 8010 被三个租户共用。
  18. --
  19. -- 【大数据量】单租户最大 16150 行 > 默认 batch_size 5000,AssertNoSourceDuplicateAsync 会硬失败。
  20. -- 本 entity 的 batch_size 设 50000(3.1x 头寸)。该值是 **entity 级**(取自 mdp_entity.batch_size),
  21. -- **不影响其它任何维度**,绝不是全局放大。
  22. --
  23. -- 【字段取舍】75 列 → 只物化「全库填充率 ≥5% 且全库 distinct ≥2」的列;
  24. -- 并无条件排除:审计列 · 影子列 · bit(1) 列 · 可空 tinyint(1)。据此排除的典型:
  25. -- expire_alarm_day 0 填充的影子列(真列是 ExpireAlarmDays 22682)
  26. -- SuppWarranty bit(1) 且含 2 行 NULL —— Int 会让对账每轮必挂、BoolTrue 会滤掉那 2 行
  27. -- DEAControlled 可空 tinyint(1),2 行 NULL 会被 BoolTrue 守卫滤掉
  28. -- Length/Size/Height/Width/cust_supplied/enable_bom_version 全库 distinct=1,零信息
  29. -- Status 7/22684,且真实状态语义在 IsActive
  30. -- DefaultShelf/Remark/OwnerApplication/BOMDesignTime/RoutingDesignTime/
  31. -- drawing_design/design_owner/bom_design/routing_des/bom_version 全库 0 填充
  32. -- SizeUM(5)/LocationType(1)/PMBOM(797 空) 近空
  33. -- CreateUser/CreateTime/UpdateUser 审计列
  34. --
  35. -- 【legacy_source_id】← RecID,**技术属性**,供 C3 的 ProductStructureMaster.ComponentMaterialId
  36. -- 这类 legacy 代理键做对账解析。它不是身份;且**绝不能用 dim 的代理 id 建外键** ——
  37. -- 每轮 FULL REPLACE 后 dim_item.id 都会变。
  38. -- =====================================================================================
  39. CREATE TABLE IF NOT EXISTS `mdp_stg_s0_item` (
  40. `id` bigint NOT NULL AUTO_INCREMENT,
  41. `tenant_id` bigint NOT NULL DEFAULT 0,
  42. `factory_id` bigint DEFAULT NULL,
  43. `source_system` varchar(50) NOT NULL DEFAULT 'AIDOPDEV_MYSQL',
  44. `source_table` varchar(100) NOT NULL,
  45. `source_row_id` varchar(100) NOT NULL,
  46. `source_biz_key` varchar(300) DEFAULT NULL,
  47. `sync_batch_id` varchar(100) NOT NULL,
  48. `sync_time` datetime NOT NULL,
  49. `process_status` varchar(20) NOT NULL DEFAULT 'PENDING',
  50. `raw_data` json NOT NULL,
  51. `process_message` varchar(500) DEFAULT NULL,
  52. `update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  53. `create_time` datetime DEFAULT CURRENT_TIMESTAMP,
  54. PRIMARY KEY (`id`),
  55. UNIQUE KEY `uk_stg_s0_item` (`tenant_id`,`source_system`,`source_table`,`source_row_id`),
  56. KEY `idx_stg_s0_item_biz` (`source_biz_key`),
  57. KEY `idx_stg_s0_item_batch` (`tenant_id`,`sync_batch_id`)
  58. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='S0 贴源:物料(源 ItemMaster)';
  59. CREATE TABLE IF NOT EXISTS `dim_item` (
  60. `id` bigint NOT NULL AUTO_INCREMENT,
  61. `tenant_id` bigint NOT NULL,
  62. `item_code` varchar(100) NOT NULL COMMENT '物料编码(**唯一业务键**)← $.ItemNum',
  63. `item_name` varchar(200) NOT NULL COMMENT '← $.Descr',
  64. `item_name_2` varchar(200) DEFAULT NULL COMMENT '← $.Descr1',
  65. `unit` varchar(50) DEFAULT NULL COMMENT '← $.UM',
  66. `pur_mfg` varchar(100) DEFAULT NULL COMMENT '采购/制造属性 ← $.PurMfg',
  67. `item_type` varchar(100) DEFAULT NULL COMMENT '物料类别 ← $.ItemType',
  68. `commodity_code` varchar(100) DEFAULT NULL COMMENT '← $.CommodityCode',
  69. `rev` varchar(50) DEFAULT NULL COMMENT '← $.Rev',
  70. `drawing` varchar(100) DEFAULT NULL COMMENT '← $.Drawing',
  71. `pkg_code` varchar(50) DEFAULT NULL COMMENT '← $.PkgCode',
  72. `series` varchar(100) DEFAULT NULL COMMENT '← $.Series',
  73. `emt_type` varchar(50) DEFAULT NULL COMMENT '← $.EMTType',
  74. `po_receipt_status` varchar(8) DEFAULT NULL COMMENT '← $.PORcptStatus',
  75. `warranty_code` varchar(255) DEFAULT NULL COMMENT '← $.WarrantyCode',
  76. `default_location` varchar(100) DEFAULT NULL COMMENT '← $.Location;软引用 dim_location,无 FK',
  77. `buyer` varchar(255) DEFAULT NULL COMMENT '← $.Buyer',
  78. `planner` varchar(100) DEFAULT NULL COMMENT '← $.Planner',
  79. `net_weight` decimal(18,5) DEFAULT NULL COMMENT '← $.NetWeight;精度必须与源逐位一致',
  80. `net_weight_um` varchar(50) DEFAULT NULL COMMENT '← $.NetWeightUM',
  81. `pur_lead_time` int DEFAULT NULL COMMENT '← $.PurLT',
  82. `ins_lead_time` int DEFAULT NULL COMMENT '← $.InsLT',
  83. `mfg_lead_time` int DEFAULT NULL COMMENT '← $.MfgLT',
  84. `mfg_mttr` int DEFAULT NULL COMMENT '← $.MFGMTTR',
  85. `days_between_pm` int DEFAULT NULL COMMENT '← $.DaysBetweenPM',
  86. `expire_alarm_days` int DEFAULT NULL COMMENT '← $.ExpireAlarmDays(真列;同表 expire_alarm_day 是 0 填充影子列)',
  87. `min_order_qty` decimal(18,5) DEFAULT NULL COMMENT '← $.MinOrd',
  88. `max_order_qty` decimal(18,5) DEFAULT NULL COMMENT '← $.MaxOrd',
  89. `min_order_qty_sales` decimal(18,5) DEFAULT NULL COMMENT '← $.MinOrdSales',
  90. `order_multiple` decimal(18,5) DEFAULT NULL COMMENT '← $.OrdMult',
  91. `safety_stock` decimal(18,5) DEFAULT NULL COMMENT '← $.SafetyStk',
  92. `stock_turnover` decimal(18,5) DEFAULT NULL COMMENT '← $.StockTurnOver',
  93. `is_active` tinyint(1) NOT NULL COMMENT '← $.IsActive(真实有效状态,非 Status)',
  94. `is_confirmed` tinyint(1) NOT NULL COMMENT '← $.IsConfirm',
  95. `key_item` tinyint(1) NOT NULL COMMENT '← $.KeyItem',
  96. `inspect_required` tinyint(1) NOT NULL COMMENT '← $.Inspect',
  97. `issue_policy` tinyint(1) NOT NULL COMMENT '← $.IssuePolicy',
  98. `install` tinyint(1) NOT NULL COMMENT '← $.Install',
  99. `lot_serial_control` tinyint(1) NOT NULL COMMENT '← $.LotSerialControl',
  100. `allocate_single_lot` tinyint(1) NOT NULL COMMENT '← $.AllocateSingleLot',
  101. `auto_lot_nums` tinyint(1) NOT NULL COMMENT '← $.AutoLotNums',
  102. `trace_detail` tinyint(1) NOT NULL COMMENT '← $.TraceDetail',
  103. `is_main_master` tinyint(1) NOT NULL COMMENT '← $.IsMainMas',
  104. `mrp_required` tinyint(1) NOT NULL COMMENT '← $.MRPRequired',
  105. `domain_code` varchar(50) DEFAULT NULL COMMENT 'LEGACY_SCOPE ← $.Domain;**不是身份**',
  106. `company_id` bigint NOT NULL COMMENT 'LEGACY_SCOPE ← $.company_ref_id;**不是身份**',
  107. `factory_id` bigint NOT NULL COMMENT 'LEGACY_SCOPE ← $.factory_ref_id;**不是身份**(连 f(tenant) 都不是)',
  108. `legacy_source_id` bigint NOT NULL COMMENT '技术属性 ← $.RecID;供 C3 legacy 代理键对账。**不是身份,禁止用 dim.id 建外键**',
  109. `source_system` varchar(50) NOT NULL,
  110. `source_biz_key` varchar(300) NOT NULL,
  111. `source_updated_at` datetime DEFAULT NULL COMMENT '← $.UpdateTime(源 22682/22684)',
  112. `sync_batch_id` varchar(64) NOT NULL,
  113. `sync_time` datetime NOT NULL,
  114. `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
  115. `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  116. PRIMARY KEY (`id`),
  117. -- 索引字节 = 8 + 100*4 = 408 < 3072
  118. UNIQUE KEY `uk_dim_item` (`tenant_id`,`item_code`),
  119. KEY `idx_dim_item_batch` (`sync_batch_id`),
  120. -- 供 C3 的 legacy 代理键(如 ProductStructureMaster.ComponentMaterialId)反查
  121. KEY `idx_dim_item_legacy` (`tenant_id`,`legacy_source_id`)
  122. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='S0 主数据维度:物料。源 ItemMaster,FULL REPLACE。**S0 的 Item 权威**,与 Supply/S3 的多源 mdp_std_item 语义不同。';
  123. SET @src_id = (SELECT `id` FROM `mdp_source` WHERE `source_code` = 'AIDOPDEV_MYSQL' LIMIT 1);
  124. INSERT INTO `mdp_entity`
  125. (`tenant_id`,`source_id`,`entity_code`,`entity_name`,`entity_type`,
  126. `source_table_name`,`target_table_name`,`sync_mode`,`incr_column`,`batch_size`,
  127. `biz_key_expr`,`status`,`create_time`,`update_time`)
  128. SELECT 0, @src_id, 'S0_ITEM', 'S0 物料主数据入站', 'TABLE',
  129. 'ItemMaster', 'mdp_stg_s0_item', 'FULL', NULL, 50000,
  130. 'ItemNum', 1, NOW(), NOW()
  131. WHERE @src_id IS NOT NULL
  132. AND NOT EXISTS (SELECT 1 FROM `mdp_entity` WHERE `entity_code` = 'S0_ITEM');
  133. -- ── 回滚(注释,非可执行)──
  134. -- DROP TABLE IF EXISTS `dim_item`;
  135. -- DROP TABLE IF EXISTS `mdp_stg_s0_item`;
  136. -- DELETE FROM `mdp_entity` WHERE `tenant_id` = 0 AND `entity_code` = 'S0_ITEM';