分享

用 Visio 和 PowerDesigner 辅助进行数据库设计

 Humen_ 2017-07-21

第一步:在 Visio 中画好数据库设计的 E-R 图

首先要面临的问题便是,采用何种作图类型?

答案是框图,要注意,是“框图”而不是“基本框图”!

 

基本原则如下:

①表的表示图形:框图 --> 方块 --> 框

②表字段的表示图形:框图 --> 方块 --> 圆形(调整大小呈1个椭圆比较漂亮)

③表与表之间关系的表示图形:框图 --> 方块 --> 菱形

④连接表与组成字段的表示图形:工具栏 --> 绘图工具 --> 线条工具(Ctrl + 6)

⑤连接框与菱形的标识图形:工具栏 --> 绘图工具 --> 线条工具(Ctrl + 6)

⑥新建实体(框)时,内部文字的大小会变回原来的8pt,这是个很烦的问题,最佳实践是按住Ctrl直接拖拽复制

7.总之Visio的使用不是几句话就能说完的,还有待自己进一步摸索

 

接下来贴出我用Visio制作完毕的博客数据库设计E-R图(没有仔细的考虑逻辑,估计有不合适的地方)

 

第二步:在 PowerDesigner 中根据 Visio 中制作出来的E-R图构建 “概念对数据模型”

有几个注意的地方,以下我会11罗列:

①两张表中不能同时存在“文章ID”的问题:菜单栏 --> Tools --> Model Options -->Model Settings

--> Data Item --> 取消勾选 “Unique code”

 

②如果你足够细心,应该会发现概念数据模型和物理数据模型对应的菜单项是不同的,

比如说只有在概念数据模型视图中才能找到 “Unique code” 复选框,只有在物理数据模型视图中找到Database菜单项

 

③还有就是在“概念数据模型”中,不需要显式的在字段中加入外键字段(概念数据模型中不用去关心主外键),到时候由概念数据模型

生成物理数据模型的时候,会自动将所有依赖的“外键id”字段加入到表中来,具体情况接下来会讲述~

 

④在构造表与表之间的关系时,从一个表拉到另一个表,默认是“从1到多”的!

不过可以双击进行细致编辑,包括1对多,1对1什么的关系,还可以标明注解,使别人看起来一目了然

 

接下来把建立好的“概念数据模型”视图贴上来

 

接下来就是用概念数据模型生成物理数据模型(由抽象的概念具体化到一种特定的数据库类型,如OracleMySQL等)

菜单栏 --> Tools --> Generate Physical Data Model

 

下面来看一看生成的原始的“物理数据模型”:

 

生成的物理数据模型是不能够直接用来生成数据库或者.sql文件的,要进行一些加工处理(完善主键增长机制,重新编辑表结构)

对于oracle的物理数据模型,主键可以用添加sequence的方式来维护,

对于mysql的物理数据模型,主键可以用勾选“identity复选框”的方式来维护...

至于为什么要重新编辑数据库表结构,看看上面的图就行了,评论有必要保留大类ID、小类ID、文章_会员ID么?

除了评论ID作为评论表的主键外,还有必要保留第2个其他的主键么??

都没有!那么,尽情的删除和修改吧!不过要小心不要改错了,^ ^!

还有“字段是否允许为空”什么的,也要在这个时候编辑好~

有几个非常非常需要注意的地方,表字段的code名千万不能和Oracle数据库的保留字同名

不然后面生成的sql文件时没办法用的,会出现很多bug~

那么,到底有哪些关键字呢?

Oracle中的保留字可以参见select * from v$reserved_words;数据字典表中所见.

 

还有诸如最经常的,date,comment,userid什么的

这次针对Oracle生成的sql脚本不能用就是因为comment我用做表名,date我用做列名了~

其实重名与否也很好观察,打开sql脚本看双引号就行了,如果重名的话pd会自动给该字段加上双引号~

不过双引号虽然是加了,却是没办法正常使用的!

这次针对Oracle生成的sql脚本不能直接拿来用的第二个原因是pd在创建package的语句后面将 / 给丢掉了

不过也怪我对 Oracle PL/SQL 块的掌握不熟练,竟然没有第一时间找出原因来~

 

下面来看看经我修改过的物理数据模型,完成了修改,一切都显得那么和谐!

 

PowerDesigner还有个生成脚本中包含双引号的问题需要被解决,解决方法如下:

打开Database -> Edit Current DBMS ,出现一个编辑界面,在右边的框里,找到script分节点,再依次找到sql -> format 节点,下面有一个这样的名称的属性:CaseSensitivityUsingQuote,把这个属性的值设为“NO”,再看生成的script,就全部双引号都去掉了。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多