一、概述

很可能你现在正在规划一个数据库驱动的网站;而且几乎可以肯定的是,你一定已经浏览过数据库驱动的网站。过去,一些网站依赖CGI脚本和文本文件存储实现数据持久化,但现在我们能够访问大量不同的关系型、对象-关系型、面向对象型数据库。

对于Web应用来说,关系数据库是一种强大的支持工具,这得感谢它们的高可用性、性能,而且相对来说,关系数据库比较容易使用。要找出一个功能完善、源代码开放、能够在多种平台上运行的数据库系统并不困难。你可以用Perl、Java、PHP以及其他服务器端脚本语言把关系数据库和Web网站连结到一起。

随着网站规模的发展,它对数据库——通常是关系数据库——的依赖程度也日益增加。大量页面和服务需要向数据库表写入信息,或者从数据库提取信息。对于大多数网站,数据库表很快成为网站体系结构中的关键部分,成为网站运作的生命中枢。为了方便和轻松地管理大容量数据,用户帐户、新闻动态、内容、统计数据都可以保存到关系数据库管理系统(Relational Database Management System,RDBMS)。

用图(Diagram)管理数据模型具有高效、方便的优点。对于RDBMS,描述数据模型的图通常称为实体关系图(Entity Relationship Diagram,ERD)。用ERD描述数据模型能够帮助你预先精确定义数据需求,使你能够对以后的改动作出有效的规划,能够随着网站的发展方便地改进规划。

本文将介绍ERD建模工具和概念。文章提供了一些图的实例,但它们的目的不是提供精确的或者是全面的数据设计范例。它们的目的是以两个建模工具为例,介绍数据建模符号。在不同的工具之间,图的符号有着重大的差别,但它们的基本概念一样。本文的图例从PowerDesigner和Visio 2000 Professional的试用版得到,你可以从本文末尾找到这些工具和其他类似产品的链接。

二、是否使用建模工具?

许多规模较小的网站用ASCII形式的SQL(Structured Query Language)脚本文件进行数据建模。当开发小组人员较少,或者最理想的情况下仅由一个人构成时,这种方法最有效。然而,数据模型将很快发展成为一个复杂的结构——在这种情况下,CASE(Computer Aided Software Engineering,计算机辅助软件设计)工具、有关所有数据信息的图、集中式知识库能够极大地帮助你管理Web网站的数据层。

2.1 何时使用SQL?

即使当你准备用SQL直接管理数据模式(物理数据库)时,图也能有效地帮助你理解和改进系统。然而,如果你的预算或者时间非常有限,采用复杂的新式建模工具可能得不偿失。相反,在这种情况下,你应该使用一个简单的图形工具把数据模式的基本情况记录下来,然后逐步转换到复杂的数据建模工具。

如果你正在设计的数据库类型不常见(或者是非标准的),避免使用某些复杂CASE工具可能是明智的,因为这些工具的“反向工程”能力和某些自动功能可能无法在你的环境下发挥作用。这里所谓的自动功能,是指建模工具根据输入模型的图形和属性信息,自动为目标数据库生成合适SQL命令的能力。反向工程是这样一种能力,建模工具根据已经部署的物理数据模式,从现有的表提取出实体和关系信息。

2.2 转入建模工具

从简单绘图工具转换到数据建模工具并不是一个很复杂的过程。大多数数据建模工具的工作方式就象是一个标准的绘图工具,参见图1a和图1b,这是两个数据建模工具的界面实例。你可以在这里创建和排列表,定义关系,以及指定其它信息(列的类型、长度,键等)。

图1a:PowerDesigner的界面

图1b:Visio的界面

转向数据建模工具的主要挑战在于:

学习使用建模符号。

在不丢失任何关键信息的前提下,用数据建模工具描述现有数据模型。

寻找一个对你的数据库提供全面支持的工具,例如在生成SQL、从现有数据模式通过反向工程建立数据模型时。

一些入门级数据建模工具(参见本文后面的参考资源)只有少量的高级特性。这有好处,但也有弊端——它们很容易学习使用,但当你积累了更多的经验时,它们可能不再满足你日益增长的需要。然而,升级工具或更换工具一般不存在大的问题,特别是当新的工具能够对现有数据模式进行精确、完整的反向工程时,升级或更换工具的过程尤其简单。

三、ERD建模符号

本文使用Martin的Information Engineering符号。PowerDesigner采用的就是这种符号,Oracle的Designer产品所使用的符号也和它很相似。你可以在AIS Modeling Summary查看各种ERD符号的说明。基本的ERD绘图规范很直观易懂。你可以定义实体(表),描述各个实体之间的关系。在填写表和关系的细节信息时,每一种工具的做法都有所不同;但就我所遇到的工具来看,基本概念在大多数软件包之间是相通的。接下来的内容将介绍你必须了解的主要图形元素和设置方法。

3.1 表

所有构造合理的数据建模工具都允许为表指定丰富的关联信息。这些信息包括(但不局限于):

表的描述、注解,以及实体(表)的标题。

列,列的类型、长度、默认值和强制条件。

主键,索引,唯一性约束。

要指定这些信息,一般你需要进入表的属性窗口,如图2a和图2b所示。

2a:PowerDesigner中表的属性窗口

图2b:Visio中表的属性窗口

一旦输入了新表的属性信息,图将被更新,显示出你所提供的新的或更改后的表信息。下面的图形显示了一个表的实例,这个表的属性信息见图2a和图2b。在图2a和图2b中,许多列被定义成了(m)andatory(强制的)、(p)rimary(主键)和(d)isplayed(被显示的)列。下面的图显示了为该表输入的部分属性信息。

图3a:PowerDesigner的表

图3b:Visio的表

在图3a中可以看到一些非标准的数据类型,如PHONENUMBER和PK。许多数据建模工具允许定义域或定制数据类型,它们可供一个以上的列使用。域不仅代表着数据类型——通常,它们还包含检查约束、默认值、值列表等信息。如果你想要更新一个域(例如定义一种新的电话号码格式),所有该模型中引用该域的列都将自动更新。

3.2 关系

如果我们只定义数据模式中的表,数据建模工具就不那么重要了。各个表之间的关系、依赖情况往往很复杂,有一个管理和显示这些关系的工具将带来很大的帮助。对于一个给定的关系,必须收集的重要信息包括:

父表和子表。

两个表之间的强制关系。例如,父表可能有一个子表,但子表必须有一个父表。

关系基数(Cardinality)。即,一个父表可以有零个或者多个子表,但一个子表有且只能有一个父表。

关于关系的注释、意见和角色说明。

大多数建模工具通过在两个或者更多表之间画出连线的方式定义关系。默认情况下,关系往往被定义成为一对多关系,而且它对于关系中的任何一方都是可选的。要修改关系,你必须打开关系的属性窗口,更新实体关系的特征信息。图4a和图4b显示了两个不同的工具允许为关系定义的部分属性:

图4a:PowerDesigner的关系属性设置界面

图4b:Visio的关系属性设置界面

该图显示了一个一对多关系——一个典型的父-子关联关系。部门(Branch)和雇员(Emplyee)的关系是强制的。它意味着一个部门必须至少有一个雇员(1-N强制关系);另一方面,它意味着一个雇员必须属于且只能属于一个部门(1-1强制关系)。图5a和图5b反映了修改后的关系。

图5a:PowerDesigner中两个表之间的关系

图5b:Visio中两个表之间的关系

这个图显示了如何把信息转换成符号。强制的关系由一条实心垂直线(而不是椭圆)表示。某些工具用虚线表示可选的关系。关系中属于“多”的这一边用一个类似鸟爪的图形表示,关系的基数在靠近它所描述的那一端显示。

你可能已经注意到,Employee表没有定义外键列。这个图仍旧处于“概念设计”阶段——此后,从概念图到物理数据模型之间的转换是必不可少的。大多数工具区分概念和物理数据模型——概念数据模型描述信息的需求,但不关注细节问题,例如索引和强制性的引用完整性。

有些时候,你可能要定义自我引用的表。自我引用的表一般用来描述层次型关系。如下面的图形所示,大多数数据建模工具能够处理这类关系。注意在这个例子中,雇员可以有零个或者一个上级——它使你能够处理一些特殊的情况,比如总统没有直接的上级。

图6a:PowerDesigner中自我引用的表

图6b:Visio中自我引用的表

四、图的规划

定义表和关系只是挑战的一部分,图的清楚明白同样很重要。虽然一些工具提供自动布局能力,我还没有看到过一个完善的实现。相反,你的目标应该是遵从“孔雀东南飞”这一规则(这里的“孔雀”是关系中代表“多”这一方的符号,它是连接到表的三条分叉线,象个鸟爪)。换句话说,子表应该位于父表的右方和下方。这种安排使得从逻辑上组织和理解数据模型更加方便。最重要、最高级别的表应该出现在左上角,让级别较低的表出现在页面的右下角。为了清楚起见,减少图中交叉线的数量也是很重要的。正如Eberhardt Rechtin在The Art of Systems Architecting中强调的,“一个好的设计往往看起来很舒服”。如果无论怎样安排,你的数据模型看起来都很混乱,那么,它可能正在告诉你数据模型本身有一些值得注意的问题。

图7a:完整的ER图(PowerDesigner)

图7b:完整的ER图(Visio)

五、从图到数据库

依赖于你所选择的用来建立数据模型的软件包,建模工具可能会根据模型生成SQL命令或直接修改数据库模式。这种功能带来了极大的便利;和使用ASCII格式的SQL脚本相比,这种方式有着许多优点。一些建模工具的功能适合于大量的数据库类型,例如PostgreSQL、MySQL、Oracle、DB2,等等。对于简单的数据库修改,改动操作可以从建模工具通过ODBC直接完成。数据库改动还允许以增量方式进行(例如,ALTER命令或创建命令,以及对特定表的更新命令)。当你第一次使用建模工具时,你可以查看建模工具生成的SQL,看看自己是否可以信任和认可建模工具对数据模型的解释。一段时间之后,你就会熟悉建模工具对各种关系和表细节的解释。

【结束语】数据建模是一种很好的软件工程实践。它能够帮助你在正式编写程序代码之前规划数据需求。在维护和改进系统的数据布局的过程中,数据建模同样很有用。一些工具能够让这个过程变得非常简单,能够在你管理和设计数据库系统的时候带来极大的帮助。然而,根据你所需功能的不同,建模工具的价格也有着极大的差异。在不出现预算赤字的情况下,轻松掌握和运用数据建模技术的最好方法是,从小型的工具开始,然后逐渐深入和提高。

mysql er图 linux_ER图设计相关推荐

  1. Bootstrap4+MySQL前后端综合实训-Day04-AM【新闻管理手机端页面+数据库操作(PowerDesigner 图形化数据库设计软件、SQLyog软件)】

    [Bootstrap4前端框架+MySQL数据库]前后端综合实训[10天课程 博客汇总表 详细笔记] 目   录 W3C标准盒子模型和IE盒子模型的区别 Bootstrap4--新闻管理手机端页面 菜 ...

  2. 《校园二手商品交易平台设计与实现》用例、流程、结构、ER、ERD图等

    用例图.流程图.结构图采用WPS画的,ER图是用的亿图APP,ERD图是mysql自动生成的. 用户与管理员端用例图 用户与管理员端流程.结构图 数据库ER.ERD图

  3. java 网格布局管理器,Java图形化界面设计——布局管理器之GridLayout(网格布局)...

    网格布局特点: l  使容器中的各组件呈M行×N列的网格状分布. l  网格每列宽度相同,等于容器的宽度除以网格的列数. l  网格每行高度相同,等于容器的高度除以网格的行数. l  各组件的排列方式 ...

  4. Java图形化界面设计——容器(JFrame)

    Java图形化界面设计--容器(JFrame) 程序是为了方便用户使用的,因此实现图形化界面的程序编写是所有编程语言发展的必然趋势,在命令提示符下运行的程序可以让我们了解java程序的基本知识体系结构 ...

  5. android 系统的切图方式_UI设计切图规范

    移动UI设计切图是UI设计师最重要的设计输出物,切图资源输出是否规范直接影响到工程师对设计效果的还原度.设计师的切图输出物是是体现一个设计师专业水准的重要标准,同时也是设计师表达自己对设计态度的最有力 ...

  6. 用计算机绘制函数图象教案,信息技术应用 用计算机画函数图象教学设计(教案)...

    庞丹 地区: 四川省 - 广元市 - 昭化区 学校:广元民盟烛光初级中学 共1课时 信息技术应用 用计算机画函数图象">信息技术应用 用计算机- 初中数学       人教2011课标 ...

  7. 零基础学Python【二十三、图形化界面设计 】(基础一篇全,欢迎认领)

    1.图形化界面设计的基本理解 当前流行的计算机桌面应用程序大多数为图形化用户界面(Graphic User Interface,GUI). 即通过鼠标对菜单.按钮等图形化元素触发指令,并从标签.对话框 ...

  8. 计算机函数公式一等奖怎么算,信息技术应用 用计算机画函数图象教案设计(一等奖)...

    卫鹏展 地区: 湖北省 - 黄冈市 - 英山县 学校:英山县金铺镇金铺中学 共1课时 信息技术应用 用计算机画函数图象">信息技术应用 用计算机画- 初中数学       人教2011 ...

  9. 用计算机画有常数的函数图像,信息技术应用 用计算机画函数图象教学设计及教案分析...

    刘旭平 地区: 山西省 - 吕梁市 - 兴县 学校:兴县红旗中学 共1课时 信息技术应用 用计算机画函数图象">信息技术应用 用计算机画- 初中数学       人教2011课标版 1 ...

  10. 九张 Gif 图回顾 Web 设计的 25 年历史

    原文出处: fastcodesign   译文出处:码农网 – 小峰 Froont,一家为web设计师制作工具的旧金山公司,用9个GIF格式动画来表现网页设计在过去25年的发展历程.如果你想知道为什么 ...

最新文章

  1. 查看文件命令cat,more,less,tail,tac,nl,od---linux学习笔记
  2. html掷骰子小游戏,网页实现掷骰子小游戏
  3. 查看端口被占用,被结束此端口占用
  4. Pinnacle Studio Ultimate中文版
  5. 精品教程---Android应用程序框架
  6. php密码安全检测,php – 密码安全随机字符串函数
  7. 解决VMware在Windows 7上无法上网的问题
  8. 14寸笔记本电脑_华为笔记本电脑该如何选择?横向对比华为三款14寸笔记本
  9. 怎么看软件的编写代码
  10. string 操作 java_Java中String类的一些常见问题
  11. SpringSecurity+SpringSocial 实现QQ登入(一)
  12. Rails PayPal 支付对接
  13. lg-1 x 怎么算_纯爱|电竞新文《队友太会撒娇了怎么办》《转会后我成了团宠》...
  14. Maven配置错误: The JAVA_HOME environment variable is not defined correctly
  15. 征途LINUX服务端脚本技术,腾讯征途手游脚本 辅助基本语法
  16. 安卓android按宽/高缩放图片到指定大小并进行裁剪得到中间部分图片
  17. mysql查询优化-查询缓存
  18. linux raid5模拟数据丢失,Linux服务器右异步RAID-5数据恢复实例分析
  19. js 判断两个时间相差多少月_js对日期操作 获取两个日期的相差是否在几月之内...
  20. 如何学好C语言,一个成功人士的心得!

热门文章

  1. Unity3D笔记 英保通三 脚本编写 、物体间通信
  2. Docker在centos下安装以及常见错误解决
  3. 【BZOJ4325】NOIP2015 斗地主 搜索+剪枝
  4. Mac 实用工具bash-comletion介绍安装
  5. ubuntu 下 4412烧写SuperBoot
  6. 【转载】svn代码回滚命令
  7. ▲▲▲▲▲▲▲▲▲▲▲yum源的配置(本地和ftp)▲▲▲▲▲▲▲▲▲▲▲▲▲v...
  8. ReentrantLock梳理和总结
  9. 在linux服务器上安装jdk
  10. mybatis批量插入和批量更新