软件设计技巧之数据库设计还能这样玩

发表于:2020-5-22 10:18  作者:全职码农   来源:今日头条

字体: | 上一篇 | 下一篇 |我要投稿 | 推荐标签: 数据库

  数据库设计回顾
  记得刚学习java开发的时候,老师推荐PowerDesigner设计数据库,图形化更加直观易懂。
  后来工作后,实际开发,喜欢直接连接数据库操作,因此使用Navicat作为数据库管理工具,顺带包揽设计工作。
  而在团队协作中,数据库文档是评审必须的,想想自己整理的word文档,免不了会吐槽一番。最近几年,word文档写的很少了(除非正式的文档),因为markdown的出现,更加符合程序员的编写习惯,感觉就和写代码一样,缩进、特殊标记、代码插入、表格等,很方便的就能实现。
  为了讲下面的内容,这里我简单说明下markdown是什么。
  markdown是一种标记语言,使用更加易懂的纯文本格式,很方便实现写文章所需的各种效果。
  那么,你有没有想过,数据库设计也能通过类似的标记语言呢?
  数据库标记语言
  今天要讲的主角正式登场(^_^),她就是DBML,全称是Database Markup Language(数据库标记语言)。讲之前,先来张靓照瞧瞧
 
  从上图可以看到,table、pk、varchar等关键字,再熟悉不过了。这种语言是专门为数据库设计的,所以叫数据库标记语言,接下来我们就想起的细品下她的美好。
  DBML语法
  表定义
   Table table_name {
  column_name column_type [column_settings]
  }
  table_name:表名
  column_name:字段名
  column_type:字段类型
  column_settings:字段的设置
  字段定义
   Table buildings {
  ...
  address varchar(255) [unique, not null, note: 'to include unit number']
  id integer [ pk, unique, default: 123, note: 'Number' ]
  }
  主键:primary key 或 pk
  空/非空:null 或 not null
  注释:note
  唯一索引:unique
  默认值:default
  索引定义
   Table bookings {
  id integer
  country varchar
  booking_date date
  created_at timestamp
  indexes {
  (id, country) [pk] // composite primary key
  created_at [note: 'Date']
  booking_date
  (country, booking_date) [unique]
  booking_date [type: hash]
  (`id*2`)
  (`id*3`,`getdate()`)
  (`id*3`,id)
  }
  } 
  主要分三种索引:
  单字段索引、复合索引、表达式索引
  外键关系定义
   //Long form
  Ref name_optional {
  table1.column1 < table2.column2
  }
  //Short form:
  Ref name_optional: table1.column1 < table2.column2
  // Inline form
  Table posts {
  id integer
  user_id integer [ref: > users.id]
  }
  注释
 // Inline form
  使用双斜杠即可
  备注
   Table users {
  id int [pk]
  name varchar
  Note: 'This is a note of this table'
  // or
  Note {
  'This is a note of this table'
  }
  }
  枚举
   enum job_status {
  created [note: 'Waiting to be processed']
  running
  done
  failure
  }
  DBML工具
  通过DBML可以让表设计,通过纯文本的方式,很方便的描述。那么,如果仅仅是这样的,肯定不够吸引,我猜你还希望
  DBML转成SQL语句
  SQL语句转换成DBML
  可视化
  当然了,这些DBML都给你提供了,先来看张图
  
  这个是所见即所得,在线工具。
  至于DBML与SQL的互相转化,DBML提供了基于node的命令工具dbml2sql、sql2dbml
  总结
  DBML是一个新型的数据库设计工具,当然有人喜欢,有人吐槽,当然希望你能够喜欢哈。软件设计随着时光的推进,很多新的理念被推出,作为程序员,当然是要不断的吸收和转化。

      本文内容不用于商业目的,如涉及知识产权问题,请权利人联系博为峰小编(021-64471599-8017),我们将立即处理

评 论

论坛新帖

顶部 底部


建议使用IE 6.0以上浏览器,800×600以上分辨率,法律顾问:上海瀛东律师事务所 张楠律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2020, 沪ICP备05003035号
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪公网安备 31010102002173号

51Testing官方微信

51Testing官方微博

扫一扫 测试知识全知道