设计数据库的步骤:
1。visio生成E-R图,涉及表名,表的主要字段,表和表的关系用箭头和菱形图关联和说明
2。powerdesigner生成CDM图。
3。powerdesigner生成PDM文件
4。书写sql脚本,生成实际的数据库和表
5。列出数据字典,可以拿excel做,第一页是表的总体介绍,分系列,表名规范化,以后每一个sheet都是这一系列表的字段等内容的表格。
/
PowerDesigner数据模型(CDM—PDM—SQL脚本的转换流程)
在开发的过程中会经常遇到 做一个模块功能,首先让你根据需要先画一个E-R图出来,
很多的朋友对 E-R图 都不是很熟悉,或者说有的朋友在开发的项目过程中,根本就没有用到E-R图,因为对于有些对E-R图不是很熟悉的朋友感觉画E-R图无从下手:
我个人根据一些资料整理了一下关于E-R图的 描述 及用法 示例:希望对,对E-R图并不是很熟悉的朋友有所帮助吧….
概念数据模型也称信息模型,它以实体-联系(Entity-RelationShip,简称E-R)理论为基础,并对这
一理论进行了扩充。它从用户的观点出发对信息进行建模,主要用于数据库的概念级设计。
通常人们先将现实世界抽象为概念世界,然后再将概念世界转为机器世界。换句话说,就是先将
现实世界中的客观对象抽象为实体(Entity)和联系(Relationship),它并不依赖于具体的计算机系统
或某个DBMS系统,这种模型就是我们所说的CDM;然后再将CDM转换为计算机上某个DBMS
所支持的数据模型,这样的模型就是物理数据模型,即PDM,
详细的关于E-R图 理论方面的描述,还请了解一些相关资料
以下是我个人对E-R图 的一个简单的用法整理,
如有不同意见,请提出….
(1).打开PowerDesigner file — new 弹出如下窗口
上图是 PowerDesigner CDM(概念数据模型—Conceptual Data Model)
(2).添加实体类:如下图
<1>.在CDM的图形窗口中,单击工具选项版上的Entity工具,再单击图形窗口的空白处,在单
击的位置就出现一个实体符号。点击Pointer工具或右击鼠标,释放Entitiy工具。如图所示
<2>.双击刚创建的实体符号,打开下列图标窗口,在此窗口“General”标签中可以输入实体的名
称、代码、描述等信息。
添加实体属性
1) 在上述窗口的“Attribute”选项标签上可以添加属性,如下图所示。
2)
添加Entity如下图:
实体属性为:
关于实体属于的具体配置信息,请查看关于这方面的入门资料,在这里我就不详细的说明了..
建立联系
联系(Relationship)是指实体集这间或实体集内部实例之间的连接。
实体之间可以通过联系来相互关联。与实体和实体集对应,联系也可以分为联系和联系集,联
系集是实体集之间的联系,联系是实体之间的联系,联系是具有方向性的。联系和联系集在含义
明确的情况之下均可称为联系。
按照实体类型中实例之间的数量对应关系,通常可将联系分为4类,即一对一(ONE TO ONE)
联系、一对多(ONE TO MANY)联系、多对一(MANY TO ONE)联系和多对多联系(MANY
TO MANY)。
在CDM工具选项板中除了公共的工具外,还包括如下图所示的其它对象产生工具。
在图形窗口中创建两个实体后,单击“实体间建立联系”工具,单击一个实体,在按下鼠标左键
的同时把光标拖至别一个实体上并释放鼠标左键,这样就在两个实体间创建了联系,右键单击图
形窗口,释放Relationship工具。如下图所示
建立关系图标 |
在两个实体间建立了联系后,双击联系线,打开联系特性窗口,如图所示。
“员工”与“联系方式”两个实体之间的联系是一对多联系,换句话说“联系方式”和“员工”之间的联系是多对一联
系。而且一个联系方式必须属于一个员工,并且只能属于一个员工,不能属于零个员工,所以从“联系方式”实体
至“员工”实体的基数为“1,1”,从联系的另一方向考虑,一个员工可以拥有多个联系方式,也可以没有任何联系方式,即零个联系方式,所以该方向联系的基数就为“0,n”,如图所示
在两个实体间建立了联系后,双击联系线,打开联系特性窗口,如图所示。
“员工”与“联系方式”两个实体之间的联系是一对多联系,换句话说“联系方式”和“员工”之间的联系是多对一联
系。而且一个联系方式必须属于一个员工,并且只能属于一个员工,不能属于零个员工,所以从“联系方式”实体
至“员工”实体的基数为“1,1”,从联系的另一方向考虑,一个员工可以拥有多个联系方式,也可以没有任何联系方式,即零个联系方式,所以该方向联系的基数就为“0,n”,如图所示
到此:CMD已经建成;
下面说明如何生成:PDM à 点击: Tools à Generate Physical Data Model 如下图:
或者:按Ctrl+G 键
弹出下图窗口:
生成如下图PDM
然后点击Ctrl+G 键,生成sql脚本。
//
一、概念数据模型概述 Name:是用来在模型中标识一个实体,一般用于模型在界面中的显示(这个可以通过更改选项设置进行改变)。在一个模型当中,实体的名字不能重复。 Code:在模型转化时一般作为对象的物理名称,比如把实体属性的Code转化为数据库中的列名,当然我们现在不必为了这个实体将来叫什么而费神,一般采取与Name一致即可。 Generate:默认是选择状态,如果取消,则在转化为其他模型时,会忽略这个实体。 2、添加实体属性1)在上述窗口的“Attribute”选项标签上可以添加属性,如下图所示。 注意: 数据项中的“添加属性”和“重用已有数据项”这两项功能与模型中Data Item的Unique code 和Allow reuse选项有关。 P列表示该属性是否为主标识符;D列表示该属性是否在图形窗口中显示;M列表示该属性是否为强制的,即该列是否为空值。 如果一个实体属性为强制的,那么, 这个属性在每条记录中都必须被赋值,不能为空。 按“Crtl+U”呼出“定制列过滤器”的窗口,可以根据自己的喜好和实际需要选择那些列出现在窗口中,那些隐藏。使用快捷键 “Crtl+E”可以允许或者禁止当前过滤器。 2)在上图所示窗口中,点击插入属性按钮,弹出属性对话框,如下图所示。 1)定义属性的标准检查 标准检查约束 是一组确保属性有效的表达式。在实体属性的特性窗口,打开如图所示的检查选项卡。 在这个选项卡可以定义属性的标准检查约束,窗口中每项的参数的含义,如下
2)定义属性的附加检查 当Standard checks 或Rules 不能满足检查的要求时,可以在Additional Checks选项卡的Server子页上,通过SQL语句中使用%MINMAX%、%LISTVAL%、%RULES%、%UPPER%、%LOWER% 几个变量来定义Standard和Rule,如图所示 %MINMAX%、%LISTVAL%、%UPPER%、%LOWER% 在Standard Check中定义的Minimum 和Maximum、List values 、uppervalues、lowervalues %RULES% 在Rules特性窗口Expression选项卡中定义的有效性规则表达式 六、标识符 标识符是实体中一个或多个属性的集合,可用来唯一标识实体中的一个实例。要强调的是,CDM中的标识符等价于PDM中的主键或候选键。每个实体都必须至少有一个标识符。如果实体只有一个标识符,则它为实体的主标识符。如果实体有多个标识符,则其中一个被指定为主标识符,其余的标识符就是次标识符了。 1、定义主、次标识符 1)选择某个实体双击弹出实体的属性对话框。在Identifiers选项卡上可以进行实体标识符的定义。如下图所示 2)选择第一行“主标识符”,点击属性按钮或双击第一行“主标识符”,弹出属性对话框,如图所示 3)选择"Attributes"选项卡,再点击“Add Attributes”工具,弹出如图所示窗口,选择某个属性作为标识符就行了。 七、数据项 数据项(Data Item)是信息存储的最小单位,它可以附加在实体上作为实体的属性。 注意:模型中允许存在没有附加至任何实体上的数据项。 1、新建数据项 1)使用“Model”---> Data Items 菜单,在打开的窗口中显示已有的数据项的列表,点击 “Add a Row”按钮,创建一个新数据项,如图所示 2)当然您可以继续设置具体数据项的Code、DataType、Length等等信息。这里就不再详细说明了。 2、数据项的唯一性代码选项和重用选项 使用Tools--->Model Options->Model Settings。在Data Item组框中定义数据项的唯一性代码选项(Unique Code)与重用选项(Allow Reuse)。 注意: 如果选择Unique Code复选框 ,每个数据项在同一个命名空间有唯一的代码,而选择Allow reuse ,一个数据项可以充当多个实体的属性。 3、在实体中添加数据项 1)双击一个实体符号,打开该实体的属性窗口。 2)单击Attributes选项卡,打开如下图所示窗口 注意: Add a DataItem 与 Reuse a DataItem的区别在于 Add a DataItem 情况下,选择一个已经存在的数据项,系统会自动复制所选择的数据项。如果您设置了UniqueCode选项,那系统在复制过程中,新数据项的Code会自动生成一个唯一的号码,否则与所选择的数据项完全一致。 Reuse a DataItem情况下,只引用不新增,就是引用那些已经存在的数据项,作为新实体的数据项。 八、 联系 联系(Relationship)是指实体集这间或实体集内部实例之间的连接。 实体之间可以通过联系来相互关联。与实体和实体集对应,联系也可以分为联系和联系集,联系集是实体集之间的联系,联系是实体之间的联系,联系是具有方向性的。联系和联系集在含义明确的情况之下均可称为联系。 按照实体类型中实例之间的数量对应关系,通常可将联系分为4类,即一对一(ONE TO ONE)联系、一对多(ONE TO MANY)联系、多对一(MANY TO ONE)联系和多对多联系(MANY TO MANY)。 1、 建立联系
在两个实体间建立了联系后,双击联系线,打开联系特性窗口,如图所示。 2、 四种基本的联系 递归联系: General 项目 一般最好为关系取一个贴切的名字,本例的业务关系描述如下:一个部门有多个员工,我们使用“Has”作为这个关系的名字。 同样的我们也可以描述为:多个员工属于一个部门,可不可以使用“Belong to”作为关系名字呢?一般不推荐这样做,在概念图中有一个约定,关系的名字采用从“1,n”中“1”所在的方向向“n”所在一方进行读取的语义。本例即 “1”在部门一方,从部门一方向雇员一方读取语义,即:部门有(Has)多个员工。 Detail 项目假定对于实体部门(Department)和雇员(Employee),具有如下关系: 一个部门可以有多个雇员,新成立的部门也可以暂时没有任何雇员;一个雇员必须属于一个部门,并且同时只能属于一个部门;根据以上关系,我们修改属性页,部门-雇员的方向采用默认的0,n,雇员-部门的方向修改为强制约束(Mandatory),或者从下拉框中选择“1,1”,如下图: 最后定义完成的关系(Relationship)在概念图中表示如下: 注:在Power Designer中,关系符号靠近实体端的一个“横线”代表强制性约束,“空心圆圈”代表无强制约束,即这一方可以无对象关联;“非分岔”线代表为“1” 的关系,“分岔”线代表“多”的关系。以上四个符号共可以组合出16种关系(包含反向)。其中“多对多”的关系一般通过给出一个中间实体来进行分解,所以在许多概念图中,是看不到实际的“多对多”的关系存在的。 另外在关系的属性中还有两项:Dominant role 和Dependent,可以表示更复杂的关系,会在后面讲到。 使用依赖关系(Dependent)还是使用上面的例子,我们假定这样的业务描述:雇员享有假期,雇员每次休假,需要记录雇员休假的起始日与结束日,假期以天为单位,一个雇员和一个开始日唯一确定一个假期。根据这个业务描述,我们知道,对于假期而言,其必须依存于实体“Employee”而存在,即一个休假,必定有一个主体雇员。我们在上一个模型的基础之上,添加一个实体,名称是“Holiday”,定义假期的属性开始日与结束日,这里并不需要重复定义一个雇员编号,而是替代的,使用依赖关系,来表示实体“Holiday”依赖于实体“Employee”,关系定义如下图: 在实体“Holiday”中,我们需要设置开始日为主键标识符,开始日与其依赖实体中的雇员编号一起作为实体“Holiday”的标识符,用来唯一确定一个假期。这种依赖关系在概念图中表现如下: 从途中可以看出,在实体“Holiday”一端多了一个朝外的三角▲箭头,这个含义就是这个实体“的依赖于三角箭头所指的另外一个实体,在转化出来的物理模型当中,实体“Employee”的empNo,在Holiday实体中不仅会作为一个外键,还同时会作为主键出现(与startData一起作为复合主键)。 使用Dominant role 当两个实体之间的关系是1..1 时(尽管这种关系比较少见,常见于面向对象的设计方法当中,依赖实体中的主键通常与外健重合),你需要明确指定这两个实体,哪一个是父实体,哪一个是依赖实体,否则,系统在由概念模型转化为物理模型时,将不能确定需要在哪一端生成外键,这时就需要用到“Dominant role”选项,这个选项只有在1..1 的关系中才允许进行设置。我们假定这样的业务描述,企业中的部分雇员拥有一个系统帐号,并且是唯一的一个帐号,这些雇员需要保存一些额外的信息,比如帐号名称、密码等等。我们添加了一个新的实体“User”,其与雇员之间为1..1 的关系,由于一个用户帐号必定属于一个雇员,而一个雇员则可能没有用户帐号,所以我们定义实体“Employee”支配实体“User”。同时,由于 “User”依赖于“Employee”而存在,所以再定义一个由前者到后者的依赖关系,如下图:
Dominant role 选项中,箭头所指的实体为被支配的实体,即作为依赖实体。在模型图中,支配实体的一方会出现一个用圆括号括起来的大写字母“D”。
转化出来的物理模型中,表User中,empNo作为单独的主键,同时也是引用Employee表的一个外键。 处理多对多(n..n)的关系在概念模型中,一般很少看见两个实体之间是直接的n..n 的关系,一般这种情况下我们会增加一个中间实体,在Power Designer中,提供了一个专门的符号来对应,叫做“Association”。请考虑以下的情形: 企业中拥有帐号的雇员在系统中具有不同的操作权限,这通过用户角色来进行管理,权限已经分配给了多个不同的角色,一个用户帐号至少属于一个角色,并且可能会同时属于多个角色,一个角色可以包含0个或多个用户帐号。根据以上描述,我们添加一个实体“Role”,它与实体“User”之间是n..n 的关系,为了表达这种关系,我们增加一个“Association”并分别使用“Association Link”与其他两个实体建立关系,表示如下: 使用一个普通的实体,合理定义关系,并选择“Dependent”选项,是可以替代“Association”的,但使用 “Association”更方便、直观,使模型更容易理解,并可以减少因不谨慎而可能导致的错误。 |
联系方式表:Fk 外键关系是由于 建立关系以后,自动生成的
生成sql 脚本:Ctrl +G键
总结:CDMàCtrl+G = PDMàCtrl+G = SQL脚本
如果要生成 OOM --> 点击工具-->Generage Object-Oriented Model