PowerDesigner物理数据模型
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
PowerDesigner物理数据模型
在设计好数据库的逻辑结构之后,就需要完成其物理设计。
物理数据模型(physical data model,PDM) 就是以数据库管理系统(DBMS) 理论为基础,根据CDM建立的现实世界模型生成相应的DBMS的SQL语言脚本。
利用该SQL脚本在数据库中产生现实世界信息的存储结构(例如表、约束等) ,并保证数据在数据库中的完整性和一致性。
图4-62描述了PDM与DBMS的关系。
图4-62 PDM与DBMS的关系
PDM以PowerDesigner为各种数据库提供的数据定义文件(扩展名为.xdb) 作为语法模板来生成SQL语言脚本。
由PDM生成SQL脚本,再通过SQL脚本在数据库中建立相应的数据存储结构,称为正向工程;反之,如果通过数据库中已经存在的数据存储结构来导出对应的PDM,则称为逆向工程。
PDM中涉及到一些基本概念,包括:表、列、视图、主键、候选键、外部键;存储过程、触发器;索引、完整性检查约束等内容。
1. 表、列、视图、主键、候选键、外部键
我们先来介绍表、列、视图、主键、候选键和外部键等概念。
1) 表(table) :是数据库中用来保存信息的一种数据结构。
在PDM中,建立表的过程,就是产生建表的SQL语句的过程。
PDM的表可以由CDM的实体转换生成。
2) 列(column) :是组成表的基本单元,一个表由多个列组成,每个列都有一个数据类型。
CDM的实体属性通过模型内部生成,可以转换成PDM表的列。
3) 视图(view) :是从一个或多个基本表或其他视图中导出的表,可以把它形象地看做是一个活动窗口,在数据库中通过它可以看到自己感兴趣的内容。
但是视图和基本表不同,它是一个虚表,即其对应的数据并不独立地存放在数据库中,存储的只是视图的定义。
正因为如此,虽然视图创建后类似于基本表,可以被查询、删除或用来定义新的视图,但通过它修改数据却有很多限制。
4) 主键(primary key) :是用来唯一标识表中一条记录的一个或多个列的集合,它可以由CDM的主标识符转换产生,也是CREM TABLE语句的重要组成部分。
5) 候选键(alternate key) :也是用来唯一标识表中一条记录的一个或多个列的集合,它与主键具有同样的作用,它可以由CDM的次标识符转换产生。
6) 外键(foreign key) :是与其他表连接的公共列,这个列通常是其他表的主键。
2. 存储过程和触发器
存储过程是由SQL语句和控制流语句构成的集合。
存储过程的建立大大提高了SQL的效率和灵活性,具体表现在:
1) 存储过程与原始SQL语句的最大区别在于它是预编译好的。
当第一次运行一个过程时,数据库服务器的查询处理器对它进行分析,并准备好一个执行计划,最后把这个计划存储在系统表中,以后过程的每次执行都可以依据这个计划。
由于大部分查询处理工作已经做好,不需要再花费时间进行编译,因此存储过程的执行速度快。
2) 在客户/服务器(C/S) 环境下,存储过程经过编译和优化后,存储在服务器端,这样,在网络上传输的只是一个远程调用和最终的执行结果,而不是一系列的SQL语句和返回结果,从而大大减少了网络上的传输量,提高了整个系统的性能。
3) 如果本地和远程数据库服务器都允许远程登录,那么本地就可以执行其他数据库服务器上的存储过程。
4) 存储过程简化了安全机制,它可以简化对某些操作的授权。
例如,假设一个用户不希望别人在他的表上使用SELECT语句,他可以写一个仅查询这个表某些行或列的存储过程,然后将调用该存储过程的权限授给特定的用户,这样其他用户就可以通过该存储过程访问他的表。
5) 存储过程把用户和应用程序与数据源、网络和存取路径细节隔离开来,使得非专业人员对数据库服务器上的数据访问变得更加方便。
例如,数据库管理员可以预先定义一些包括复杂数据查询和操作的存储过程,一般用户无须了解数据存储细节,不必了解存储过程,甚至可以不懂SQL语句,通过简单的远程过程调用就能完成特定的任务,这无疑大大简化了应用开发的过程,提高了应用开发的效率。
触发器(trigger) 是一种特殊的存储过程,它在某个表的数据被添加、删除或更改时发挥作用。
触发器通过维护不同表中逻辑上相关数据的一致性,来维护数据的完整性,包括参照完整性。
触发器的—个主要优点在于,当数据被修改时它自动地进行工作。
它可以针对一个或多个UPDATE、INSERT、DELT等修改操作,在数据修改语句完成后立即执行,对每个SQL语句执行一次。
触发器和引发它的语句被看做是一个事务,事务能够在触发器中被回滚(ROLLBACK) 。
触发器的主要用途是:
1) 能够对数据库多个有关表的内容进行级联修改,即删除父表中的某些记录时,可以将子表中相应的记录删除。
当违反参照完整性时,触发器能撤回试图进行数据修改的事务。
2) 触发器能够实施比规则复杂得多的限制。
3) 触发器还能比较数据修改前后某表的状态,并采取相应行动。
3. 默认与规则
当用户没有为某一列赋值时,数据库服务器为该列自动插入的值即为默认(default) 值。
规则(rule) 就是在数据库的管理中指定允许或不允许哪些值插入某些列。
默认和规则共同帮助系统维护数据的完整性,可以与列和用户定义的数据类型联系在一起。
规则和默认同样可由有效性业务规则来完成,但是有效性业务规则只适用于特定的表,而无法将其与其他的表或用户定义的数据类型联系起来。
4. 完整性检查约束
完整性是指数据库中数据的正确性和一致性。
通过对数据库中插入、删除和修改数据值的操作进行限制和约束,来实现数据的完整性,数据库提供两种保持数据完整性的方法:一是在定义表时定义完整性约束;二是定义规则、约束、索引和触发器。
完整性约束提供了在创建表的同时定义完整性控制的手段,从而简化了完整性控制的过程,但是完整性约束的范围相当窄,而且它不像默认、规则、索引以及触发器那样容易理解。
在数据库服务器上能够创建以下3种类型的完整性约束:
1) 唯一性和主键(unique和primary key) 约束。
该约束要求同一表中的任意两行在某一或某些指定列上不能具有相同的值,另外,主键约束还要求在指定的列上不允许空值。
参照完整性约束要求插入某个或某些指定列的数据必须已存在于被指定表的列中。
2) 检查约束(check) 。
该约束限制了能够插入列中的数值。
3) 通过限制空值的使用和提供列的默认值,也可以进行数据完整性控制。
表级和列级的完整性约束只是在声明时语法上略有不同:列级约束应放在当作分隔符的逗号之前,即列名和数据类型之后;而表级约束则应作为独立的由逗号分割的语句。
数据库服务器以同样的方式处理表级和列级约束,涉及到多列的约束必须作为表级约束处理。
5. 索引
数据列和数据类型定义了包括在表中的数据的类型,索引则描述了数据在表中是如何组织的。
可以创建—个或多个索引来加快数据库的查询速度。
索引对用户是透明的,数据库自动确定何时使用表的索引。
一般情况下,数据库系统都支持如下3种索引类型:
1) 组合索引,这类索引牵涉到多个数据列。
2) 唯一索引,这类索引不允许在索引列上有重复值,数据库服务器在索引产生和数据插入时自动检查是否有重复值。
3) 聚簇索引和非聚簇索引。
聚簇索引要求数据库服务器按索引列对数据进行排序,使得数据行的物理顺序和其逻辑顺序一致,因此,每个表上只允许一个聚簇索引;非聚簇索引不要求逻辑顺序和物理顺序一致,每一非聚簇索引可以为用户提供不同的数据访问顺序。
在列上建立索引是为了加快数据库的查询速度,表的所有者可以在其表上为bit、text或image 类型之外的其他列创建和删除索引。
6. 检查PDM的对象
PDM中可供检查的对象包括:Package (包) 、Table (表) 、Column (列) 、Index (索引) 、Key (键) 、Domain (域) 、View (视图) 、Reference (参照) 、Trigger (触发器) 、Procedure (存储过程) 、User (用户) 和File (文件) 等。
对检查模型时发现的错误,可以在结果列表窗口查看出现错误或警告的原因,并可以采用手工或自动更正的方法对问题进行修改。
(1) 包检查
包检查主要检查如下内容:
1) 包中不能存在循环参照。
当一个表参照另一个表,直到最后多个表之间的参照构成一个循环时,就形成了循环参照。
循环参照不能自动更正,只能通过手工删除其中一个参照,或改变一个参照的父表。
2) 模型对象名(表、列、参照等的名称) 必须是唯一的。
有重名约束时,可手工更名,也可自动更名。
3) 约束名不能超过DBMS定义文件中规定的最大长度。
如果超过了,可以手工更正,也可以让系统自动更正。
系统自动更正将截短约束的名称。
(2) 表检查
在表检查过程中检查以下内容:
1) 表名和代码必须唯一。
2) 表名和代码不能超过DBMS定义文件中规定的最大长度。
超出时,可以手工修改,也可让系统自动截短。
3) 约束名与索引名不能冲突。
如果约束和索引因使用同一个名称而发生冲突,必须手工修改,不能自动更正。
4) 一个表至少应该有一个列、一个参照、一个主键和一个索引。
如果没有,需要手工增加,不能自动更正。
5) 一个表中只能存在一个自增益列。
如果超过,需要手工删除,不能自动更正。
(3) 列检查
在列检查中主要检查以下内容:
1) 列名和代码必须唯一。
2) 列代码不能超过DBMS定义文件规定的长度。
3) 列与附加到它之上的域不能分离。
虽然系统允许列与附加到它之上的域的定义分离,但在设计中修改域和列的定义时应该特别注意。
如果采用自动更正,系统自动用域的特性覆盖列的特性。
4) 在某些DBMS中,要求键列或唯一性索引列必须是强制的,即该列的值不能为空。
可以通过手工或自动方法把列设置成强制的。
5) 默认值与列表值必须在最大值与最小值之间。
列的Standard Checks中,Default和List of Values的值必须在Maximum和Minimum的范围之内,否则必须手工修改,不能自动更正。
6) 数字型数据类型的总长度必须大于小数值长度。
否则必须手工更正长度和精度的值,不能自动更正。
7) 应该为列定义数据类型。
如果列上存在未定义的数据类型,需要手工选择一种数据类型,不能自动更正。
8) 外键列与连接的主键列或候选键列必须有一致的数据类型。
如果不一致,可以手工修改。
如果选择自动更正,外键列数据类型将被主键(或候选键) 列的数据类型和检查参数覆盖。
9) 约束名必须唯一。
10) 自增益列必须是数字型数据类型。
如果不是,则必须手工更正。
11) 计算列必须有表达式。
如果没有,则必须手工添加表达式。
(4) 索引检查
在索引检查中检查以下内容:
1) 索引名与代码必须唯一。
2) 索引代码长度不能超过DBMS定义文件规定的长度。
3) 一个索引应该至少包含一个列。
如果没有,就需要手工增加一个列或删除这个索引。
4) 不能出现索引嵌套。
否则需要手工删除,不能自动更正。
(5) 键检查
在键检查过程中主要检查以下内容:
1) 键名和代码必须唯一。
2) 键代码长度不能超过DBMS定义文件规定的长度。
3) 一个键应该至少有一个列。
如果键中缺少列,需要手工添加一个或多个列,不能自动更正。
4) 键不能嵌套。
否则需要手工删除,不能自动更正。
(6) 域检查
在域检查过程中检查以下内容:
1) 域名和代码必须唯一。
2) 域代码长度不能超过DBMS定义文件规定的长度。
超出时需要手工更正,或者使用自动更正功能自动截短。
3) 默认值与列表值必须在最大值与最小值之间。
4) 数字型数据类型的总长度必须大于小数位长度。
5) 应该为域定义数据类型。
(7) 参照检查
在参照检查中检查以下内容:
1) 参照名和代码必须唯一。
2) 参照代码长度不能超过DBMS定义文件规定的长度。
3) 不允许存在自反强制参照。
如果存在,则需要手工清除参照属性页Integrity上的Mandatory Parent复选框,不能自动更正。
4) 一个参照至少有一个参照连接。
如果没有,可以手工建立参照连接或者删除参照,不能自动更正。
不允许存在不完整连接。
5) 有些DBMS要求参照的连接顺序必须和键列顺序一致。
可以手工更正连接顺序。
如果使用自动更正,连接顺序将自动改为键列顺序。
(8) 触发器、视图、用户、存储过程和文件检查
在触发器、视图、用户、存储过程和文件检查中检查以下内容:
1) 触发器、视图、用户的名称和代码必须唯一。
2) 触发器和视图的代码长度不能超过DBMS定义文件规定的长度。
3) 用户的代码长度不能超过128个字符。
4) 存储过程必须包含实现功能的程序代码。
5) 嵌入模型中的两个文件不能有相同的名称。
6) 模型中外部文件的路径和名称必须存在。
实验目的
1) 了解和熟悉PowerDesigner PDM及其相关知识。
2) 掌握运用PowerDesigner工具建立PDM的方法。
3) 掌握对PowerDesigner PDM进行管理的内容和方法。