<?php
// @codingStandardsIgnoreStart
?>
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charSet="utf-8" />
    <title>元数据 - XMVC</title>
    <style>
        <?php require(__DIR__ . '/style.css'); ?>

        /* */
        i {
            color: #00E
        }

        u {
            text-decoration: none;
            color: #A00;
        }
    </style>
</head>

<body class="overview">
    <h1>元数据 Meta Data</h1>
    <h2>规则</h2>
    <div class="doc">
        <ul>
            <li><b>表名:</b> 小写字母, 单词用 _ 分割. 例 sys_user</li>
            <li><b>子段名:</b> 使用表名做前缀, 小写字母, 单词用 _ 分割. 例 sys_user_id</li>
            <li>
                <b>注释</b>
                <ul>
                    <li>
                        <div><b>表注释:</b> <span style="color:#00A">表描述内容</span><span style="color:#A00">{JSON规则}</span> 例 系统用户{"prefix":"sys_user_"}</div>
                        <pre>
<b>prefix:</b><i>string</i> 规定表的前缀, 元数据类的属性将去掉字段名的表前缀取后面的部分
</pre>
                    </li>
                    <li>
                        <div><b>字段注释:</b> <span style="color:#00A">字段描述内容</span><span style="color:#A00">{JSON规则}</span></div>
                        <pre>
<b>display:</b><i>string|object</i> 显示格式, 将根据字段类型来判断. 
    <u>日期时间</u> 只针对 DATE, TIME, DATETIME (弃用timestamp) 例 更新时间{"display":"dateFormat"}
        <i>dateFormat</i> 日期格式完整年月日 (对应 config 下的 DATE 配置) <b>DATE</b> 类型默认
        <i>dateFormatYearMonth</i> 短日期年月
        <i>dateFormatYear</i> 短日期年 默认
        <i>dateTimeFormat</i> 日期时间格式完整年月日小时分钟秒钟 <b>DATETIME</b>E 类型默认
        <i>dateTimeFormatHourMinute</i> 短日期时间格式年月日小时分钟
        <i>dateTimeFormatHour</i> 短日期时间格式年月日小时
        <i>timeFormat</i> 时间格式完整小时分钟秒钟 <b>TIME</b> 类型默认
        <i>timeFormatHourMinute</i> 短时间格式小时分钟
        <i>timeFormatHour</i> 短时间格式小时
    <u>小数位数</u> sprintf的格式 例 price{"display":"%.2f"}
<b>enum:</b><i>object</i> 
    <u>enum 枚举</u> 例 状态{"enum":{"unprocessed":"未处理", "enabled":"允许", "disabled":"禁用"}}
    <u>数字 枚举</u> 例 主管{"enum":{"0":"否", "1":"是"}}
<b>lang:</b><i>1|0</i> 是否支持多语言, 例 部门名称{"lang":"1"}
<b>rules:</b><i>array</i> 验证规则, 例 用户名{"rules":{"type":"var","minLen":"3","maxLen":"50"}}
    <u>must</u> 必须项
    <u>type</u> 验证类型
        <i>string</i> 默认
        <i>int</i>
        <i>double</i>
        <i>number</i> 和 double 验证一样, 只是代码中可区分一下
        <i>date</i>
        <i>time</i>
        <i>hourMinute</i> 小时:分钟
        <i>datetime</i>
        <i>var</i> 字母、数字、下划线 (变量名规则 )
        <i>alpha</i> 字母
        <i>alpha_num</i> 字母数字
        <i>alpha_dash</i> 字母、数字、下划线或中划线
        <i>password</i> 必须有 小写字母, 大写字母, 数字, 特殊符号, 长度 9 位及以上
        <i>enum</i> 枚举 {"type":"enum", "enum":["Mr.", "Ms.""]}
        <i>json</i>
        <i>html</i> 不转义为安全字符
        <i>email</i>
        <i>ip</i>
        <i>url</i>
        <i>regex</i> 自定义正则验证 {"type":"regex", "regex": "/\d{2}/", "msg":"不符合规则"}
        <i>callback</i> 自定义函数验证 {"type":"callback", "callback": "类名<b><u>::</u></b>静态方法名"}   {"type":"callback", "callback": "类名<b><u>-></u></b>实例方法名"}
    <u>min</u> 最小值
    <u>max</u> 最大值
    <u>minLen</u> 最小长度
    <u>maxLen</u> 最大长度
</pre>
                    </li>
                </ul>
            </li>
        </ul>
    </div>



    <pre>
基于元数据驱动开发(meta-Driven Development)是一种开发方法，其中系统的行为和功能由外部定义的元数据(即数据关于数据的信息)来驱动。
这种方法具有高度的灵活性和可扩展性。要实现无数据(即不依赖具体业务数据)的情况下进行开发，需要准备和定义一套完整的元数据内容。
以下是需要具备的主要内容：

### 1. 数据模型定义
元数据需要包含关于数据模型的详细描述，包括表结构、字段、数据类型、约束等信息。
- **表定义**：表名、描述等。
- **字段定义**：字段名、数据类型、长度、是否必填、默认值、描述等。
- **约束**：主键、外键、唯一约束、检查约束等。

### 2. 表单和界面配置
用于生成动态表单和用户界面的元数据。
- **表单配置**：字段的布局、显示名称、验证规则、默认值、提示信息等。
- **界面配置**：页面布局、组件类型(如文本框、下拉框、复选框等)、交互行为等。

### 3. 业务规则和逻辑
定义业务规则和逻辑，使得系统能够根据这些规则执行相应的操作。
- **业务规则**：条件、触发事件、执行操作等。
- **流程定义**：工作流、审批流程、步骤、条件、处理人等。

### 4. 数据关系和引用
定义数据之间的关系，包括关联关系和依赖关系。
- **关系定义**：一对一、一对多、多对多关系等。
- **引用关系**：外键引用、级联操作等。

### 5. 权限和安全
定义系统的权限和安全控制。
- **用户角色**：角色定义、角色描述等。
- **权限配置**：权限分配、访问控制、操作权限等。

### 6. 数据验证和校验规则
定义数据输入的验证和校验规则。
- **校验规则**：正则表达式、自定义校验函数等。
- **错误信息**：校验失败的提示信息。

### 7. 日志和审计
定义系统的日志记录和审计规则。
- **日志配置**：记录级别、日志格式、存储位置等。
- **审计规则**：操作记录、变更记录、时间戳、操作人等。

### 8. 国际化和本地化
支持多语言和地区设置的元数据。
- **语言包**：各语言的文本翻译、日期和时间格式、本地化设置等。

### 9. 配置和参数
定义系统的配置参数和可调节的设置。
- **系统参数**：全局设置、默认值、配置项等。
- **模块配置**：各模块的独立配置项、参数说明等。

### 10. 文档和说明
提供详细的文档和说明，帮助开发人员理解和使用元数据。
- **文档**：元数据结构说明、使用指南、最佳实践等。
- **示例**：实际应用中的元数据示例、配置模板等。
   
</pre>

    <h2>元数据表定义</h2>
    <pre contenteditable="true">
START TRANSACTION;

DROP TABLE IF EXISTS xmeta__lnk_power_entity;
DROP TABLE IF EXISTS xmeta__lnk_user_role;
DROP TABLE IF EXISTS xmeta__lnk_user_depa;
DROP TABLE IF EXISTS xmeta__lnk_form_layout_field;
DROP TABLE IF EXISTS xmeta__lnk_role_power;
DROP TABLE IF EXISTS xmeta_general;
DROP TABLE IF EXISTS xmeta_file;
DROP TABLE IF EXISTS xmeta_entity;
DROP TABLE IF EXISTS xmeta_form_layout;        
DROP TABLE IF EXISTS xmeta_form_field;
DROP TABLE IF EXISTS xmeta_form;
DROP TABLE IF EXISTS xmeta_power_item;
DROP TABLE IF EXISTS xmeta_power;
DROP TABLE IF EXISTS xmeta_role;
DROP TABLE IF EXISTS xmeta_depa;
DROP TABLE IF EXISTS xmeta_audit_map;
DROP TABLE IF EXISTS xmeta_audit;
DROP TABLE IF EXISTS xmeta_user_cfg;
DROP TABLE IF EXISTS xmeta_user;
DROP TABLE IF EXISTS xmeta_json_map;
DROP TABLE IF EXISTS xmeta_lang_map;
DROP TABLE IF EXISTS xmeta_lang_general;
DROP TABLE IF EXISTS xmeta_lang;
DROP TABLE IF EXISTS xmeta_business;
DROP TABLE IF EXISTS xmeta_foreign; 
DROP TABLE IF EXISTS xmeta_index;
DROP TABLE IF EXISTS xmeta_column;
DROP TABLE IF EXISTS xmeta_table;
DROP TABLE IF EXISTS xmeta_view;
-- DROP TABLE IF EXISTS xmeta_db;

-- 数据库定义
CREATE TABLE IF NOT EXISTS xmeta_db (
    xmeta_db_name VARCHAR(255) CHARACTER SET ascii COLLATE ascii_bin NOT NULL COMMENT '数据库的名称',
    xmeta_db_key VARCHAR(255) CHARACTER SET ascii COLLATE ascii_bin NOT NULL COMMENT '数据库配置键',
    xmeta_db_namespace VARCHAR(255) CHARACTER SET ascii COLLATE ascii_bin NOT NULL COMMENT '元对象类的命名空间',
    xmeta_db_default_charset VARCHAR(255) NOT NULL COMMENT '数据库的默认字符编码',
    xmeta_db_collate VARCHAR(255) NOT NULL COMMENT '数据库的默认字符编码排序规则',
    xmeta_db_comment TEXT COMMENT '数据库的描述信息',
    xmeta_db_ddl text NOT NULL COMMENT '数据库的 DDL',
    xmeta_db_hold_audit TINYINT(1) NOT NULL DEFAULT 0 COMMENT '数据库是否进入审计',
    xmeta_db_mtime DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    xmeta_db_ctime DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    PRIMARY KEY (xmeta_db_name),
    UNIQUE KEY (xmeta_db_name)
) COMMENT '元数据-数据库的基本信息 {"caption":"元数据-数据库","prefix":"~_","classname":""}';

-- 视图定义
CREATE TABLE xmeta_view (
    xmeta_view_db_name VARCHAR(255) CHARACTER SET ascii COLLATE ascii_bin NOT NULL COMMENT '数据库的名称(外键引用 xmeta_db)',
    xmeta_view_name VARCHAR(255) CHARACTER SET ascii COLLATE ascii_bin COMMENT '视图的名称',
    xmeta_view_caption VARCHAR(255) COMMENT '视图的标题名称',
    xmeta_view_ddl text NOT NULL COMMENT '视图的 DDL',
    xmeta_view_ddl_struct JSON NOT NULL COMMENT '视图的DDL构造信息',
    xmeta_view_mtime DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    xmeta_view_ctime DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    PRIMARY KEY (xmeta_view_db_name, xmeta_view_name),
    UNIQUE KEY (xmeta_view_db_name, xmeta_view_name),
    KEY (xmeta_view_db_name),
    CONSTRAINT `xmeta_view_ibfk_1 {"type":"N:1"}` FOREIGN KEY (xmeta_view_db_name) REFERENCES xmeta_db(xmeta_db_name) ON DELETE CASCADE ON UPDATE CASCADE
) COMMENT '元数据-视图的基本信息 {"caption":"元数据-视图","prefix":"~_","classname":""}';

-- 表定义
CREATE TABLE xmeta_table (
    xmeta_table_db_name VARCHAR(255) CHARACTER SET ascii COLLATE ascii_bin NOT NULL COMMENT '数据库的名称(外键引用 xmeta_db)',
    xmeta_table_name VARCHAR(255) CHARACTER SET ascii COLLATE ascii_bin NOT NULL COMMENT '表的名称',
    xmeta_table_classname VARCHAR(255) CHARACTER SET ascii COLLATE ascii_bin NOT NULL COMMENT '表的类名 "classname"',
    xmeta_table_classtpl VARCHAR(255) CHARACTER SET ascii COLLATE ascii_bin NOT NULL DEFAULT '' COMMENT '表的类模板, 例 "classtpl":"class2.tpl.php"',
    xmeta_table_sort INT NOT NULL COMMENT '表的顺序,注意这是在生成meta时对选择一批表按外键关系排列的顺序',
    xmeta_table_caption VARCHAR(255) NOT NULL COMMENT '表的标题名称 "caption"',
    xmeta_table_engine VARCHAR(255) NOT NULL COMMENT '表的引擎',
    xmeta_table_default_charset VARCHAR(255) NOT NULL COMMENT '表的默认字符编码',
    xmeta_table_collate VARCHAR(255) NOT NULL COMMENT '表的默认字符编码排序规则',
    xmeta_table_primary VARCHAR(512) NOT NULL DEFAULT '' COMMENT '表的主键,多个用逗号分隔',
    xmeta_table_comment TEXT NOT NULL COMMENT '表的描述信息',
    xmeta_table_field_prefix VARCHAR(255) NOT NULL DEFAULT '' COMMENT '表字段前缀 "prefix"',
    xmeta_table_type VARCHAR(255) NOT NULL DEFAULT 'table' COMMENT '表的类型, 例 "type": table, tree, lrtree',
    xmeta_table_type_info JSON COMMENT '表类型的规则配置信息 "typeInfo"',
    xmeta_table_parent_name VARCHAR(255) NOT NULL DEFAULT '' COMMENT '父表 "parent"',
    xmeta_table_ddl text NOT NULL COMMENT '表的 DDL',
    xmeta_table_ddl_struct JSON NOT NULL COMMENT '表的DDL构造信息',
    xmeta_table_mtime DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    xmeta_table_ctime DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    PRIMARY KEY (xmeta_table_db_name, xmeta_table_name),
    UNIQUE KEY (xmeta_table_db_name, xmeta_table_caption),
    KEY (xmeta_table_db_name),
    CONSTRAINT `xmeta_table_ibfk_1 {"type":"N:1"}` FOREIGN KEY (xmeta_table_db_name) REFERENCES xmeta_db(xmeta_db_name) ON DELETE CASCADE ON UPDATE CASCADE
) COMMENT '元数据-表的基本信息 {"caption":"元数据-表","prefix":"~_","classname":""}';

-- 字段定义
CREATE TABLE xmeta_column (
    xmeta_column_db_name VARCHAR(255) CHARACTER SET ascii COLLATE ascii_bin NOT NULL COMMENT '数据库的名称:(外键引用 xmeta_table)',
    xmeta_column_table_name VARCHAR(255) CHARACTER SET ascii COLLATE ascii_bin COMMENT '表的名称:(外键引用 xmeta_table)',
    xmeta_column_name VARCHAR(255) CHARACTER SET ascii COLLATE ascii_bin NOT NULL COMMENT '字段的名称',
    xmeta_column_attr VARCHAR(255) CHARACTER SET ascii COLLATE ascii_bin NOT NULL COMMENT '字段在类中的属性名称 "attr", 默认是去掉字段前缀的字段名称去下划线用首字线小写+驼峰',
    xmeta_column_sort INT NOT NULL COMMENT '字段在表中的顺序',
    xmeta_column_caption VARCHAR(255) NOT NULL COMMENT '字段的标题名称 "caption"',
    xmeta_column_type VARCHAR(255) CHARACTER SET ascii COLLATE ascii_bin NOT NULL DEFAULT '' COMMENT '字段的数据类型(如 VARCHAR, INT)',
    xmeta_column_type_param VARCHAR(2048) NOT NULL DEFAULT '' COMMENT '字段的数据长度或者参数',
    xmeta_column_is_auto_increment TINYINT(1) NOT NULL DEFAULT 0 COMMENT '字段是否是自增字段',
    xmeta_column_is_notnull TINYINT(1) NOT NULL DEFAULT 0 COMMENT '字段不允许 NULL 值',
    xmeta_column_is_primary TINYINT(1) NOT NULL DEFAULT 0 COMMENT '字段是否是主键',
    xmeta_column_default_value VARCHAR(255) COMMENT '字段的默认值',
    xmeta_column_default_charset VARCHAR(255) NOT NULL DEFAULT '' NOT NULL COMMENT '表的默认字符编码',
    xmeta_column_collate VARCHAR(255) NOT NULL DEFAULT '' COMMENT '表的默认字符编码排序规则',
    xmeta_column_on_update TINYINT(1) NOT NULL DEFAULT 0 COMMENT '字段更新时是否更新当前时间',
    xmeta_column_comment TEXT NOT NULL COMMENT '字段的描述信息',
    xmeta_column_enum_info JSON COMMENT '值的枚举描述 "enum"',
    xmeta_column_mtime DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    xmeta_column_ctime DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    PRIMARY KEY (xmeta_column_db_name, xmeta_column_table_name, xmeta_column_name),
    UNIQUE KEY (xmeta_column_db_name, xmeta_column_table_name, xmeta_column_caption),
    KEY (xmeta_column_db_name, xmeta_column_table_name),
    CONSTRAINT `xmeta_column_ibfk_1 {"type":"N:1"}` FOREIGN KEY (xmeta_column_db_name, xmeta_column_table_name) REFERENCES xmeta_table(xmeta_table_db_name, xmeta_table_name)  ON DELETE CASCADE ON UPDATE CASCADE
) COMMENT '元数据-字段信息 {"caption":"元数据-字段","prefix":"~_","classname":""}';

-- 索引字段映射
CREATE TABLE xmeta_index (
    xmeta_index_db_name VARCHAR(255) CHARACTER SET ascii COLLATE ascii_bin NOT NULL COMMENT '数据库的名称(外键引用 xmeta_column)',
    xmeta_index_table_name VARCHAR(255) CHARACTER SET ascii COLLATE ascii_bin COMMENT '表的名称(外键引用 xmeta_column)',
    xmeta_index_column_name VARCHAR(255) CHARACTER SET ascii COLLATE ascii_bin COMMENT '字段的名称(外键引用 xmeta_column)',
    xmeta_index_name VARCHAR(255) CHARACTER SET ascii COLLATE ascii_bin COMMENT '索引的名称',
    xmeta_index_type ENUM('KEY','PRIMARY KEY','UNIQUE KEY') CHARACTER SET ascii COLLATE ascii_bin NOT NULL COMMENT '索引类型',
    xmeta_index_sort INT COMMENT '字段在索引中的顺序',
    xmeta_index_mtime DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    xmeta_index_ctime DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    PRIMARY KEY (xmeta_index_db_name, xmeta_index_table_name, xmeta_index_column_name, xmeta_index_name, xmeta_index_sort),
    KEY (xmeta_index_db_name, xmeta_index_table_name, xmeta_index_column_name),
    CONSTRAINT `xmeta_index_ibfk_1 {"type":"M:N"}` FOREIGN KEY (xmeta_index_db_name, xmeta_index_table_name, xmeta_index_column_name) REFERENCES xmeta_column(xmeta_column_db_name, xmeta_column_table_name, xmeta_column_name) ON DELETE CASCADE ON UPDATE CASCADE
) COMMENT '元数据-索引字段映射信息 {"caption":"元数据-索引","prefix":"~_","classname":""}';

-- 外键关系表
CREATE TABLE xmeta_foreign (
    xmeta_foreign_db_name VARCHAR(255) CHARACTER SET ascii COLLATE ascii_bin NOT NULL COMMENT '数据库的名称(外键引用 xmeta_column)',
    xmeta_foreign_table_name VARCHAR(255) CHARACTER SET ascii COLLATE ascii_bin NOT NULL COMMENT '表的名称(外键引用 xmeta_column)',
    xmeta_foreign_column_name VARCHAR(255) CHARACTER SET ascii COLLATE ascii_bin NOT NULL COMMENT '表的列(外键引用 xmeta_column)',
    xmeta_foreign_db_name2 VARCHAR(255) CHARACTER SET ascii COLLATE ascii_bin NOT NULL COMMENT '外部数据库的名称(外键引用 xmeta_column)',
    xmeta_foreign_table_name2 VARCHAR(255) CHARACTER SET ascii COLLATE ascii_bin NOT NULL COMMENT '外部表的名称(外键引用 xmeta_column)',
    xmeta_foreign_column_name2 VARCHAR(255) CHARACTER SET ascii COLLATE ascii_bin NOT NULL COMMENT '外部表的列(外键引用 xmeta_column)',
    xmeta_foreign_name VARCHAR(255) CHARACTER SET ascii COLLATE ascii_bin COMMENT '外键的名称',
    xmeta_foreign_count INT COMMENT '当前的外键名下共有多少字段',
    xmeta_foreign_sort INT COMMENT '字段在索引中的顺序',
    xmeta_foreign_type ENUM('1:1','1:N','N:1','M:N') NOT NULL COMMENT '关系定义',
    xmeta_foreign_is_filter TINYINT(1) NOT NULL COMMENT '是否过滤掉此外键的元对象类的获取方法',
    xmeta_foreign_notindb TINYINT(1) NOT NULL COMMENT '虚拟外键约束, 非数据库约束, 用程序来实现约束',
    xmeta_foreign_on_delete ENUM('CASCADE', 'SET NULL', 'NO ACTION', 'RESTRICT', 'SET DEFAULT') DEFAULT 'CASCADE' COMMENT '外键删除时的动作',
    xmeta_foreign_on_update ENUM('CASCADE', 'SET NULL', 'NO ACTION', 'RESTRICT', 'SET DEFAULT') DEFAULT 'NO ACTION' COMMENT '外键更新时的动作',
    xmeta_foreign_mtime DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    xmeta_foreign_ctime DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    PRIMARY KEY (xmeta_foreign_db_name, xmeta_foreign_table_name, xmeta_foreign_column_name, xmeta_foreign_db_name2, xmeta_foreign_table_name2, xmeta_foreign_column_name2, xmeta_foreign_name, xmeta_foreign_sort),
    KEY (xmeta_foreign_db_name, xmeta_foreign_table_name, xmeta_foreign_column_name),
    KEY (xmeta_foreign_db_name2, xmeta_foreign_table_name2, xmeta_foreign_column_name2),
    CONSTRAINT `xmeta_foreign_ibfk_1 {"type":"M:N"}` FOREIGN KEY (xmeta_foreign_db_name, xmeta_foreign_table_name, xmeta_foreign_column_name) REFERENCES xmeta_column(xmeta_column_db_name, xmeta_column_table_name, xmeta_column_name) ON DELETE CASCADE ON UPDATE CASCADE,
    CONSTRAINT `xmeta_foreign_ibfk_2 {"type":"M:N"}` FOREIGN KEY (xmeta_foreign_db_name2, xmeta_foreign_table_name2, xmeta_foreign_column_name2) REFERENCES xmeta_column(xmeta_column_db_name, xmeta_column_table_name, xmeta_column_name) ON DELETE CASCADE ON UPDATE CASCADE
) COMMENT '元数据-表之间的外键关系 {"caption":"元数据-外键","prefix":"~_","classname":""}';

-- 业务逻辑规则
CREATE TABLE xmeta_business (
    xmeta_business_id INT AUTO_INCREMENT COMMENT '业务规则的唯一标识',
    xmeta_business_db_name VARCHAR(255) CHARACTER SET ascii COLLATE ascii_bin NOT NULL COMMENT '数据库的名称(外键引用 xmeta_table)',
    xmeta_business_table_name VARCHAR(255) CHARACTER SET ascii COLLATE ascii_bin NOT NULL COMMENT '表的名称(外键引用 xmeta_table)',
    xmeta_business_name VARCHAR(255) NOT NULL COMMENT '业务规则名称',
    xmeta_business_caption VARCHAR(255) NOT NULL COMMENT '业务规则标题名称',
    xmeta_business_description TEXT COMMENT '描述业务规则的具体内容和目的',
    xmeta_business_condition JSON COMMENT '定义触发业务规则的条件',
    xmeta_business_action JSON COMMENT '定义当业务规则被触发时应执行的操作',
    xmeta_business_status ENUM('enabled','disabled','deleted') CHARACTER SET ascii COLLATE ascii_bin NOT NULL DEFAULT 'enabled' COMMENT '状态 {"enum":{"enabled":"允许","disabled":"禁止","deleted":"删除"}}',
    xmeta_business_mtime DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    xmeta_business_ctime DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    PRIMARY KEY (xmeta_business_id),
    UNIQUE KEY (xmeta_business_name),
    UNIQUE KEY (xmeta_business_caption),
    KEY (xmeta_business_db_name, xmeta_business_table_name),
    KEY (xmeta_business_status),
    CONSTRAINT `xmeta_business_ibfk_1 {"type":"N:1"}` FOREIGN KEY (xmeta_business_db_name, xmeta_business_table_name) REFERENCES xmeta_table(xmeta_table_db_name, xmeta_table_name) ON DELETE CASCADE ON UPDATE CASCADE
) COMMENT '元数据-业务逻辑规则信息 {"caption":"元数据-业务逻辑","prefix":"~_","classname":""}';

-- 系统部门
CREATE TABLE xmeta_depa (
    xmeta_depa_id INT AUTO_INCREMENT COMMENT '部门ID {"caption":"ID"}',
    xmeta_depa_parent_id INT COMMENT '部门父ID,为 NULL 表示顶级部门(外键引用 xmeta_depa) {"caption":"上级部门"}',
    xmeta_depa_fullPath varchar(255) CHARACTER SET ascii COLLATE ascii_bin DEFAULT NULL COMMENT '路径',
    xmeta_depa_level tinyint NOT NULL COMMENT '层级',
    xmeta_depa_is_end tinyint(1) NOT NULL DEFAULT '0' COMMENT '终节点',
    xmeta_depa_sort int NOT NULL DEFAULT '999999999' COMMENT '序号',
    xmeta_depa_caption VARCHAR(255) NOT NULL COMMENT '部门标题名称 {"caption":"部门名称"}',
    xmeta_depa_status ENUM('enabled','disabled','deleted') CHARACTER SET ascii COLLATE ascii_bin NOT NULL DEFAULT 'enabled' COMMENT '状态 {"enum":{"enabled":"允许","disabled":"禁止","deleted":"删除"}}',
    xmeta_depa_mtime DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    xmeta_depa_ctime DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    PRIMARY KEY (xmeta_depa_id),
    UNIQUE KEY (xmeta_depa_caption),
    KEY (xmeta_depa_parent_id),
    KEY `xmeta_depa_idx_fullPath` (`xmeta_depa_fullPath`),
    KEY `xmeta_depa_idx_level` (`xmeta_depa_level`),
    KEY `xmeta_depa_idx_is_end` (`xmeta_depa_is_end`),
    KEY `xmeta_depa_idx_sort` (`xmeta_depa_sort`),
    KEY (xmeta_depa_status),
    CONSTRAINT `xmeta_depa_ibfk_1 {"type":"N:1","filter":1}` FOREIGN KEY (xmeta_depa_parent_id) REFERENCES xmeta_depa(xmeta_depa_id) ON DELETE CASCADE ON UPDATE CASCADE
) COMMENT '元数据-系统部门 {"caption":"元数据-部门","prefix":"~_","type":"tree","typeInfo":{"parentId":"~parent_id", "level": "~level", "isEnd": "~is_end", "fullPath": "~fullPath", "sort": "~sort"}}';

-- 系统用户
CREATE TABLE xmeta_user (
    xmeta_user_id INT NOT NULL AUTO_INCREMENT COMMENT '用户ID',
    xmeta_user_is_sys TINYINT(1) NOT NULL DEFAULT 0 COMMENT '是否是系统锁定用户 {"caption":"系统"}',
    xmeta_user_status ENUM('enabled','disabled','deleted') CHARACTER SET ascii COLLATE ascii_bin NOT NULL DEFAULT 'disabled' COMMENT '状态 {"enum":{"enabled":"允许","disabled":"禁止","deleted":"删除"}}',
    xmeta_user_site VARCHAR(50) NOT NULL DEFAULT 'all' COMMENT '站点',
    xmeta_user_username VARCHAR(50) CHARACTER SET ascii COLLATE ascii_bin NOT NULL COMMENT '用户名',
    xmeta_user_password CHAR(60) NOT NULL COMMENT '密码',
    xmeta_user_jobno VARCHAR(50) NOT NULL COMMENT '工号',
    xmeta_user_name VARCHAR(50) NOT NULL COMMENT '真实姓名',
    xmeta_user_sex ENUM('Male','Female') CHARACTER SET ascii COLLATE ascii_bin NOT NULL DEFAULT 'Male' COMMENT '性别 {"enum":{"Male":"男性","Female":"女性"}}',
    xmeta_user_email VARCHAR(255) NOT NULL COMMENT '邮箱',
    xmeta_user_mobile VARCHAR(50) NOT NULL COMMENT '手机号码',
    xmeta_user_login_time DATETIME DEFAULT NULL COMMENT '最后登录时间',
    xmeta_user_pass_time DATETIME NOT NULL COMMENT '密码更新时间',
    xmeta_user_create_by INT NOT NULL COMMENT '创建者',
    xmeta_user_updated_by INT NOT NULL COMMENT '更新者',
    xmeta_user_mtime DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    xmeta_user_ctime DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    PRIMARY KEY (xmeta_user_id),
    UNIQUE KEY (xmeta_user_username),
    UNIQUE KEY (xmeta_user_jobno),
    UNIQUE KEY (xmeta_user_email),
    UNIQUE KEY (xmeta_user_mobile),
    KEY (xmeta_user_is_sys),
    KEY (xmeta_user_status),
    KEY (xmeta_user_site)
) COMMENT '元数据-用户 {"caption":"元数据-用户","prefix":"~_"}';

INSERT INTO xmeta_user (xmeta_user_is_sys, xmeta_user_status, xmeta_user_username, xmeta_user_password, xmeta_user_jobno, xmeta_user_name, xmeta_user_email, xmeta_user_mobile, xmeta_user_pass_time, xmeta_user_create_by, xmeta_user_updated_by) VALUES (1, 'enabled', 'admin', '$2y$10$rjhzl/7w7V5hLnTx0kBZ0.u8qhi/cCh4vkGQdNXWA8VRzzj8YV3QW', '+', '超级管理员', 'admin@admin.com', '18600000000', CURRENT_TIMESTAMP, 1, 1);
INSERT INTO xmeta_user (xmeta_user_is_sys, xmeta_user_status, xmeta_user_username, xmeta_user_password, xmeta_user_jobno, xmeta_user_name, xmeta_user_email, xmeta_user_mobile, xmeta_user_pass_time, xmeta_user_create_by, xmeta_user_updated_by) VALUES (1, 'enabled', 'test', '$2y$10$rjhzl/7w7V5hLnTx0kBZ0.u8qhi/cCh4vkGQdNXWA8VRzzj8YV3QW', '-', '测试账号', 'test@test.com', '18600000001', CURRENT_TIMESTAMP, 1, 1);

ALTER TABLE xmeta_user ADD CONSTRAINT `xmeta_user_ibfk_1 {"type":"1:1"}` FOREIGN KEY (xmeta_user_create_by) REFERENCES xmeta_user(xmeta_user_id);
ALTER TABLE xmeta_user ADD CONSTRAINT `xmeta_user_ibfk_2 {"type":"1:1"}` FOREIGN KEY (xmeta_user_updated_by) REFERENCES xmeta_user(xmeta_user_id);

-- 元数据-系统用户配置
CREATE TABLE `xmeta_user_cfg` (
  `xmeta_user_cfg_user_id` int NOT NULL COMMENT '用户ID',
  `xmeta_user_cfg_self` json DEFAULT NULL COMMENT '个人配置',
  `xmeta_user_cfg_sys` json DEFAULT NULL COMMENT '系统配置',
  `xmeta_user_cfg_mtime` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '更新时间',
  `xmeta_user_cfg_ctime` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '创建时间',
  PRIMARY KEY (`xmeta_user_cfg_user_id`),
  CONSTRAINT `xmeta_user_cfg_ibfk_1 {"type":"1:1"}` FOREIGN KEY (`xmeta_user_cfg_user_id`) REFERENCES `xmeta_user` (`xmeta_user_id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='元数据-系统用户配置 {"prefix":"~_"}''';

-- 系统角色
CREATE TABLE xmeta_role (
    xmeta_role_id INT AUTO_INCREMENT COMMENT '角色的唯一标识',
    xmeta_role_is_sys TINYINT(1) NOT NULL DEFAULT 0 COMMENT '是否是系统锁定角色',
    xmeta_role_caption VARCHAR(255) NOT NULL COMMENT '角色标题名称',
    xmeta_role_create_by INT NOT NULL COMMENT '创建者',
    xmeta_role_updated_by INT NOT NULL COMMENT '更新者',
    xmeta_role_status ENUM('enabled','disabled','deleted') CHARACTER SET ascii COLLATE ascii_bin NOT NULL DEFAULT 'enabled' COMMENT '状态 {"enum":{"enabled":"允许","disabled":"禁止","deleted":"删除"}}',
    xmeta_role_mtime DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    xmeta_role_ctime DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    PRIMARY KEY (xmeta_role_id),
    UNIQUE KEY (xmeta_role_caption),
    KEY (xmeta_role_status),
    CONSTRAINT `xmeta_role_ibfk_1 {"type":"N:1"}` FOREIGN KEY (xmeta_role_create_by) REFERENCES xmeta_user(xmeta_user_id),  
    CONSTRAINT `xmeta_role_ibfk_2 {"type":"N:1"}` FOREIGN KEY (xmeta_role_updated_by) REFERENCES xmeta_user(xmeta_user_id)   
) COMMENT '元数据-角色 {"caption":"元数据-角色","prefix":"~_"}';

INSERT INTO xmeta_role (xmeta_role_is_sys, xmeta_role_caption, xmeta_role_create_by, xmeta_role_updated_by) VALUES (1, '管理员', 1, 1);


-- 系统用户与部门关联
CREATE TABLE xmeta__lnk_user_depa (
    xmeta__lnk_user_depa_id INT NOT NULL AUTO_INCREMENT COMMENT '关联ID',
    xmeta__lnk_user_depa_user_id INT NOT NULL COMMENT '用户ID(外键引用 xmeta_user)',
    xmeta__lnk_user_depa_depa_id INT NOT NULL COMMENT '部门ID(外键引用 xmeta_depa)',
    xmeta__lnk_user_depa_manager TINYINT(1) NOT NULL DEFAULT 0 COMMENT '是否主管',
    xmeta__lnk_user_depa_mtime DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    xmeta__lnk_user_depa_ctime DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    PRIMARY KEY (xmeta__lnk_user_depa_id),
    UNIQUE KEY (xmeta__lnk_user_depa_user_id, xmeta__lnk_user_depa_depa_id),
    KEY (xmeta__lnk_user_depa_user_id),
    KEY (xmeta__lnk_user_depa_depa_id),
    CONSTRAINT `xmeta__lnk_user_depa_ibfk_1 {"type":"M:N"}` FOREIGN KEY (xmeta__lnk_user_depa_user_id) REFERENCES xmeta_user(xmeta_user_id) ON DELETE CASCADE ON UPDATE CASCADE,
    CONSTRAINT `xmeta__lnk_user_depa_ibfk_2 {"type":"M:N"}` FOREIGN KEY (xmeta__lnk_user_depa_depa_id) REFERENCES xmeta_depa(xmeta_depa_id) ON DELETE CASCADE ON UPDATE CASCADE
) COMMENT '元数据-用户与部门关联 {"caption":"元数据-用户与部门关联","prefix":"~_"}';

-- 系统用户与角色关联
CREATE TABLE xmeta__lnk_user_role (
    xmeta__lnk_user_role_id INT NOT NULL AUTO_INCREMENT COMMENT '关联ID',
    xmeta__lnk_user_role_user_id INT NOT NULL COMMENT '用户ID(外键引用 xmeta_user)',
    xmeta__lnk_user_role_role_id INT NOT NULL COMMENT '角色ID(外键引用 xmeta_role)',
    xmeta__lnk_user_role_mtime DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    xmeta__lnk_user_role_ctime DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    PRIMARY KEY (xmeta__lnk_user_role_id),
    UNIQUE KEY (xmeta__lnk_user_role_user_id, xmeta__lnk_user_role_role_id),
    KEY (xmeta__lnk_user_role_user_id),
    KEY (xmeta__lnk_user_role_role_id),
    CONSTRAINT `xmeta__lnk_user_role_ibfk_1 {"type":"M:N"}` FOREIGN KEY (xmeta__lnk_user_role_user_id) REFERENCES xmeta_user(xmeta_user_id) ON DELETE CASCADE ON UPDATE CASCADE,
    CONSTRAINT `xmeta__lnk_user_role_ibfk_2 {"type":"M:N"}` FOREIGN KEY (xmeta__lnk_user_role_role_id) REFERENCES xmeta_role(xmeta_role_id) ON DELETE CASCADE ON UPDATE CASCADE
) COMMENT '元数据-用户与角色关联 {"caption":"元数据-用户与角色关联","prefix":"~_"}';

-- 权限配置
CREATE TABLE xmeta_power (
    xmeta_power_id INT AUTO_INCREMENT COMMENT '权限的唯一标识',
    xmeta_power_parent_id INT COMMENT'权限的父ID, 为空表示顶级权限(外键引用 xmeta_power)',
    xmeta_power_fullPath varchar(255) CHARACTER SET ascii COLLATE ascii_bin DEFAULT NULL COMMENT '路径',
    xmeta_power_level tinyint NOT NULL COMMENT '层级',
    xmeta_power_is_end tinyint(1) NOT NULL DEFAULT '0' COMMENT '终节点',
    xmeta_power_sort int NOT NULL DEFAULT '999999999' COMMENT '序号',
    xmeta_power_caption VARCHAR(255) NOT NULL COMMENT '权限的标题名称',
    xmeta_power_dimension ENUM('self', 'table','column') CHARACTER SET ascii COLLATE ascii_bin NOT NULL COMMENT '权限维度:自己, 表, 字段, 为 self 时使用自己的type',
    xmeta_power_type SET('READ','ADD','UPDATE','DELETE','LOCK','UNLOCK','STOP','EXEC','IMPORT','IMPORT_ADD','IMPORT_UPDATE','IMPORT_DELETE','EXPORT','CHECK1','CHECK2','CHECK3','CHECK4','CHECK5','A','B','C','D','E','F','G') CHARACTER SET ascii COLLATE ascii_bin NOT NULL DEFAULT 'READ' COMMENT '权限类型',
    xmeta_power_item_custom JSON COMMENT '自定义权限类型的显示文本及处理函数',
    xmeta_power_extend JSON COMMENT '权限扩展',
    xmeta_power_status ENUM('enabled','disabled','deleted') CHARACTER SET ascii COLLATE ascii_bin NOT NULL DEFAULT 'enabled' COMMENT '状态 {"enum":{"enabled":"允许","disabled":"禁止","deleted":"删除"}}',
    xmeta_power_mtime DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    xmeta_power_ctime DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    PRIMARY KEY (xmeta_power_id),
    UNIQUE KEY (xmeta_power_caption),
    KEY (xmeta_power_parent_id),
    KEY `xmeta_power_idx_fullPath` (`xmeta_power_fullPath`),
    KEY `xmeta_power_idx_level` (`xmeta_power_level`),
    KEY `xmeta_power_idx_is_end` (`xmeta_power_is_end`),
    KEY `xmeta_power_idx_sort` (`xmeta_power_sort`),
    KEY (xmeta_power_status),
    CONSTRAINT `xmeta_power_ibfk_1 {"type":"N:1","filter":1}` FOREIGN KEY (xmeta_power_parent_id) REFERENCES xmeta_power(xmeta_power_id) ON DELETE CASCADE ON UPDATE CASCADE
) COMMENT '元数据-权限配置信息 {"caption":"元数据-权限配置","prefix":"~_","type":"tree","typeInfo":{"parentId":"~parent_id", "level": "~level", "isEnd": "~is_end", "fullPath": "~fullPath", "sort": "~sort"}}';

-- 权限配置子项
CREATE TABLE xmeta_power_item (
    xmeta_power_item_id INT AUTO_INCREMENT COMMENT '权限配置的唯一标识',
    xmeta_power_item_power_id INT NOT NULL COMMENT '权限的唯一标识(外键引用 xmeta_power)',
    xmeta_power_item_db_name VARCHAR(255) CHARACTER SET ascii COLLATE ascii_bin NOT NULL COMMENT '数据库的名称(外键引用 xmeta_column)',
    xmeta_power_item_table_name VARCHAR(255) CHARACTER SET ascii COLLATE ascii_bin NOT NULL COMMENT '表的名称(外键引用 xmeta_column)',
    xmeta_power_item_column_name VARCHAR(255) CHARACTER SET ascii COLLATE ascii_bin COMMENT '字段的名称,为空表示整表权限(外键引用 xmeta_column)',
    xmeta_power_item_type SET('READ','ADD','UPDATE','DELETE','LOCK','UNLOCK','STOP','EXEC','IMPORT','IMPORT_ADD','IMPORT_UPDATE','IMPORT_DELETE','EXPORT','CHECK1','CHECK2','CHECK3','CHECK4','CHECK5','A','B','C','D','E','F','G') CHARACTER SET ascii COLLATE ascii_bin NOT NULL DEFAULT 'READ' COMMENT '权限类型',
    xmeta_power_item_custom JSON COMMENT '自定义权限类型的显示文本及处理函数',
    xmeta_power_item_mtime DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    xmeta_power_item_ctime DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    PRIMARY KEY (xmeta_power_item_id),
    UNIQUE KEY (xmeta_power_item_power_id,xmeta_power_item_db_name,xmeta_power_item_table_name,xmeta_power_item_column_name,xmeta_power_item_type),
    KEY (xmeta_power_item_db_name,xmeta_power_item_table_name,xmeta_power_item_column_name),
    CONSTRAINT `xmeta_power_item_ibfk_1 {"type":"N:1"}` FOREIGN KEY (xmeta_power_item_power_id) REFERENCES xmeta_power(xmeta_power_id) ON DELETE CASCADE ON UPDATE CASCADE,
    CONSTRAINT `xmeta_power_item_ibfk_2 {"type":"N:1"}` FOREIGN KEY (xmeta_power_item_db_name, xmeta_power_item_table_name, xmeta_power_item_column_name) REFERENCES xmeta_column(xmeta_column_db_name, xmeta_column_table_name, xmeta_column_name) ON DELETE CASCADE ON UPDATE CASCADE
) COMMENT '元数据-权限配置子项信息 {"caption":"元数据-权限子项配置","prefix":"~_"}';

-- 角色与权限关联
CREATE TABLE xmeta__lnk_role_power (
    xmeta__lnk_role_power_role_id INT COMMENT '角色的唯一标识(外键引用 xmeta_role)',
    xmeta__lnk_role_power_power_id INT NOT NULL COMMENT '权限配置的唯一标识(外键引用 xmeta_power)',
    xmeta__lnk_role_power_value JSON COMMENT '拥有的权限',
    xmeta__lnk_role_power_mtime DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    xmeta__lnk_role_power_ctime DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    PRIMARY KEY (xmeta__lnk_role_power_role_id, xmeta__lnk_role_power_power_id),
    UNIQUE KEY (xmeta__lnk_role_power_role_id, xmeta__lnk_role_power_power_id),
    KEY (xmeta__lnk_role_power_role_id),
    KEY (xmeta__lnk_role_power_power_id),
    CONSTRAINT `xmeta__lnk_role_power_ibfk_1 {"type":"M:N"}` FOREIGN KEY (xmeta__lnk_role_power_role_id) REFERENCES xmeta_role(xmeta_role_id) ON DELETE CASCADE ON UPDATE CASCADE,
    CONSTRAINT `xmeta__lnk_role_power_ibfk_2 {"type":"M:N"}` FOREIGN KEY (xmeta__lnk_role_power_power_id) REFERENCES xmeta_power(xmeta_power_id) ON DELETE CASCADE ON UPDATE CASCADE
) COMMENT '元数据-角色与权限关联 {"caption":"元数据-角色与权限关联","prefix":"~_"}';

-- 表单配置
CREATE TABLE xmeta_form (
    xmeta_form_id INT AUTO_INCREMENT COMMENT '表单的的唯一标识',
    xmeta_form_caption VARCHAR(255) NOT NULL DEFAULT '' COMMENT '表单的标题名称',
    xmeta_form_description JSON COMMENT '表单的描述信息',
    xmeta_form_status ENUM('enabled','disabled','deleted') CHARACTER SET ascii COLLATE ascii_bin NOT NULL DEFAULT 'enabled' COMMENT '状态 {"enum":{"enabled":"允许","disabled":"禁止","deleted":"删除"}}',
    xmeta_form_mtime DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    xmeta_form_ctime DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    PRIMARY KEY (xmeta_form_id),
    KEY (xmeta_form_status),
    UNIQUE KEY (xmeta_form_caption)
) COMMENT '元数据-表单的基本信息 {"caption":"元数据-表单","prefix":"~_"}';

-- 表单字段配置
CREATE TABLE xmeta_form_field (
    xmeta_form_field_id INT AUTO_INCREMENT COMMENT '表单字段的唯一标识',
    xmeta_form_field_form_id INT NOT NULL COMMENT '表单的唯一标识(外键引用 xmeta_form)',
    xmeta_form_field_db_name VARCHAR(255) CHARACTER SET ascii COLLATE ascii_bin NOT NULL COMMENT '数据库的名称(外键引用 xmeta_column)',
    xmeta_form_field_table_name VARCHAR(255) CHARACTER SET ascii COLLATE ascii_bin NOT NULL COMMENT '表的名称(外键引用 xmeta_column)',
    xmeta_form_field_column_name VARCHAR(255) CHARACTER SET ascii COLLATE ascii_bin NOT NULL COMMENT '字段的名称(外键引用 xmeta_column)',
    xmeta_form_field_caption VARCHAR(255) NOT NULL DEFAULT '' COMMENT '字段在表单中的显示名称, 为空则取字段本身的显示名称',
    xmeta_form_field_type VARCHAR(255) NOT NULL DEFAULT 'text' COMMENT '字段在表单中的类型(如文本框、下拉框)',
    xmeta_form_field_format JSON COMMENT '显示格式',
    xmeta_form_field_valid_rules JSON COMMENT '字段的验证规则(如正则表达式)',
    xmeta_form_field_default_value VARCHAR(255) COMMENT '默认值',
    xmeta_form_field_hint VARCHAR(255) NOT NULL DEFAULT '' COMMENT '提示信息',
    xmeta_form_field_mtime DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    xmeta_form_field_ctime DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    PRIMARY KEY (xmeta_form_field_id),
    UNIQUE KEY (xmeta_form_field_form_id, xmeta_form_field_db_name, xmeta_form_field_table_name, xmeta_form_field_column_name),
    KEY (xmeta_form_field_form_id),
    KEY (xmeta_form_field_db_name, xmeta_form_field_table_name, xmeta_form_field_column_name),
    CONSTRAINT `xmeta_form_field_ibfk_1 {"type":"N:1"}` FOREIGN KEY (xmeta_form_field_form_id) REFERENCES xmeta_form(xmeta_form_id) ON DELETE CASCADE ON UPDATE CASCADE,
    CONSTRAINT `xmeta_form_field_ibfk_2 {"type":"N:1"}` FOREIGN KEY (xmeta_form_field_db_name, xmeta_form_field_table_name, xmeta_form_field_column_name) REFERENCES xmeta_column(xmeta_column_db_name, xmeta_column_table_name, xmeta_column_name) ON DELETE CASCADE ON UPDATE CASCADE
) COMMENT '元数据-表单字段配置 {"caption":"元数据-表单字段","prefix":"~_"}';

-- 表单布局配置
CREATE TABLE xmeta_form_layout (
    xmeta_form_layout_id INT AUTO_INCREMENT COMMENT '表单布局的唯一标识',
    xmeta_form_layout_form_id INT NOT NULL COMMENT '表单的唯一标识(外键引用 xmeta_form)',
    xmeta_form_layout_section_name VARCHAR(255) NOT NULL COMMENT '布局的名称',
    xmeta_form_layout_section_sort INT COMMENT '布局部分的顺序',
    xmeta_form_layout_section_type ENUM('section', 'row', 'column') CHARACTER SET ascii COLLATE ascii_bin NOT NULL COMMENT '布局部分的类型',
    xmeta_form_layout_parent_id INT COMMENT '父级布局部分的ID, NULL为顶级部分(外键引用 xmeta_form_layout)',
    xmeta_form_layout_fullPath varchar(255) CHARACTER SET ascii COLLATE ascii_bin DEFAULT NULL COMMENT '路径',
    xmeta_form_layout_level tinyint NOT NULL COMMENT '层级',
    xmeta_form_layout_is_end tinyint(1) NOT NULL DEFAULT '0' COMMENT '终节点',
    xmeta_form_layout_sort int NOT NULL DEFAULT '999999999' COMMENT '序号',
    xmeta_form_layout_status ENUM('enabled','disabled','deleted') CHARACTER SET ascii COLLATE ascii_bin NOT NULL DEFAULT 'enabled' COMMENT '状态 {"enum":{"enabled":"允许","disabled":"禁止","deleted":"删除"}}',
    xmeta_form_layout_mtime DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    xmeta_form_layout_ctime DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    PRIMARY KEY (xmeta_form_layout_id),
    UNIQUE KEY (xmeta_form_layout_form_id, xmeta_form_layout_section_name, xmeta_form_layout_section_sort),
    KEY (xmeta_form_layout_form_id),
    KEY (xmeta_form_layout_parent_id),
    KEY `xmeta_form_layout_idx_fullPath` (`xmeta_form_layout_fullPath`),
    KEY `xmeta_form_layout_idx_level` (`xmeta_form_layout_level`),
    KEY `xmeta_form_layout_idx_is_end` (`xmeta_form_layout_is_end`),
    KEY `xmeta_form_layout_idx_sort` (`xmeta_form_layout_sort`),
    KEY (xmeta_form_layout_status),
    CONSTRAINT `xmeta_form_layout_ibfk_1 {"type":"N:1"}` FOREIGN KEY (xmeta_form_layout_form_id) REFERENCES xmeta_form(xmeta_form_id) ON DELETE CASCADE ON UPDATE CASCADE,
    CONSTRAINT `xmeta_form_layout_ibfk_2 {"type":"N:1","filter":1}` FOREIGN KEY (xmeta_form_layout_parent_id) REFERENCES xmeta_form_layout(xmeta_form_layout_id) ON DELETE CASCADE ON UPDATE CASCADE
) COMMENT '元数据-表单布局配置 {"caption":"元数据-表单布局","prefix":"~_","type":"tree","typeInfo":{"parentId":"~parent_id", "level": "~level", "isEnd": "~is_end", "fullPath": "~fullPath", "sort": "~sort"}}';

-- 表单布局字段关联
CREATE TABLE xmeta__lnk_form_layout_field (
    xmeta__lnk_form_layout_field_id INT AUTO_INCREMENT COMMENT '布局字段的唯一标识',
    xmeta__lnk_form_layout_field_layout_id INT NOT NULL COMMENT '布局部分的唯一标识(外键引用 xmeta_form_layout)',
    xmeta__lnk_form_layout_field_form_field_id INT NOT NULL COMMENT '表单字段的唯一标识(外键引用 xmeta_form_field)',
    xmeta__lnk_form_layout_field_sort INT COMMENT '字段在布局部分中的顺序',
    xmeta__lnk_form_layout_field_status ENUM('enabled','disabled','deleted') CHARACTER SET ascii COLLATE ascii_bin NOT NULL DEFAULT 'enabled' COMMENT '状态 {"enum":{"enabled":"允许","disabled":"禁止","deleted":"删除"}}',
    xmeta__lnk_form_layout_field_mtime DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    xmeta__lnk_form_layout_field_ctime DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    PRIMARY KEY (xmeta__lnk_form_layout_field_id),
    UNIQUE KEY (xmeta__lnk_form_layout_field_layout_id, xmeta__lnk_form_layout_field_form_field_id, xmeta__lnk_form_layout_field_sort),
    KEY (xmeta__lnk_form_layout_field_layout_id),
    KEY (xmeta__lnk_form_layout_field_form_field_id),
    KEY (xmeta__lnk_form_layout_field_status),
    CONSTRAINT `xmeta__lnk_form_layout_field_ibfk_1 {"type":"M:N"}` FOREIGN KEY (xmeta__lnk_form_layout_field_layout_id) REFERENCES xmeta_form_layout(xmeta_form_layout_id) ON DELETE CASCADE ON UPDATE CASCADE,
    CONSTRAINT `xmeta__lnk_form_layout_field_ibfk_2 {"type":"M:N"}` FOREIGN KEY (xmeta__lnk_form_layout_field_form_field_id) REFERENCES xmeta_form_field(xmeta_form_field_id) ON DELETE CASCADE ON UPDATE CASCADE
) COMMENT '元数据-表单布局字段关联 {"caption":"元数据-表单布局字段","prefix":"~_"}';

-- 审计映射
CREATE TABLE xmeta_audit_map (
    xmeta_audit_map_db_name VARCHAR(255) CHARACTER SET ascii COLLATE ascii_bin NOT NULL COMMENT '数据库的名称(外键引用 xmeta_table)',
    xmeta_audit_map_table_name VARCHAR(255) CHARACTER SET ascii COLLATE ascii_bin NOT NULL COMMENT '表的名称(外键引用 xmeta_table)',
    xmeta_audit_map_store VARCHAR(255) NOT NULL DEFAULT '~' COMMENT '审计存放的位置, 格式1: 数据库键\\表, ~表示xmeta\\xmeta_audit, 格式2: 类名::',       
    xmeta_audit_map_rule JSON COMMENT '映射规则与缓存配置等',       
    xmeta_audit_map_status ENUM('enabled','disabled','deleted') CHARACTER SET ascii COLLATE ascii_bin NOT NULL DEFAULT 'enabled' COMMENT '状态 {"enum":{"enabled":"允许","disabled":"禁止","deleted":"删除"}}',
    xmeta_audit_map_mtime DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    xmeta_audit_map_ctime DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    PRIMARY KEY (xmeta_audit_map_db_name, xmeta_audit_map_table_name),
    KEY (xmeta_audit_map_status),
    CONSTRAINT `xmeta_audit_map_ibfk_1 {"type":"1:1"}` FOREIGN KEY (xmeta_audit_map_db_name, xmeta_audit_map_table_name) REFERENCES xmeta_table(xmeta_table_db_name, xmeta_table_name) ON DELETE CASCADE ON UPDATE CASCADE
) COMMENT='元数据-审计映射 {"caption":"元数据-审计映射","prefix":"~_","classname":""}';

-- 审计
CREATE TABLE xmeta_audit (
    xmeta_audit_id INT AUTO_INCREMENT COMMENT '审计记录的唯一标识',
    xmeta_audit_db_name VARCHAR(255) CHARACTER SET ascii COLLATE ascii_bin NOT NULL COMMENT '数据库的名称(外键引用 xmeta_table)',
    xmeta_audit_table_name VARCHAR(255) CHARACTER SET ascii COLLATE ascii_bin NOT NULL COMMENT '表的名称(外键引用 xmeta_table)',
    xmeta_audit_record_id VARCHAR(255) NOT NULL COMMENT '被审计记录的主键值',
    xmeta_audit_action ENUM('INSERT', 'UPDATE', 'DELETE') CHARACTER SET ascii COLLATE ascii_bin NOT NULL COMMENT '操作类型',
    xmeta_audit_old_value JSON COMMENT '操作前的值',
    xmeta_audit_new_value JSON COMMENT '操作后的值',
    xmeta_audit_create_by INT NOT NULL COMMENT '操作者',
    xmeta_audit_mtime DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间 也是 操作时间',
    xmeta_audit_ctime DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    PRIMARY KEY (xmeta_audit_id),
    KEY (xmeta_audit_mtime),
    KEY (xmeta_audit_create_by),
    KEY (xmeta_audit_db_name, xmeta_audit_table_name),
    KEY (xmeta_audit_db_name, xmeta_audit_table_name, xmeta_audit_record_id),
    CONSTRAINT `xmeta_audit_ibfk_1 {"type":"N:1"}` FOREIGN KEY (xmeta_audit_db_name, xmeta_audit_table_name) REFERENCES xmeta_table(xmeta_table_db_name, xmeta_table_name) ON DELETE CASCADE ON UPDATE CASCADE,
    CONSTRAINT `xmeta_audit_ibfk_2 {"type":"N:1"}` FOREIGN KEY (xmeta_audit_create_by) REFERENCES xmeta_user(xmeta_user_id)
) COMMENT '元数据-审计 {"caption":"元数据-审计","prefix":"~_"}';

-- JSON 扩展数据映射
CREATE TABLE `xmeta_json_map` (
  `xmeta_json_map_db_name` varchar(255) CHARACTER SET ascii COLLATE ascii_bin NOT NULL COMMENT '数据库的名称(外键引用 xmeta_column)',
  `xmeta_json_map_table_name` varchar(255) CHARACTER SET ascii COLLATE ascii_bin NOT NULL COMMENT '表的名称(外键引用 xmeta_column)',
  `xmeta_json_map_column_name` varchar(255) CHARACTER SET ascii COLLATE ascii_bin NOT NULL COMMENT '字段的名称(外键引用 xmeta_column)',
  `xmeta_json_map_rule` json DEFAULT NULL COMMENT '映射规则',
  `xmeta_json_map_status` enum('enabled','disabled','deleted') CHARACTER SET ascii COLLATE ascii_bin NOT NULL DEFAULT 'enabled' COMMENT '状态 {"enum":{"enabled":"允许","disabled":"禁止","deleted":"删除"}}',
  `xmeta_json_map_mtime` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `xmeta_json_map_ctime` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  PRIMARY KEY (`xmeta_json_map_db_name`,`xmeta_json_map_table_name`,`xmeta_json_map_column_name`),
  KEY `xmeta_lang_map_status` (`xmeta_json_map_status`),
  CONSTRAINT `xmeta_json_map_ibfk_1 {"type":"1:1"}` FOREIGN KEY (`xmeta_json_map_db_name`, `xmeta_json_map_table_name`, `xmeta_json_map_column_name`) REFERENCES `xmeta_column` (`xmeta_column_db_name`, `xmeta_column_table_name`, `xmeta_column_name`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='元数据-JSON 扩展数据映射 {"prefix":"~_","classname":""}';

-- 语言名称
CREATE TABLE xmeta_lang (
    xmeta_lang_code VARCHAR(10) COMMENT '语言代码',
    xmeta_lang_caption VARCHAR(255) NOT NULL COMMENT '语言名称',
    xmeta_lang_status ENUM('enabled','disabled','deleted') CHARACTER SET ascii COLLATE ascii_bin NOT NULL DEFAULT 'enabled' COMMENT '状态 {"enum":{"enabled":"允许","disabled":"禁止","deleted":"删除"}}',
    xmeta_lang_mtime DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    xmeta_lang_ctime DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    PRIMARY KEY (xmeta_lang_code),
    UNIQUE KEY (xmeta_lang_caption),
    KEY (xmeta_lang_status)
) COMMENT '元数据-语言名称信息 {"caption":"元数据-语言","prefix":"~_","classname":""}';
INSERT INTO xmeta_lang (xmeta_lang_code, xmeta_lang_caption, xmeta_lang_status) VALUES ('cn', '简体中文', 'enabled');
INSERT INTO xmeta_lang (xmeta_lang_code, xmeta_lang_caption, xmeta_lang_status) VALUES ('tw', '繁体中文', 'disabled');
INSERT INTO xmeta_lang (xmeta_lang_code, xmeta_lang_caption, xmeta_lang_status) VALUES ('en', '英语', 'enabled');
INSERT INTO xmeta_lang (xmeta_lang_code, xmeta_lang_caption, xmeta_lang_status) VALUES ('fr', '法语', 'disabled');
INSERT INTO xmeta_lang (xmeta_lang_code, xmeta_lang_caption, xmeta_lang_status) VALUES ('de', '德语', 'disabled');
INSERT INTO xmeta_lang (xmeta_lang_code, xmeta_lang_caption, xmeta_lang_status) VALUES ('ru', '俄语', 'disabled');
INSERT INTO xmeta_lang (xmeta_lang_code, xmeta_lang_caption, xmeta_lang_status) VALUES ('es', '西班牙语', 'disabled');
INSERT INTO xmeta_lang (xmeta_lang_code, xmeta_lang_caption, xmeta_lang_status) VALUES ('pt', '葡萄牙语', 'disabled');
INSERT INTO xmeta_lang (xmeta_lang_code, xmeta_lang_caption, xmeta_lang_status) VALUES ('ar', '阿拉伯语', 'disabled');
INSERT INTO xmeta_lang (xmeta_lang_code, xmeta_lang_caption, xmeta_lang_status) VALUES ('ko', '韩语', 'disabled');
INSERT INTO xmeta_lang (xmeta_lang_code, xmeta_lang_caption, xmeta_lang_status) VALUES ('ja', '日语', 'disabled');
INSERT INTO xmeta_lang (xmeta_lang_code, xmeta_lang_caption, xmeta_lang_status) VALUES ('hi', '印地语', 'disabled');
INSERT INTO xmeta_lang (xmeta_lang_code, xmeta_lang_caption, xmeta_lang_status) VALUES ('bn', '孟加拉语', 'disabled');

-- 语言翻译映射
CREATE TABLE `xmeta_lang_map` (
  `xmeta_lang_map_db_name` varchar(255) CHARACTER SET ascii COLLATE ascii_bin NOT NULL COMMENT '数据库的名称(外键引用 xmeta_column)',
  `xmeta_lang_map_table_name` varchar(255) CHARACTER SET ascii COLLATE ascii_bin NOT NULL COMMENT '表的名称(外键引用 xmeta_column)',
  `xmeta_lang_map_column_name` varchar(255) CHARACTER SET ascii COLLATE ascii_bin NOT NULL COMMENT '字段的名称(外键引用 xmeta_column)',
  `xmeta_lang_map_lang` varchar(255) CHARACTER SET ascii COLLATE ascii_bin NOT NULL COMMENT '多语言codes, 逗号分隔',
  `xmeta_lang_map_store_db_name` varchar(255) CHARACTER SET ascii COLLATE ascii_bin DEFAULT NULL COMMENT '翻译存放的数据库',
  `xmeta_lang_map_store_table_name` varchar(255) CHARACTER SET ascii COLLATE ascii_bin DEFAULT NULL COMMENT '翻译存放的表',
  `xmeta_lang_map_rule` json DEFAULT NULL COMMENT '映射规则与缓存配置等',
  `xmeta_lang_map_status` enum('enabled','disabled','deleted') CHARACTER SET ascii COLLATE ascii_bin NOT NULL DEFAULT 'enabled' COMMENT '状态 {"enum":{"enabled":"允许","disabled":"禁止","deleted":"删除"}}',
  `xmeta_lang_map_mtime` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `xmeta_lang_map_ctime` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  PRIMARY KEY (`xmeta_lang_map_db_name`,`xmeta_lang_map_table_name`,`xmeta_lang_map_column_name`),
  KEY `xmeta_lang_map_status` (`xmeta_lang_map_status`),
  KEY `xmeta_lang_map_store_db_name` (`xmeta_lang_map_store_db_name`,`xmeta_lang_map_store_table_name`),
  CONSTRAINT `xmeta_lang_map_ibfk_1 {"type":"1:1"}` FOREIGN KEY (`xmeta_lang_map_db_name`, `xmeta_lang_map_table_name`, `xmeta_lang_map_column_name`) REFERENCES `xmeta_column` (`xmeta_column_db_name`, `xmeta_column_table_name`, `xmeta_column_name`) ON DELETE CASCADE ON UPDATE CASCADE,
  CONSTRAINT `xmeta_lang_map_ibfk_2 {"type":"1:1"}` FOREIGN KEY (`xmeta_lang_map_store_db_name`, `xmeta_lang_map_store_table_name`) REFERENCES `xmeta_table` (`xmeta_table_db_name`, `xmeta_table_name`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='元数据-语言翻译映射 {"caption":"元数据-语言翻译映射","prefix":"~_","classname":""}';

-- 实体
CREATE TABLE xmeta_entity (
    xmeta_entity_id INT AUTO_INCREMENT COMMENT '实体ID',  
    xmeta_entity_db_name VARCHAR(255) CHARACTER SET ascii COLLATE ascii_bin NOT NULL COMMENT '数据库的名称(外键引用 xmeta_table)',
    xmeta_entity_table_name VARCHAR(255) CHARACTER SET ascii COLLATE ascii_bin NOT NULL COMMENT '表的名称(外键引用 xmeta_table)',
    xmeta_entity_name VARCHAR(255) NOT NULL COMMENT '实体名称',
    xmeta_entity_caption VARCHAR(255) NOT NULL COMMENT '实体标题名称',
    xmeta_entity_type VARCHAR(100) COMMENT '实体类型(document, picture)',
    xmeta_entity_thumbnail JSON COMMENT '缩略图规则 small:[width,height],mid:[width,height],big:[width,height]}',
    xmeta_entity_watermark JSON COMMENT '水印规则 type:center|tile|rightBottom',
    xmeta_entity_convert JSON COMMENT '转换规则 jpeg:jpg, png:jpg, gif:jpg, xls:xlsx, csv:xlsx',
    xmeta_entity_qty INT NOT NULL DEFAULT 0 COMMENT '实体文件数量, 0:不限',        
    xmeta_entity_store VARCHAR(255) NOT NULL DEFAULT '~' COMMENT '实体存放的位置, 格式1: 数据库键\\表, ~表示xmeta\\xmeta_file, 格式2: 类名::',       
    xmeta_entity_rule JSON COMMENT '映射规则与缓存配置等',       
    xmeta_entity_status ENUM('enabled','disabled','deleted') CHARACTER SET ascii COLLATE ascii_bin NOT NULL DEFAULT 'enabled' COMMENT '状态 {"enum":{"enabled":"允许","disabled":"禁止","deleted":"删除"}}',
    xmeta_entity_mtime DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    xmeta_entity_ctime DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    PRIMARY KEY (xmeta_entity_id),
    UNIQUE KEY (xmeta_entity_db_name, xmeta_entity_name),
    UNIQUE KEY (xmeta_entity_db_name, xmeta_entity_caption),
    KEY (xmeta_entity_type),
    KEY (xmeta_entity_db_name, xmeta_entity_table_name),
    KEY (xmeta_entity_status),
    CONSTRAINT `xmeta_entity_ibfk_1 {"type":"N:1"}` FOREIGN KEY (xmeta_entity_db_name, xmeta_entity_table_name) REFERENCES xmeta_table(xmeta_table_db_name, xmeta_table_name) ON DELETE CASCADE ON UPDATE CASCADE
) COMMENT='元数据-实体 {"caption":"元数据-实体","prefix":"~_"}';

-- 文件存储
CREATE TABLE xmeta_file (
    xmeta_file_id INT AUTO_INCREMENT COMMENT '文件ID',  
    xmeta_file_name VARCHAR(255) NOT NULL COMMENT '文件名',         
    xmeta_file_path VARCHAR(1024) NOT NULL COMMENT '文件路径',        
    xmeta_file_size BIGINT COMMENT '文件大小(以字节为单位）',                        
    xmeta_file_type VARCHAR(100) CHARACTER SET ascii COLLATE ascii_bin COMMENT '文件类型(如 "image/jpeg", "application/pdf")',                  
    xmeta_file_entity_id INT COMMENT '关联的实体ID(外键引用 xmeta_entity)',                   
    xmeta_file_status ENUM('enabled','disabled','deleted') CHARACTER SET ascii COLLATE ascii_bin NOT NULL DEFAULT 'enabled' COMMENT '状态 {"enum":{"enabled":"允许","disabled":"禁止","deleted":"删除"}}',
    xmeta_file_mtime DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    xmeta_file_ctime DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    PRIMARY KEY (xmeta_file_id),
    KEY (xmeta_file_entity_id),
    KEY (xmeta_file_status),
    CONSTRAINT `xmeta_file_ibfk_1 {"type":"N:1"}` FOREIGN KEY (xmeta_file_entity_id) REFERENCES xmeta_entity(xmeta_entity_id)
) COMMENT='元数据-文件存储 {"caption":"元数据-实体文件","prefix":"~_"}';


-- 权限与实体关联
CREATE TABLE xmeta__lnk_power_entity (
    xmeta__lnk_power_entity_power_id INT COMMENT '权限的唯一标识(外键引用 xmeta_power)',
    xmeta__lnk_power_entity_entity_id INT NOT NULL COMMENT '实体ID(外键引用 xmeta_entity)',
    xmeta__lnk_power_entity_type SET('READ','ADD','UPDATE','DELETE','LOCK','UNLOCK','STOP','EXEC','IMPORT','IMPORT_ADD','IMPORT_UPDATE','IMPORT_DELETE','EXPORT','CHECK1','CHECK2','CHECK3','CHECK4','CHECK5','A','B','C','D','E','F','G') CHARACTER SET ascii COLLATE ascii_bin NOT NULL DEFAULT 'READ' COMMENT '权限类型',
    xmeta__lnk_power_entity_custom JSON COMMENT '自定义权限类型的显示文本及处理函数',
    xmeta__lnk_power_entity_mtime DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
    xmeta__lnk_power_entity_ctime DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
    PRIMARY KEY (xmeta__lnk_power_entity_power_id, xmeta__lnk_power_entity_entity_id),
    KEY (xmeta__lnk_power_entity_power_id),
    KEY (xmeta__lnk_power_entity_entity_id),
    KEY (xmeta__lnk_power_entity_type),
    CONSTRAINT `xmeta__lnk_power_entity_ibfk_1 {"type":"M:N"}` FOREIGN KEY (xmeta__lnk_power_entity_power_id) REFERENCES xmeta_power(xmeta_power_id) ON DELETE CASCADE ON UPDATE CASCADE,
    CONSTRAINT `xmeta__lnk_power_entity_ibfk_2 {"type":"M:N"}` FOREIGN KEY (xmeta__lnk_power_entity_entity_id) REFERENCES xmeta_entity(xmeta_entity_id) ON DELETE CASCADE ON UPDATE CASCADE
) COMMENT '元数据-角色与实体权限关联  {"caption":"元数据-权限与实体关联","prefix":"~_"}';

-- 元数据-通用属性
CREATE TABLE `xmeta_general` (
  `xmeta_general_id` int NOT NULL AUTO_INCREMENT COMMENT 'ID',
  `xmeta_general_parent_id` int DEFAULT NULL COMMENT '上级ID',
  `xmeta_general_fullPath` varchar(255) CHARACTER SET ascii COLLATE ascii_bin DEFAULT NULL COMMENT '路径',
  `xmeta_general_level` tinyint NOT NULL COMMENT '层级',
  `xmeta_general_is_end` tinyint(1) NOT NULL DEFAULT '0' COMMENT '终节点',
  `xmeta_general_sort` int NOT NULL DEFAULT '999999999' COMMENT '序号',
  `xmeta_general_is_sys` tinyint(1) NOT NULL DEFAULT '0' COMMENT '系统属性',
  `xmeta_general_caption` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL DEFAULT '' COMMENT '名称',
  `xmeta_general_code` varchar(50) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '编码',
  `xmeta_general_data` json DEFAULT NULL COMMENT '扩展数据',
  `xmeta_general_mtime` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `xmeta_general_ctime` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  PRIMARY KEY (`xmeta_general_id`),
  KEY `xmeta_general_idx_parent_id` (`xmeta_general_parent_id`),
  KEY `xmeta_general_idx_fullPath` (`xmeta_general_fullPath`),
  KEY `xmeta_general_idx_level` (`xmeta_general_level`),
  KEY `xmeta_general_idx_is_end` (`xmeta_general_is_end`),
  KEY `xmeta_general_idx_sort` (`xmeta_general_sort`),
  KEY `xmeta_general_idx_caption` (`xmeta_general_caption`)
  
) ENGINE=InnoDB AUTO_INCREMENT=12 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='元数据-通用属性 {"foreigns":["CONSTRAINT `xmeta_general_ibfk_1 {\\"type\\":\\"1:1\\",\\"filter\\":1}` FOREIGN KEY (`xmeta_general_parent_id`) REFERENCES `xmeta_general` (`xmeta_general_id`) ON DELETE CASCADE ON UPDATE CASCADE"],"prefix":"~_","type":"tree","typeInfo":{"parentId":"~parent_id", "level": "~level", "isEnd": "~is_end", "fullPath": "~fullPath", "sort": "~sort"}}';


-- 元数据-通用属性-文本翻译
CREATE TABLE `xmeta_lang_general` (
  `id` int NOT NULL AUTO_INCREMENT COMMENT '翻译条目的唯一标识',
  `code` varchar(10) CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '语言代码(外键引用 xmeta_lang)',
  `db_name` varchar(255) CHARACTER SET ascii COLLATE ascii_bin NOT NULL COMMENT '数据库的名称(外键引用 xmeta_column)',
  `table_name` varchar(255) CHARACTER SET ascii COLLATE ascii_bin NOT NULL COMMENT '表的名称(外键引用 xmeta_column)',
  `column_name` varchar(255) CHARACTER SET ascii COLLATE ascii_bin NOT NULL COMMENT '字段的名称(外键引用 xmeta_column)',
  `record_id` varchar(255) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT '翻译的主键ID',
  `text` varchar(4096) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '翻译值',
  `mtime` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  `ctime` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE=InnoDB AUTO_INCREMENT=7 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='元数据-通用属性-文本翻译 {"classname":""}';

COMMIT;
</pre>


    <h3>测试数据</h3>
    <pre contenteditable="true">
START TRANSACTION; 

-- 部门
INSERT INTO `xmeta_depa` (`xmeta_depa_id`, `xmeta_depa_parent_id`, `xmeta_depa_fullPath`, `xmeta_depa_level`, `xmeta_depa_is_end`, `xmeta_depa_sort`, `xmeta_depa_caption`, `xmeta_depa_status`, `xmeta_depa_mtime`, `xmeta_depa_ctime`) VALUES (1, NULL, NULL, 0, 0, 999999999, '业务部', 'enabled', '2024-06-26 09:02:06', '2024-06-26 09:02:06');
INSERT INTO `xmeta_depa` (`xmeta_depa_id`, `xmeta_depa_parent_id`, `xmeta_depa_fullPath`, `xmeta_depa_level`, `xmeta_depa_is_end`, `xmeta_depa_sort`, `xmeta_depa_caption`, `xmeta_depa_status`, `xmeta_depa_mtime`, `xmeta_depa_ctime`) VALUES (2, NULL, NULL, 0, 0, 999999999, '技术部', 'enabled', '2024-06-26 09:02:20', '2024-06-26 09:02:20');
INSERT INTO `xmeta_depa` (`xmeta_depa_id`, `xmeta_depa_parent_id`, `xmeta_depa_fullPath`, `xmeta_depa_level`, `xmeta_depa_is_end`, `xmeta_depa_sort`, `xmeta_depa_caption`, `xmeta_depa_status`, `xmeta_depa_mtime`, `xmeta_depa_ctime`) VALUES (3, 1, '1', 1, 1, 999999999, '业务一部', 'enabled', '2024-06-26 09:03:30', '2024-06-26 09:03:30');
INSERT INTO `xmeta_depa` (`xmeta_depa_id`, `xmeta_depa_parent_id`, `xmeta_depa_fullPath`, `xmeta_depa_level`, `xmeta_depa_is_end`, `xmeta_depa_sort`, `xmeta_depa_caption`, `xmeta_depa_status`, `xmeta_depa_mtime`, `xmeta_depa_ctime`) VALUES (4, 1, '1', 1, 1, 999999999, '业务二部', 'enabled', '2024-06-26 09:03:46', '2024-06-26 09:03:46');

-- 通用属性
INSERT INTO `xmeta_general` (`xmeta_general_id`, `xmeta_general_parent_id`, `xmeta_general_fullPath`, `xmeta_general_level`, `xmeta_general_is_end`, `xmeta_general_sort`, `xmeta_general_caption`, `xmeta_general_data`, `xmeta_general_mtime`, `xmeta_general_ctime`) VALUES (1, NULL, NULL, 0, 0, 999999999, '品牌', NULL, '2024-06-20 17:30:47', '2024-06-20 17:30:47');
INSERT INTO `xmeta_general` (`xmeta_general_id`, `xmeta_general_parent_id`, `xmeta_general_fullPath`, `xmeta_general_level`, `xmeta_general_is_end`, `xmeta_general_sort`, `xmeta_general_caption`, `xmeta_general_data`, `xmeta_general_mtime`, `xmeta_general_ctime`) VALUES (2, 1, '1,', 1, 0, 999999999, '丰田', NULL, '2024-06-20 17:35:11', '2024-06-20 17:31:34');
INSERT INTO `xmeta_general` (`xmeta_general_id`, `xmeta_general_parent_id`, `xmeta_general_fullPath`, `xmeta_general_level`, `xmeta_general_is_end`, `xmeta_general_sort`, `xmeta_general_caption`, `xmeta_general_data`, `xmeta_general_mtime`, `xmeta_general_ctime`) VALUES (3, 1, '1,', 1, 0, 999999999, '宝马', NULL, '2024-06-20 17:35:13', '2024-06-20 17:32:01');
INSERT INTO `xmeta_general` (`xmeta_general_id`, `xmeta_general_parent_id`, `xmeta_general_fullPath`, `xmeta_general_level`, `xmeta_general_is_end`, `xmeta_general_sort`, `xmeta_general_caption`, `xmeta_general_data`, `xmeta_general_mtime`, `xmeta_general_ctime`) VALUES (4, 1, '1,', 1, 0, 999999999, '奔驰', NULL, '2024-06-20 17:35:15', '2024-06-20 17:32:24');
INSERT INTO `xmeta_general` (`xmeta_general_id`, `xmeta_general_parent_id`, `xmeta_general_fullPath`, `xmeta_general_level`, `xmeta_general_is_end`, `xmeta_general_sort`, `xmeta_general_caption`, `xmeta_general_data`, `xmeta_general_mtime`, `xmeta_general_ctime`) VALUES (5, 2, '1,2,', 2, 1, 999999999, '卡罗拉', NULL, '2024-06-20 17:35:24', '2024-06-20 17:32:54');
INSERT INTO `xmeta_general` (`xmeta_general_id`, `xmeta_general_parent_id`, `xmeta_general_fullPath`, `xmeta_general_level`, `xmeta_general_is_end`, `xmeta_general_sort`, `xmeta_general_caption`, `xmeta_general_data`, `xmeta_general_mtime`, `xmeta_general_ctime`) VALUES (6, 2, '1,2,', 2, 1, 999999999, '霸道', NULL, '2024-06-20 17:35:24', '2024-06-20 17:33:20');
INSERT INTO `xmeta_general` (`xmeta_general_id`, `xmeta_general_parent_id`, `xmeta_general_fullPath`, `xmeta_general_level`, `xmeta_general_is_end`, `xmeta_general_sort`, `xmeta_general_caption`, `xmeta_general_data`, `xmeta_general_mtime`, `xmeta_general_ctime`) VALUES (7, 3, '1,3,', 3, 1, 999999999, '318i', NULL, '2024-06-20 17:35:27', '2024-06-20 17:33:40');
INSERT INTO `xmeta_general` (`xmeta_general_id`, `xmeta_general_parent_id`, `xmeta_general_fullPath`, `xmeta_general_level`, `xmeta_general_is_end`, `xmeta_general_sort`, `xmeta_general_caption`, `xmeta_general_data`, `xmeta_general_mtime`, `xmeta_general_ctime`) VALUES (8, 3, '1,3,', 3, 1, 999999999, 'X3', NULL, '2024-06-20 17:35:28', '2024-06-20 17:34:00');
INSERT INTO `xmeta_general` (`xmeta_general_id`, `xmeta_general_parent_id`, `xmeta_general_fullPath`, `xmeta_general_level`, `xmeta_general_is_end`, `xmeta_general_sort`, `xmeta_general_caption`, `xmeta_general_data`, `xmeta_general_mtime`, `xmeta_general_ctime`) VALUES (9, 3, '1,3,', 3, 1, 999999999, 'X5', NULL, '2024-06-20 17:35:29', '2024-06-20 17:34:08');
INSERT INTO `xmeta_general` (`xmeta_general_id`, `xmeta_general_parent_id`, `xmeta_general_fullPath`, `xmeta_general_level`, `xmeta_general_is_end`, `xmeta_general_sort`, `xmeta_general_caption`, `xmeta_general_data`, `xmeta_general_mtime`, `xmeta_general_ctime`) VALUES (10, 4, '1,4,', 3, 1, 999999999, 'S300', NULL, '2024-06-20 17:35:32', '2024-06-20 17:34:34');
INSERT INTO `xmeta_general` (`xmeta_general_id`, `xmeta_general_parent_id`, `xmeta_general_fullPath`, `xmeta_general_level`, `xmeta_general_is_end`, `xmeta_general_sort`, `xmeta_general_caption`, `xmeta_general_data`, `xmeta_general_mtime`, `xmeta_general_ctime`) VALUES (11, 4, '1,4,', 3, 1, 999999999, 'S600', NULL, '2024-06-20 17:35:33', '2024-06-20 17:34:44');

-- 通用属性语言
INSERT INTO `xmeta_lang_general` (`id`, `code`, `db_name`, `table_name`, `column_name`, `record_id`, `text`, `mtime`, `ctime`) VALUES (1, 'en', 'yp_world', 'xmeta_general', 'xmeta_general_caption', 1, 'Brand', '2024-06-21 15:36:54', '2024-06-21 15:33:02');
INSERT INTO `xmeta_lang_general` (`id`, `code`, `db_name`, `table_name`, `column_name`, `record_id`, `text`, `mtime`, `ctime`) VALUES (2, 'en', 'yp_world', 'xmeta_general', 'xmeta_general_caption', 2, 'Toyota', '2024-06-21 15:36:58', '2024-06-21 15:33:14');
INSERT INTO `xmeta_lang_general` (`id`, `code`, `db_name`, `table_name`, `column_name`, `record_id`, `text`, `mtime`, `ctime`) VALUES (3, 'en', 'yp_world', 'xmeta_general', 'xmeta_general_caption', 3, 'BMW', '2024-06-21 15:37:01', '2024-06-21 15:33:20');
INSERT INTO `xmeta_lang_general` (`id`, `code`, `db_name`, `table_name`, `column_name`, `record_id`, `text`, `mtime`, `ctime`) VALUES (4, 'en', 'yp_world', 'xmeta_general', 'xmeta_general_caption', 4, 'Benz', '2024-06-21 15:37:04', '2024-06-21 15:33:25');
INSERT INTO `xmeta_lang_general` (`id`, `code`, `db_name`, `table_name`, `column_name`, `record_id`, `text`, `mtime`, `ctime`) VALUES (5, 'en', 'yp_world', 'xmeta_general', 'xmeta_general_caption', 5, 'Corolla', '2024-06-21 15:37:08', '2024-06-21 15:33:33');
INSERT INTO `xmeta_lang_general` (`id`, `code`, `db_name`, `table_name`, `column_name`, `record_id`, `text`, `mtime`, `ctime`) VALUES (6, 'en', 'yp_world', 'xmeta_general', 'xmeta_general_caption', 6, 'Dominance', '2024-06-21 15:37:09', '2024-06-21 15:33:39');

-- 语言映射
INSERT INTO `xmeta_lang_map` (`xmeta_lang_map_db_name`, `xmeta_lang_map_table_name`, `xmeta_lang_map_column_name`, `xmeta_lang_map_lang`, `xmeta_lang_map_store_db_name`, `xmeta_lang_map_store_table_name`, `xmeta_lang_map_rule`, `xmeta_lang_map_status`, `xmeta_lang_map_mtime`, `xmeta_lang_map_ctime`) VALUES ('yp_world', 'xmeta_general', 'xmeta_general_caption', '', 'yp_world', 'xmeta_lang_general', '{\"langCodeByValue\": [{\"code\": [\"en\"], \"where\": {\"xmeta_general_level\": \"1\", \"xmeta_general_fullPath{=%}\": \"1,\"}, \"comment\": \"车系\"}]}', 'enabled', '2024-06-21 16:20:57', '2024-06-21 15:38:57');

-- 部门与用户

INSERT INTO `xmeta__lnk_user_depa` (`xmeta__lnk_user_depa_id`, `xmeta__lnk_user_depa_user_id`, `xmeta__lnk_user_depa_depa_id`, `xmeta__lnk_user_depa_manager`, `xmeta__lnk_user_depa_mtime`, `xmeta__lnk_user_depa_ctime`) VALUES (1, 1, 2, 1, '2024-06-26 09:06:09', '2024-06-26 09:06:09');
INSERT INTO `xmeta__lnk_user_depa` (`xmeta__lnk_user_depa_id`, `xmeta__lnk_user_depa_user_id`, `xmeta__lnk_user_depa_depa_id`, `xmeta__lnk_user_depa_manager`, `xmeta__lnk_user_depa_mtime`, `xmeta__lnk_user_depa_ctime`) VALUES (2, 2, 4, 0, '2024-06-26 09:06:22', '2024-06-26 09:06:22');

COMMIT;
</pre>
    <h3>规则-JSON 扩展数据映射</h3>
    <pre contenteditable="true">
{
	"byValue":{
		"where":[
			{"fieldname":"xmeta_general_fullPath", "op":"/(\d+,)/"}
			{"fieldname":"xmeta_general_level", "op":"="}
		],
		"case":{
			"1,|2":{"comment":"车系", "caption":["年份"]},
			"1,|3":{"comment":"车型", "caption":["开始年份","结止年份","发动机","功率","排量"]},
		}
	}
}
</pre>
    <h3>规则-语言翻译映射</h3>
    <pre contenteditable="true">
{
	"byValue":{
		"where":[
			{"fieldname":"xmeta_general_fullPath", "op":"/(\d+,)/"},
			{"fieldname":"xmeta_general_level", "op":"="}
		],
		"case":{
			"1,|1":{"comment":"品牌", "langCodes":["en"]},
			"1,|2":{"comment":"车系", "langCodes":["en"]},
			"1,|3":{"comment":"车型", "langCodes":[]},
		}
	}
}
</pre>
</body>

</html>