前言

Visor(http://www.visor.com.cn)   是一个基于HTML5 Canvas 开发的IDE 框架和设计开发平台,有关Visor的设计架构和技术应用,在以后的文章里会逐渐跟大家分享,今天主要是分享一下它的数据库设计功能和SQL生成功能。在众多的软件项目里面,权限管理基本上都是必备的,看到有网友甚至为权限管理单独做了一套框架,目的都是为了很快的应用到不同的项目里面,减少开发的成本。本人也做过很多类似的工作,不论多好的框架都只能解决80%的用户,总有20%的用户会让你花80%的精力重复做过的事情,下边就说说在Visor 中如何完成数据库设计,并且通过模板生成数据库DDL SQL 和实体对象。

1. 建模设计,在Visor 里面,现在提供三种设计器,流程设计,ER设计和JPA实体设计,只有ER设计里面完成的ER图可以生成数据库需要的DDL SQL。

2. 设计模板

在文档菜单里面可以下载建模生成的数据表对象关系数据文件,数据文件是JSON格式的,然后用你熟悉的模板语言去生成想要的SQL代码和实体代码,在项目有严格规范的情况下,可以生成更多的对象,如DAO,Service,resultful api 等。可以说一劳永逸。 在Visor里面,默认使用的是Jsrender ,而且已经提供了生成ORACLE,SQL Server 和MYSQL 对应的DDL的模板。完成建模以后,点击相应的模板,可以下载对应数据库的DDL SQL文件. 里面会包含唯一索引和非空约束, 如果你要在数据库里面建立更多的约束和索引,这还需要手动完成。但是这些对象是否要创建在数据库里都还有争议。

{
  "tables": [
    {
      "name": "Users",
      "text": "Users",
      "auditable": false,
      "prefix": "",
      "abbreviation": "",
      "annotation": "",
      "cachable": false,
      "namespace": "",
      "strategy": "seqence",
      "sequenceName": "",
      "owner": "",
      "fields": [
        {
          "name": "id",
          "text": "id",
          "abbreviation": "",
          "datatype": "number",
          ,
          "ispk": true,
          "isfk": false,
          "reftable": "",
          "refield": "",
          "nullable": false,
          "unique": true,
          "annotation": "",
          "defaultvalue": "",
          ,
          ,

        },
        {
          "name": "name",
          "text": "name",
          "abbreviation": "",
          "datatype": "varchar",
          ,
          "ispk": false,
          "isfk": false,
          "reftable": "",
          "refield": "",
          "nullable": true,
          "unique": false,
          "annotation": "",
          "defaultvalue": "",
          ,
          ,

        },
        {
          "name": "email",
          "text": "email",
          "abbreviation": "",
          "datatype": "varchar",
          ,
          "ispk": false,
          "isfk": false,
          "reftable": "",
          "refield": "",
          "nullable": true,
          "unique": false,
          "annotation": "",
          "defaultvalue": "",
          ,
          ,

        },
        {
          "name": "password",
          "text": "password",
          "abbreviation": "",
          "datatype": "varchar",
          ,
          "ispk": false,
          "isfk": false,
          "reftable": "",
          "refield": "",
          "nullable": true,
          "unique": false,
          "annotation": "",
          "defaultvalue": "",
          ,
          ,

        },
        {
          "name": "active",
          "text": "active",
          "abbreviation": "",
          "datatype": "boolean",
          ,
          "ispk": false,
          "isfk": false,
          "reftable": "",
          "refield": "",
          "nullable": true,
          "unique": false,
          "annotation": "",
          "defaultvalue": "",
          ,
          ,

        }
      ],
      "pks": [
        {
          "name": "id",
          "text": "id",
          "abbreviation": "",
          "datatype": "number",
          ,
          "ispk": true,
          "isfk": false,
          "reftable": "",
          "refield": "",
          "nullable": false,
          "unique": true,
          "annotation": "",
          "defaultvalue": "",
          ,
          ,

        }
      ]
    },
    {
      "name": "Roles",
      "text": "Roles",
      "auditable": false,
      "prefix": "",
      "abbreviation": "",
      "annotation": "",
      "cachable": false,
      "namespace": "",
      "strategy": "seqence",
      "sequenceName": "",
      "owner": "",
      "fields": [
        {
          "name": "id",
          "text": "id",
          "abbreviation": "",
          "datatype": "number",
          ,
          "ispk": true,
          "isfk": false,
          "reftable": "",
          "refield": "",
          "nullable": false,
          "unique": true,
          "annotation": "",
          "defaultvalue": "",
          ,
          ,

        },
        {
          "name": "name",
          "text": "name",
          "abbreviation": "",
          "datatype": "varchar",
          ,
          "ispk": false,
          "isfk": false,
          "reftable": "",
          "refield": "",
          "nullable": true,
          "unique": false,
          "annotation": "",
          "defaultvalue": "",
          ,
          ,

        },
        {
          "name": "description",
          "text": "description",
          "abbreviation": "",
          "datatype": "varchar",
          ,
          "ispk": false,
          "isfk": false,
          "reftable": "",
          "refield": "",
          "nullable": true,
          "unique": false,
          "annotation": "",
          "defaultvalue": "",
          ,
          ,

        }
      ],
      "pks": [
        {
          "name": "id",
          "text": "id",
          "abbreviation": "",
          "datatype": "number",
          ,
          "ispk": true,
          "isfk": false,
          "reftable": "",
          "refield": "",
          "nullable": false,
          "unique": true,
          "annotation": "",
          "defaultvalue": "",
          ,
          ,

        }
      ]
    },
    {
      "name": "User_Role",
      "text": "User_Role",
      "auditable": false,
      "prefix": "",
      "abbreviation": "",
      "annotation": "",
      "cachable": false,
      "namespace": "",
      "strategy": "seqence",
      "sequenceName": "",
      "owner": "",
      "fields": [
        {
          "name": "User_id",
          "text": "id",
          "abbreviation": "",
          "datatype": "number",
          ,
          "ispk": true,
          "isfk": true,
          "reftable": "Users",
          "refield": "id",
          "nullable": false,
          "unique": true,
          "annotation": "",
          "defaultvalue": "",
          ,
          ,

        },
        {
          "name": "Role_id",
          "text": "id",
          "abbreviation": "",
          "datatype": "number",
          ,
          "ispk": true,
          "isfk": true,
          "reftable": "Roles",
          "refield": "id",
          "nullable": false,
          "unique": true,
          "annotation": "",
          "defaultvalue": "",
          ,
          ,

        }
      ],
      "pks": [
        {
          "name": "User_id",
          "text": "id",
          "abbreviation": "",
          "datatype": "number",
          ,
          "ispk": true,
          "isfk": true,
          "reftable": "Users",
          "refield": "id",
          "nullable": false,
          "unique": true,
          "annotation": "",
          "defaultvalue": "",
          ,
          ,

        },
        {
          "name": "Role_id",
          "text": "id",
          "abbreviation": "",
          "datatype": "number",
          ,
          "ispk": true,
          "isfk": true,
          "reftable": "Roles",
          "refield": "id",
          "nullable": false,
          "unique": true,
          "annotation": "",
          "defaultvalue": "",
          ,
          ,

        }
      ]
    },
    {
      "name": "privileges",
      "text": "table1",
      "auditable": false,
      "prefix": "",
      "abbreviation": "",
      "annotation": "",
      "cachable": false,
      "namespace": "",
      "strategy": "seqence",
      "sequenceName": "",
      "owner": "",
      "fields": [
        {
          "name": "id",
          "text": "id",
          "abbreviation": "",
          "datatype": "varchar",
          ,
          "ispk": true,
          "isfk": false,
          "reftable": "",
          "refield": "",
          "nullable": false,
          "unique": true,
          "annotation": "",
          "defaultvalue": "",
          ,
          ,

        },
        {
          "name": "name",
          "text": "name",
          "abbreviation": "",
          "datatype": "varchar",
          ,
          "ispk": false,
          "isfk": false,
          "reftable": "",
          "refield": "",
          "nullable": true,
          "unique": false,
          "annotation": "",
          "defaultvalue": "",
          ,
          ,

        },
        {
          "name": "description",
          "text": "description",
          "abbreviation": "",
          "datatype": "varchar",
          ,
          "ispk": false,
          "isfk": false,
          "reftable": "",
          "refield": "",
          "nullable": true,
          "unique": false,
          "annotation": "",
          "defaultvalue": "",
          ,
          ,

        }
      ],
      "pks": [
        {
          "name": "id",
          "text": "id",
          "abbreviation": "",
          "datatype": "varchar",
          ,
          "ispk": true,
          "isfk": false,
          "reftable": "",
          "refield": "",
          "nullable": false,
          "unique": true,
          "annotation": "",
          "defaultvalue": "",
          ,
          ,

        }
      ]
    },
    {
      "name": "Role_Privilege",
      "text": "table1",
      "auditable": false,
      "prefix": "",
      "abbreviation": "",
      "annotation": "",
      "cachable": false,
      "namespace": "",
      "strategy": "seqence",
      "sequenceName": "",
      "owner": "",
      "fields": [
        {
          "name": "Roles_id",
          "text": "id",
          "abbreviation": "",
          "datatype": "number",
          ,
          "ispk": true,
          "isfk": true,
          "reftable": "Roles",
          "refield": "id",
          "nullable": false,
          "unique": true,
          "annotation": "",
          "defaultvalue": "",
          ,
          ,

        },
        {
          "name": "privilege_id",
          "text": "id",
          "abbreviation": "",
          "datatype": "varchar",
          ,
          "ispk": true,
          "isfk": true,
          "reftable": "privilege",
          "refield": "id",
          "nullable": false,
          "unique": true,
          "annotation": "",
          "defaultvalue": "",
          ,
          ,

        }
      ],
      "pks": [
        {
          "name": "Roles_id",
          "text": "id",
          "abbreviation": "",
          "datatype": "number",
          ,
          "ispk": true,
          "isfk": true,
          "reftable": "Roles",
          "refield": "id",
          "nullable": false,
          "unique": true,
          "annotation": "",
          "defaultvalue": "",
          ,
          ,

        },
        {
          "name": "privilege_id",
          "text": "id",
          "abbreviation": "",
          "datatype": "varchar",
          ,
          "ispk": true,
          "isfk": true,
          "reftable": "privilege",
          "refield": "id",
          "nullable": false,
          "unique": true,
          "annotation": "",
          "defaultvalue": "",
          ,
          ,

        }
      ]
    }
  ],
  "connections": [
    {
      "name": "R1",
      "identifying": true,
      "nullable": false,
      "source_owner": "",
      "source_prefix": "",
      "source": "Users",
      "target_owner": "",
      "target_prefix": "",
      "target": "User_Role",
      "elements": [
        {
          "key": "id",
          "value": "User_id"
        }
      ]
    },
    {
      "name": "R2",
      "identifying": true,
      "nullable": false,
      "source_owner": "",
      "source_prefix": "",
      "source": "Roles",
      "target_owner": "",
      "target_prefix": "",
      "target": "User_Role",
      "elements": [
        {
          "key": "id",
          "value": "Role_id"
        }
      ]
    },
    {
      "name": "R3",
      "identifying": true,
      "nullable": false,
      "source_owner": "",
      "source_prefix": "",
      "source": "Roles",
      "target_owner": "",
      "target_prefix": "",
      "target": "Role_Privilege",
      "elements": [
        {
          "key": "id",
          "value": "Roles_id"
        }
      ]
    },
    {
      "name": "R4",
      "identifying": true,
      "nullable": false,
      "source_owner": "",
      "source_prefix": "",
      "source": "privileges",
      "target_owner": "",
      "target_prefix": "",
      "target": "Role_Privilege",
      "elements": [
        {
          "key": "id",
          "value": "privilege_id"
        }
      ]
    }
  ],
  "option": {
    "datetime": "2015-05-25T04:32:51.916Z"
  }
}

3. 完善建模设计和模板

项目需求会不停的改变,不同项目也有可能会应用不同的技术和语言。而我们要做的只是完善建模和制作新的模板。 而那些重复的工作,就让Visor 替你去完成吧。

Visor 应用之一 通过ER 设计生成数据库脚本和实体对象的更多相关文章

  1. 在EA中用ER图生成数据库

    ER图 E-R图也称实体-联系图(Entity Relationship Diagram).提供了表示实体类型.属性和联系的方法.用来描写叙述现实世界的概念模型. 实体就是看的见摸得着或者能被人感知接 ...

  2. powerdesigner 生成数据库脚本

    PowerDesigner导出所有SQL脚本 操作:Database=>Generate Database PowerDesigner怎么导出建表sql脚本 1 按照数据库类型,切换数据库. D ...

  3. ABP增加记录EFCore 生成数据库脚本日志到新的txt文件

    由于EFCore并没直接生成脚本到txt文件,故而自己画了点时间把实现记录下来,方便给大家参考. 0.安装Microsoft.Extensions.Logging.Debug,我这里是2.1.1版本. ...

  4. IDEA快速生成数据库表的实体类

    IDEA连接数据库 IDEA右边侧栏有个DataSource,可以通过这个来连接数据库,我们先成功连接数据库 点击进入后填写数据库进行连接,注意记得一定要去Test Connection 确保正常连接 ...

  5. idea生成springboot jpa的实体对象

    在idea的database里面添加上数据库 File-->Project Structure Modules--->点击加号----->选择JPA  选择确认之后再主面板上就会出现 ...

  6. PowerDesigner生成SQL脚本时,对象带有双引号的问题解决

    在pdm查看脚本时,发现表名和字段名带有双引号: 1.create table"cfg_user_card_account"  ( 2.  "user_card_acco ...

  7. MyBatis数据库字段和实体对象属性名不一致的解决方案

    数据库和对象的属性名不一致是很常见的问题,这个时候依从表字段到对象属性名的按名称匹配映射已经搞不定这个了,下面是几种解决方案. 1. 开启驼峰转换 如果数据库中的字段名与对象只是简单的不一致的话,比如 ...

  8. NHibernate中,查询SqlServer数据库多个实体对象

    关于datetime类型使用:  Oracle:  "and tb.EffectiveDate >= to_date(?,'yyyy-mm')" Sql:  "an ...

  9. NetCore使用使用Scaffold-DbContext命令生成数据库表实体类

    一.为了模拟项目,本处创建了一个NetCore的Web项目.打算在Models文件夹下生成数据库表的实体类. 二.在程序包管理控制台,输入“Scaffold-DbContext "Serve ...

随机推荐

  1. asp.net报错“尝试读取或写入受保护的内存。这通常指示其他内存已损坏”的解决办法

    来源:http://ajxfxb.blog.163.com/blog/static/56675086201411634336878/ 作者是:没完没了的工作 asp.net报错“尝试读取或写入受保护的 ...

  2. X.509,RSA,PKCS 普及

    X.509 X.509是一种非常通用的证书格式.所有的证书都符合ITU-T X.509国际标准,因此(理论上)为一种应用创建的证书可以用于任何其他符合X.509标准的应用. 在一份证书中,必须证明公钥 ...

  3. MFC编程入门之二十一(常用控件:编辑框Edit Control)

    上一节讲了静态文本框,本节讲的是编辑框(Edit Control)同样是一种很常用的控件,我们可以在编辑框中输入并编辑文本.在前面加法计算器的例子中已经演示了编辑框的基本应用.下面具体讲解编辑框的使用 ...

  4. springMVC+mybatis+spring整合案例

    1.web.xml a:配置spring监听,使web容器在启动时加载spring的applicationContext.xml <listener> <listener-class ...

  5. shell下>和>>的区别

    >  :如果文件不存在,同上,如果文件存在,先将文件清空,然后将数据填入此文件 >> :如果文件不存在,将创建新的文件,并将数据送至此文件:如果文件存在,则将数据添加在文件后面

  6. SPSS数据分析—Poisson回归模型

    在对数线性模型中,我们假设单元格频数分布为多项式分布,但是还有一类分类变量分布也是经常用到的,就是Poisson分布. Poisson分布是某件事发生次数的概率分布,用于描述单位时间.单位面积.单位空 ...

  7. windows 服务实例

    参考来源:http://blog.csdn.net/morewindows/article/details/6858216 参考来源: http://hi.baidu.com/tfantasy/ite ...

  8. 05-String动手动脑问题及课后实验性问题总结

    一.请运行以下实例代码StringPool.java,查看其输出结果.如何解释这样的输出结果?从中你能总结出什么? (1)在Java中,内容相同的字符常量("Hello")只保存一 ...

  9. plsql dev

    访问v$session,v$sesstat and v$statname视图的权限 grant create session,resource to chf; grantselectonv_$sess ...

  10. php 使用curl模拟登录discuz以及模拟发帖

    <?php$discuz_url = 'http://127.0.0.1/discuz/';//论坛地址$login_url = $discuz_url .'logging.php?action ...