一、创建逻辑模型
1、打开ER/Studio后,选择:File>New,打开如下界面,选择Draw a new data model。
如上图:1表示新创建数据模型,2表示逆向数据库中已存在的模型,3表示导入erx文件或sql脚本生成数据模型。
2、空白处点击右键,选择insert Entity,如下图就完成实体表的添加。
3、在实体表上点击右键,选择Edit Entity,编辑实体表。
4、点击下图椭圆处展开,按下图红框处填写表实体的相应的属性值。
5、创建关联关系
如上图红框处,ER/Studio提供5种逻辑关联关系,我们经常会用到的是第二种和第三种,如上图从左到右分别为:
(1)Identifying Relationship
1对多,父实体的主键是子实体的外键,且该外键为子实体的主键。 也就是说需要提供外键给另外一张表作联合主键。
(2)non-Identifying,mandatory relationship
1对多,父实体的主键是子实体的外键,且外键不为空(强制外键) 。
(3)non-Identifying,optional relationship
1对多,父实体的主键是子实体的外键,且外键可为空(可选外键)。
(4)one-to-to relationship
1对1,父实体的主键是子实体的外键,且外键可为空。
(5)Non-specific Relationship
多对多,父实体和子实体是多对多的关系。 (多对多的关系建议引入中间表)
6、下图为实体创建第三种关系non-Identifying,optional relationship。
二、生成SQL脚本
1、首先生成物理模型,才能生成SQL脚本,如下图:选择Model>Generate Physical Model
2、这里目标数据库选择PostgreSQl 8.0,当然你也可以选择Mysql、Oracle、DB2、Sql Server等数据库平台,以便生成对应的SQL脚本。
3、如下图,选中生成的物理模型,然后选择:Database>Generate Database
4、按照下图操作,最后点击finish即完成sql脚本的生成。(按下图操作生成表注释、字段注释)
5、生成最终脚本如下图。
三、常用其他操作
至此,你已经学会使用ER/Studio设计数据库模型了。如果继续往下看,你花费的时间将超过5分钟。
1、Domains的使用
Domains是用于建立标准,重用属性/列时使用。我们在设计数据库时往往会需要定义几个标准字段,例如主键ID,创建时间,如果将他们创建为Domains,那么无论在哪里绑定都会是统一的类型、规则、约束等。这既便于统一标准也便于进行修改。
1、如下图,左下角切换至Data Dictionary,然后Domains上右键,选择New Domains
2、按下图填写对应的属性信息。
3、在实体表中进行绑定
2、生成数据库设计文档
1、如下图,选择Tools>Generate Reports
2、按照下图进行操作。
3、生成word文档如下
3、使用宏把Attribute name复制到Definition
1、把以下代码保存为 NameToDefinition.bas文件放到ER/Studio安装目录下的Macros的文件夹下,ER/Studio就可以自动加载到Macros选项卡中。默认目录为:
Dim EntCount As Integer
Dim ColCount As Integer
Dim MyDiagram As Diagram
Dim MyModel As Model
Dim MyEntity As Entity
Dim ColArray() As String
Function getColumns(TableName As String )
Dim Indx As Integer
Dim count As Integer
count = 1
Indx = 0
Set MyEntity = MyModel.Entities.Item(TableName)
ColCount = MyEntity.Attributes.Count
ReDim ColArray(0 To ColCount) As String
For count=1 To ColCount
For Each MyAttribute In MyEntity.Attributes
If MyAttribute.SequenceNumber = count Then
If MyModel.Logical = True Then
If MyAttribute.HasLogicalRoleName = True Then
ColArray(Indx) = MyAttribute.LogicalRoleName
Else
ColArray(Indx) = MyAttribute.AttributeName
End If
Else
If MyAttribute.HasRoleName = True Then
ColArray(Indx) = MyAttribute.RoleName
Else
ColArray(Indx) = MyAttribute.ColumnName
End If
End If
If MyAttribute.Definition="" Then
MyAttribute.Definition = ColArray(Indx)
End If
Indx= Indx +1
End If
Next MyAttribute
Next count
End Function
Sub Main
Debug.Clear
Set MyDiagram = DiagramManager.ActiveDiagram
Set MyModel = MyDiagram.ActiveModel
Dim Indx As Integer
Indx = 0
EntCount = MyModel.Entities.Count - 1
ReDim TableArray(0 To EntCount) As String
For Each MyEntity In MyModel.Entities
If MyModel.Logical = True Then
TableArray(Indx) = MyEntity.EntityName
Else
TableArray(Indx) = MyEntity.TableName
End If
MyEntity.Definition = TableArray(Indx)
getColumns(TableArray(Indx))
Indx = Indx +1
Next MyEntity
End Sub
2、打开ER/Studio如下图,可以看到 Macro Shortcuts>NameToDefinition
总结
判别一个关系是Non-Identifying还是Identifying只要区分子实体的主键,看是否需要父实体的外键来共同作为主键,需要则为Identifying,如果子实体自己的主键就可唯一标识则它为Non-Identifying。