一个开源、免费在线数据建模、元数据管理平台,简单易用

一、开源项目简介

ERD Online 是一个开源、免费在线数据建模、元数据管理平台。提供简单易用的元数据设计、关系图设计、SQL查询等功能,辅以版本、导入、导出、数据源、SQL解析、审计、团队协作等功能、方便我们快速、安全的管理数据库中的元数据。

二、开源协议

使用AGPL-3.0开源协议

三、界面展示

功能图鉴

关系图设计

元数据设计

版本管理

导入

导出

在线SQL

执行计划

四、功能概述

特性

  • 开箱即用:将注意力集中在数据结构设计上
  • 团队协作:三级权限(拥有者、管理员、普通角色)管理,元素级权限控制
  • 元数据设计:快速复制已有表结构、JSON 生成表,表默认字段、默认大小写等控制
  • 元数据管理:在线管理表结构,支持正向向数据库执行
  • 元数据解析:将已有的数据库结构解析到软件中管理
  • 多数源支持:支持多种数据库连接在线管理(Mysql、Oracle、DB2、SqlServer、PostGreSql),各数据源之间元数据结构同步
  • 版本管理:每个需求与变动,都可以生成版本;每个版本之间可以比对差异
  • 可将所有表结构,自动生成 word、html、md 文档,便于线下流动
  • 在线SQL:在线SQL查询、SQL执行计划,历史查询留痕
  • 永不丢失:元数据历史操作版本留痕(最近9次),可以恢复到任意历史版本
  • 数据字典:全局数据字典设计,控制元数据设计规范

发展里程碑

什么是ERD Online

ERD 是Entity-Relationship Diagram的缩写,中文意思为实体关系图,也被称为 ERD、ER 图、实体联系模型、实体联系模式图或 ER 模型,是一种用于数据库设计的结构图。ERD Online为开发者提供一站式的数据库结构设计、版本管理、执行 sql、逆向解析、文档生成功能。

我们的目标:通过对元数据管理,向大数据、低代码、BI、大屏应用等赋能,让数据成为企业创新的核心引擎。

核心能力

  • 元数据解析
  • 从数据源将元数据解析出来,通过ERD Online在线管理。
  • 元数据管理
  • 这一设计解决了软件开发生命周期中,元数据管理效率低下的问题。
  • 多数源支持(Mysql、Oracle、Sqlserver、Postgresql)
  • 支持所有符合SQL规范的数据源,常见的有Mysql、Oracle、Sqlserver、Postgresql。
  • 多数源同步
  • 在线ERD Online,多数据源同步。这一设计解决了一个产品需要适配多种不通数据源,不同数据源 SQL 方言不一致问题。
  • 在线导出 SQL(全量或差量)
  • 通过记录元数据变动,形成版本节点,支持不同版本比对,生成各种数据源 SQL 脚本。这一设计解决了产品从开发阶段到生产阶段,差量 SQL 比对费时耗力的问题。
  • 在线执行 SQL
  • 无需安装第三方数据库管理工具,无需打开Shell窗口,在线往数据源执行 SQL。这一功能节省了企业大量采购正版数据库管理软件的费用。
  • 数据血缘管理
  • 在线管理元数据之间的关联关系,形成血缘视图,一目了然。这一设计解决了传统数据关系不清晰,让数据关系梳理更高效。
  • 团队协作
  • 精准的权限划分,根据不通角色分配不通功能,保障数据安全。支持多人实时在线协作,自动同步。
  • 元数据导出(Word、Pdf、Html、Markdown)
  • 支持导出离线文档 Word、Pdf、Html、Markdown,便于线下流通交流、存档。
  • 官方市场一键导入
  • 官方市场有大量各行业、各类型、各设备、各通讯已有的元数据,可一键导入自己的项目,快速形成自己的元数据结构。
  • 每个仪器、每个软件、每次通讯,他们产生、传递的数据结构都是固定的,可在官方市场搜索并导入,避免重复建设。
  • 低代码平台(待建设)
  • BI
  • 大屏
  • 低代码平台

为谁服务

  • 开发工程师
  • 一键解析已有数据源元数据并在线管理,生成差量上线SQL
  • 根据已有的元数据结构,生成项目代码
  • 自定义每个表固定的列
  • BI开发
  • 大屏开发
  • 架构师
  • 打通产品线所有数据源
  • 所有数据源在线管理,避免数据孤岛
  • 约定数据源字段规范
  • 审计开发人员数据源操作
  • DB 工程师
  • 在线管理数据源元数据,自定义全部数据源看板
  • 审计上线 SQL
  • 项目管理/产品管理/工程效率管理人员
  • 了解产品发展过程中,数据形态以及变化
  • 通过数据去做产品发展决策

五、技术选型

业务架构介绍

ERD Online技术栈

  • 前端:React + Ant design + Zustand
  • 后端:Java8 + Spring Boot2 + Maven3 + Mysql8

Zustand

A small, fast and scalable bearbones state-management solution using simplified flux principles. Has a comfy api based on hooks, isn't boilerplatey or opinionated

简而言之,Zustand 是一种前端状态管理技术,类似于Redux。

ERD Online 正是借助 Zustand 强大的状态管理技术,实现跨页面操作元数据大JSON,实现页面和js分离。

Zustand 用法

ERD Online 中,操作大JSON的方法,都提取到了src/store这里,在这里管理了 ERD Online 对大json的全部操作甚至,由于做到了页面和js分离,你可以把 ERD Online 从React 项目改造成 Vue项目(理论可行,因为Ant Design也有Vue版)

ERD ONLINE 中的 Zustand

export type ProjectState =
  {
    tables: any[],
    project: any,
    fetch: () => Promise<void>;
    dispatch: IProjectJsonDispatchSlice & IConfigJsonDispatchSlice & IModulesDispatchSlice
      & IDataTypeDomainsDispatchSlice & IDatabaseDomainsDispatchSlice & IProfileDispatchSlice
      & IEntitiesDispatchSlice & IExportDispatchSlice
  }
  & IProjectJsonSlice
  & IConfigJsonSlice
  & IModulesSlice
  & IDataTypeDomainsSlice
  & IDatabaseDomainsSlice
  & IProfileSlice
  & IExportSlice
  & IEntitiesSlice;

// Turn the set method into an immer proxy
// @ts-ignore
export const immer = config => (set, get, api) => config((partial, replace) => {
  console.log(51, "partial", partial)
  console.log(52, "replace", replace)
  const nextState = typeof partial === 'function'
    ? produce(partial)
    : partial;
  return set(nextState, replace);
}, get, api)

const useProjectStore = create<ProjectState, SetState<ProjectState>, GetState<ProjectState>, StoreApiWithSubscribeWithSelector<ProjectState>>(
  subscribeWithSelector(
    immer(
      (set: SetState<ProjectState>, get: GetState<ProjectState>) => ({
        tables: [],
        project: {},
        fetch: async () => {
          const projectId = cache.getItem(CONSTANT.PROJECT_ID);
          await request.get(`/ncnb/project/info/${projectId}`).then((res: any) => {
            console.log(45, res);
            const data = res?.data;
            if (res?.code === 200 && data) {
              set({project: data});
              get().dispatch.fixProject(data);
              //计算全部表名
              const tables = _.flatMapDepth(data?.projectJSON?.modules, (m) => {
                console.log(130, m);
                return _.map(m.entities, 'title')
              }, 2);
              set({
                tables
              })
            } else {
              message.error('获取项目信息失败');
            }
          });
        },
        dispatch: {
          updateProjectName: (payload: any) => set((state: any) => {
            // @ts-ignore
            state.project.projectName = payload;
          }),
          ...ProjectJsonSlice(set, get),
          ...ConfigJsonSlice(set, get),
        }
      })
    )
  )
);

const globalState = useGlobalStore.getState();
// @ts-ignore
useProjectStore.subscribe(state => state.project, (project, previousProject) => {
  console.log(109, project);
  console.log(110, previousProject);
  globalState.dispatch.setSaved(false);
  Save.saveProject(project);
  globalState.dispatch.setSaved(true);
});

export default useProjectStore;

六、源码地址

https://download.csdn.net/download/weixin_37576193/87732876

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

TNT报社

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值