|
|
51CTO旗下网站
|
|
移动端

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

随着软件设计的发展,设计思想不断革新,作为程序员,就需要不断的学习,不断的尝试新方法,本文将介绍一种新的数据库设计方法,个人感觉非常符合现代设计风格,接下来一起看看吧。

作者:全职码农来源:今日头条|2020-05-22 10:00

数据库设计回顾

记得刚学习java开发的时候,老师推荐PowerDesigner设计数据库,图形化更加直观易懂。

后来工作后,实际开发,喜欢直接连接数据库操作,因此使用Navicat作为数据库管理工具,顺带包揽设计工作。

而在团队协作中,数据库文档是评审必须的,想想自己整理的word文档,免不了会吐槽一番。最近几年,word文档写的很少了(除非正式的文档),因为markdown的出现,更加符合程序员的编写习惯,感觉就和写代码一样,缩进、特殊标记、代码插入、表格等,很方便的就能实现。

为了讲下面的内容,这里我简单说明下markdown是什么。

markdown是一种标记语言,使用更加易懂的纯文本格式,很方便实现写文章所需的各种效果。

那么,你有没有想过,数据库设计也能通过类似的标记语言呢?

数据库标记语言

今天要讲的主角正式登场(^_^),她就是DBML,全称是Database Markup Language(数据库标记语言)。讲之前,先来张靓照瞧瞧

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

从上图可以看到,table、pk、varchar等关键字,再熟悉不过了。这种语言是专门为数据库设计的,所以叫数据库标记语言,接下来我们就想起的细品下她的美好。

DBML语法

  • 表定义
  1. Table table_name { 
  2.     column_name column_type [column_settings] 

table_name:表名

column_name:字段名

column_type:字段类型

column_settings:字段的设置

  • 字段定义
  1. Table buildings { 
  2.     ... 
  3.     address varchar(255) [uniquenot null, note: 'to include unit number'
  4.     id integer [ pk, uniquedefault: 123, note: 'Number' ] 

主键:primary key 或 pk

空/非空:null 或 not null

注释:note

唯一索引:unique

默认值:default

  • 索引定义
  1. Table bookings { 
  2.   id integer 
  3.   country varchar 
  4.   booking_date date 
  5.   created_at timestamp 
  6.  
  7.   indexes { 
  8.       (id, country) [pk] // composite primary key 
  9.       created_at [note: 'Date'
  10.       booking_date 
  11.       (country, booking_date) [unique
  12.       booking_date [type: hash] 
  13.       (`id*2`) 
  14.       (`id*3`,`getdate()`) 
  15.       (`id*3`,id) 
  16.   } 

主要分三种索引:

单字段索引、复合索引、表达式索引

  • 外键关系定义
  1. //Long form 
  2. Ref name_optional { 
  3.   table1.column1 < table2.column2 
  4.  
  5. //Short form: 
  6. Ref name_optional: table1.column1 < table2.column2 
  7.  
  8. // Inline form 
  9. Table posts { 
  10.     id integer 
  11.     user_id integer [ref: > users.id] 
  • 注释
  1. // Inline form 

使用双斜杠即可

  • 备注
  1. Table users { 
  2.   id int [pk] 
  3.   name varchar 
  4.  
  5.   Note: 'This is a note of this table' 
  6.   // or 
  7.   Note { 
  8.     'This is a note of this table' 
  9.   } 
  • 枚举
  1. enum job_status { 
  2.     created [note: 'Waiting to be processed'
  3.     running 
  4.     done 
  5.     failure 

DBML工具

通过DBML可以让表设计,通过纯文本的方式,很方便的描述。那么,如果仅仅是这样的,肯定不够吸引,我猜你还希望

  • DBML转成SQL语句
  • SQL语句转换成DBML
  • 可视化

当然了,这些DBML都给你提供了,先来看张图

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

这个是所见即所得,在线工具。

至于DBML与SQL的互相转化,DBML提供了基于node的命令工具dbml2sql、sql2dbml

总结

DBML是一个新型的数据库设计工具,当然有人喜欢,有人吐槽,当然希望你能够喜欢哈。软件设计随着时光的推进,很多新的理念被推出,作为程序员,当然是要不断的吸收和转化。

【编辑推荐】

  1. 2020年开源数据库行业状态报告
  2. 详解Oracle数据库LRU算法--LRU链、脏块与脏LRU链
  3. 从MySQL优化的角度来看:数据库回表与索引
  4. 11倍增长!支付宝自研数据库OceanBase再次刷新世界纪录
  5. 中国数据库告别卡脖子之忧:阿里OceanBase霸气卫冕全球第一
【责任编辑:庞桂玉 TEL:(010)68476606】

点赞 0
分享:
大家都在看
猜你喜欢

订阅专栏+更多

思科交换网络安全指南

思科交换网络安全指南

安全才能无忧
共5章 | 思科小牛

27人订阅学习

云计算从入门到上瘾

云计算从入门到上瘾

传统IT工程师的转型
共26章 | 51CTO阿森

210人订阅学习

从头解锁Python运维

从头解锁Python运维

多维度详解
共19章 | 叱诧少帅

347人订阅学习

视频课程+更多

VMware vSAN超融合基础架构设计

VMware vSAN超融合基础架构设计

讲师:王琦5455人学习过

强哥带你精通zabbix监控

强哥带你精通zabbix监控

讲师:周玉强30823人学习过

NVIDIA vGPU 图形虚拟化技术解析

NVIDIA vGPU 图形虚拟化技术解析

讲师:王琦819人学习过

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊

51CTO服务号

51CTO官微