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