1.0.515.sql 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. -- =====================================================================================
  2. -- WIP-SUPPLIER · S0 · 供应商维度(占位名,提交那刻 rename 为正式 1.0.<next>.sql)
  3. --
  4. -- SuppMaster → mdp_stg_s0_supplier → dim_supplier
  5. --
  6. -- 身份 = tenant_id + Supp(租户内重复 0 组;Supp 跨租户碰撞 13 码/27 行 ⇒ 租户必须入身份)。
  7. -- 旧唯一键 uk_SuppMaster_factory_supp 含 factory_ref_id,不予继承:
  8. -- Domain / company_ref_id / factory_ref_id **每租户各只有 1 个取值**(严格 f(tenant)、零判别力),
  9. -- 且 factory_ref_id=1000 被 797403760988229 与 824585161322565 两租户共用。
  10. -- CRUD 的 (TenantId && FactoryRefId && Supp) 查重守卫不构成 factory 入身份的证据 ——
  11. -- 其 factoryId 来自 AdoS0OrgScope.ResolveAsync(db, tenantId),仅凭 tenantId 解析并强制盖章、
  12. -- 忽略 payload,故该守卫语义上等价于 tenant + Supp。
  13. -- 真实消费方按 tenant + 编码关联:SrmPurchase.SupplierNumber == Supp 命中 4447/4449;
  14. -- 而 srm_purchase.supplier_id → SuppMaster.RecID 命中 0/4449 ⇒ RecID 无消费方,不物化。
  15. -- =====================================================================================
  16. CREATE TABLE IF NOT EXISTS `mdp_stg_s0_supplier` (
  17. `id` bigint NOT NULL AUTO_INCREMENT,
  18. `tenant_id` bigint NOT NULL DEFAULT 0,
  19. `factory_id` bigint DEFAULT NULL,
  20. `source_system` varchar(50) NOT NULL DEFAULT 'AIDOPDEV_MYSQL',
  21. `source_table` varchar(100) NOT NULL,
  22. `source_row_id` varchar(100) NOT NULL,
  23. `source_biz_key` varchar(300) DEFAULT NULL,
  24. `sync_batch_id` varchar(100) NOT NULL,
  25. `sync_time` datetime NOT NULL,
  26. `process_status` varchar(20) NOT NULL DEFAULT 'PENDING',
  27. `raw_data` json NOT NULL,
  28. `process_message` varchar(500) DEFAULT NULL,
  29. `update_time` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  30. `create_time` datetime DEFAULT CURRENT_TIMESTAMP,
  31. PRIMARY KEY (`id`),
  32. UNIQUE KEY `uk_stg_s0_supplier` (`tenant_id`,`source_system`,`source_table`,`source_row_id`),
  33. KEY `idx_stg_s0_supplier_biz` (`source_biz_key`),
  34. KEY `idx_stg_s0_supplier_batch` (`tenant_id`,`sync_batch_id`)
  35. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci COMMENT='S0 贴源:供应商(源 SuppMaster)';
  36. CREATE TABLE IF NOT EXISTS `dim_supplier` (
  37. `id` bigint NOT NULL AUTO_INCREMENT COMMENT '技术行号;每轮 FULL REPLACE 即变,禁止外部引用',
  38. `tenant_id` bigint NOT NULL,
  39. `supplier_code` varchar(100) NOT NULL COMMENT '供应商编码(**唯一业务键**)← $.Supp',
  40. `supplier_name` varchar(200) DEFAULT NULL COMMENT '← $.SortName(DDL 注释即「简称」;本表无全称列,不发明第二个名称列)。🔴 21 行 NULL(全在租户 797),绝不能设 Required',
  41. `is_active` tinyint(1) NOT NULL COMMENT '← $.IsActive(源 tinyint(1) NOT NULL,3462 启用 / 113 停用)',
  42. `tax_included` tinyint(1) NOT NULL COMMENT '← $.TaxIn(含税;源 tinyint(1) NOT NULL,实测仅 1 行为 1)',
  43. `domain_code` varchar(50) DEFAULT NULL COMMENT 'LEGACY_SCOPE ← $.Domain;f(tenant),**不是身份**',
  44. `company_id` bigint NOT NULL COMMENT 'LEGACY_SCOPE ← $.company_ref_id;f(tenant),**不是身份**',
  45. `factory_id` bigint NOT NULL COMMENT 'LEGACY_SCOPE ← $.factory_ref_id;f(tenant) 且 1000 被两租户共用,**不是身份**',
  46. `source_system` varchar(50) NOT NULL,
  47. `source_biz_key` varchar(300) NOT NULL,
  48. `source_updated_at` datetime DEFAULT NULL COMMENT '← $.UpdateTime;12 行 NULL(全在租户 838257186181189),故可空',
  49. `sync_batch_id` varchar(64) NOT NULL,
  50. `sync_time` datetime NOT NULL,
  51. `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,
  52. `update_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  53. PRIMARY KEY (`id`),
  54. -- 索引字节 = 8 + 100*4 = 408 < 3072
  55. UNIQUE KEY `uk_dim_supplier` (`tenant_id`,`supplier_code`),
  56. KEY `idx_dim_supplier_batch` (`sync_batch_id`)
  57. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci
  58. COMMENT='S0 主数据维度:供应商。源 SuppMaster,FULL REPLACE。**S0 的 Supplier 权威**,与 Supply/S3 的多源 mdp_std_supplier 语义不同。RecID 无消费方故不物化 legacy_source_id。';
  59. SET @src_id = (SELECT `id` FROM `mdp_source` WHERE `source_code` = 'AIDOPDEV_MYSQL' LIMIT 1);
  60. -- batch_size 20000:单租户最大 3185 行;默认 5000 只有 1.57× 头寸,而
  61. -- AssertNoSourceDuplicateAsync 是 sourceCount >= batchSize 硬失败。该值是 entity 级,不影响其它维度。
  62. INSERT INTO `mdp_entity`
  63. (`tenant_id`,`source_id`,`entity_code`,`entity_name`,`entity_type`,
  64. `source_table_name`,`target_table_name`,`sync_mode`,`incr_column`,`batch_size`,
  65. `biz_key_expr`,`status`,`create_time`,`update_time`)
  66. SELECT 0, @src_id, 'S0_SUPPLIER', 'S0 供应商入站', 'TABLE',
  67. 'SuppMaster', 'mdp_stg_s0_supplier', 'FULL', NULL, 20000,
  68. 'Supp', 1, NOW(), NOW()
  69. WHERE @src_id IS NOT NULL
  70. AND NOT EXISTS (SELECT 1 FROM `mdp_entity` WHERE `entity_code` = 'S0_SUPPLIER');
  71. -- ── 回滚(注释,非可执行)──
  72. -- DROP TABLE IF EXISTS `dim_supplier`, `mdp_stg_s0_supplier`;
  73. -- DELETE FROM `mdp_entity` WHERE `tenant_id`=0 AND `entity_code`='S0_SUPPLIER';