快捷搜索:

用实体关系图进行数据库建模

一、概述

很可能你现在正在计整洁个数据库驱动的网站;而且险些可以肯定的是,你必然已经浏览过数据库驱动的网站。以前,一些网站依附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,这是两个数据建模对象的界面实例。你可以在这里创建和排列表,定义关系,以及指定其它信息(列的类型、长度,键等)。

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

要指定这些信息,一样平常你必要进入表的属性窗口,如图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 关系

假如我们只定义数据模式中的表,数据建模对象就不那么紧张了。各个表之间的关系、依附环境每每很繁杂,有一个治理和显示这些关系的对象将带来很大年夜的赞助。对付一个给定的关系,必须网络的紧张信息包括:

图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,看看自己是否可以相信和认可建模对象对数据模型的解释。一段光阴之后,你就会认识建模对象对各类关系和表细节的解释。

停止语数据建模是一种很好的软件工程实践。它能够赞助你在正式编写法度榜样代码之前筹划数据需求。在掩护和改进系统的数据结构的历程中,数据建模同样很有用。一些对象能够让这个历程变得异常简单,能够在你治理和设计数据库系统的时刻带来极大年夜的赞助。然而,根据你所需功能的不合,建模对象的价格也有着极大年夜的差异。在不呈现预算赤字的环境下,轻松掌握和运用数据建模技巧的最好措施是,从小型的对象开始,然后徐徐深入和前进。

您可能还会对下面的文章感兴趣: