元数据驱动的多域配置化设计方案
一、配置化架构总体设计
1. 核心架构模式
-- 统一元数据表结构(跨域通用)
CREATE TABLE metadata_fields (
    id BIGINT PRIMARY KEY AUTO_INCREMENT,
    domain VARCHAR(50) NOT NULL COMMENT '业务域: product/purchase/warehouse/sales/finance',
    entity_type VARCHAR(100) NOT NULL COMMENT '实体类型: product/order/inventory等',
    field_code VARCHAR(100) NOT NULL COMMENT '字段编码',
    field_name VARCHAR(200) NOT NULL COMMENT '字段名称',
    field_type ENUM('string', 'number', 'date', 'datetime', 'boolean', 'enum', 'json') DEFAULT 'string',
    data_type VARCHAR(50) COMMENT '数据类型',
    
    -- 配置控制
    is_required BOOLEAN DEFAULT FALSE COMMENT '是否必填',
    is_system BOOLEAN DEFAULT FALSE COMMENT '是否系统字段',
    is_searchable BOOLEAN DEFAULT TRUE COMMENT '是否可搜索',
    is_exportable BOOLEAN DEFAULT TRUE COMMENT '是否可导出',
    
    -- 验证规则
    validation_rules JSON COMMENT '验证规则',
    default_value VARCHAR(500) COMMENT '默认值',
    enum_values JSON COMMENT '枚举值列表',
    
    -- 显示配置
    display_order INT DEFAULT 0 COMMENT '显示顺序',
    display_group VARCHAR(100) COMMENT '显示分组',
    placeholder VARCHAR(200) COMMENT '占位文本',
    help_text VARCHAR(500) COMMENT '帮助文本',
    
    -- 多租户隔离
    customer_id BIGINT COMMENT '客户ID(为空表示公共字段)',
    tenant_id VARCHAR(50) COMMENT '租户标识',
    
    created_by VARCHAR(50) NOT NULL,
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    
    UNIQUE KEY uk_domain_entity_field (domain, entity_type, field_code, tenant_id),
    INDEX idx_domain_entity (domain, entity_type),
    INDEX idx_tenant (tenant_id)
) COMMENT '元数据字段表';
-- 扩展数据存储表(按域分表)
CREATE TABLE purchase_extension_data (
    id BIGINT PRIMARY KEY AUTO_INCREMENT,
    entity_id BIGINT NOT NULL COMMENT '业务实体ID',
    entity_type VARCHAR(100) NOT NULL COMMENT '实体类型',
    field_code VARCHAR(100) NOT NULL COMMENT '字段编码',
    field_value TEXT COMMENT '字段值',
    
    tenant_id VARCHAR(50) NOT NULL COMMENT '租户标识',
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
    
    UNIQUE