Skip to content

可视化建模

数据建模概述

CodeWave 的数据建模是整个应用开发的起点。通过可视化 ER 图设计数据模型,系统自动生成数据库表、CRUD API 和基础页面。

实体设计

字段类型

类型说明示例
String字符串姓名、描述
Integer整数年龄、数量
Long长整数ID、时间戳
Decimal小数金额、价格
Boolean布尔值是否启用
DateTime日期时间创建时间
Date日期生日
Enum枚举状态、类型
File文件附件、图片
Relation关联实体外键关联

字段约束

字段约束配置
├── 必填(Required)
├── 唯一(Unique)
├── 最大长度(MaxLength)
├── 最小值/最大值(Min/Max)
├── 正则校验(Pattern)
├── 默认值(Default)
└── 自动填充(AutoFill)
    ├── 创建时间(created_at)
    ├── 更新时间(updated_at)
    └── 创建人(created_by)

实体关系

关系类型
├── 一对一(1:1)
│   示例:用户 ↔ 用户详情
│   实现:外键在任意一方
├── 一对多(1:N)
│   示例:部门 → 员工
│   实现:外键在「多」的一方(员工表有 department_id)
└── 多对多(M:N)
    示例:员工 ↔ 角色
    实现:中间表(employee_role)

自动生成能力

生成数据库表

sql
-- 根据实体定义自动生成 DDL
CREATE TABLE `employee` (
  `id`            BIGINT       NOT NULL AUTO_INCREMENT COMMENT '主键',
  `name`          VARCHAR(50)  NOT NULL COMMENT '姓名',
  `email`         VARCHAR(100) NOT NULL UNIQUE COMMENT '邮箱',
  `department_id` BIGINT       COMMENT '部门ID',
  `status`        VARCHAR(20)  NOT NULL DEFAULT 'active' COMMENT '状态',
  `created_at`    DATETIME     NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `updated_at`    DATETIME     NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  PRIMARY KEY (`id`),
  KEY `idx_department_id` (`department_id`),
  CONSTRAINT `fk_employee_department` FOREIGN KEY (`department_id`) REFERENCES `department` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='员工表';

生成 CRUD API

自动生成的 REST API
├── GET    /api/employees          # 列表查询(支持分页、筛选、排序)
├── GET    /api/employees/:id      # 详情查询
├── POST   /api/employees          # 创建
├── PUT    /api/employees/:id      # 更新
├── DELETE /api/employees/:id      # 删除
└── POST   /api/employees/batch    # 批量操作

生成基础页面

  • 列表页(带搜索、分页、操作按钮)
  • 详情页
  • 新建/编辑表单页

生成的页面可以在前端设计器中进一步定制。

业务规则

数据验证

javascript
// 在实体上配置业务规则
// 示例:员工入职日期不能早于公司成立日期
validate: {
  hireDate: {
    rule: value => value >= '2010-01-01',
    message: '入职日期不能早于公司成立日期'
  }
}

// 示例:离职日期必须晚于入职日期
validate: {
  leaveDate: {
    rule: (value, record) => !value || value > record.hireDate,
    message: '离职日期必须晚于入职日期'
  }
}

生命周期钩子

javascript
// 实体生命周期钩子
entity Employee {
  // 创建前:自动生成工号
  beforeCreate: async (data) => {
    data.employeeNo = await generateEmployeeNo()
  },
  
  // 创建后:发送欢迎邮件
  afterCreate: async (record) => {
    await sendWelcomeEmail(record.email, record.name)
  },
  
  // 删除前:检查是否有未完成任务
  beforeDelete: async (record) => {
    const tasks = await Task.count({ assignee: record.id, status: 'pending' })
    if (tasks > 0) throw new Error('该员工有未完成任务,无法删除')
  }
}

网易智企产品解决方案知识库