Powerdesigner设计的PDM导出的数据库中不能体现出外码约束的解决方法

很多人在设计数据库的过程中,通过设计CDM生成PDM导入数据库的方式设计和生成所需要的数据库。

但是事实上信息的人会发现,在导入数据库之后,打开SQL Server 2008中相关的表,点击打开查看相关的列,会发现,只有主码的列字段才会被标注出来(标注为PK),而本应该标注出来的外码却没有标注出来(正确的情况下应该标注为FK)。如下图:

                                                              

通过反转,即通过将已生成的数据库反转出PDM(具体方法不再详述),和网上一些能够在数据库中体现出外码约束的数据库PDM相比较,会发现,自己设计的PDM在导入到数据库之后不能体现数据库应有的外码约束的原因如下:

打开PDM模型,在Powerdesigner中打开 model ---> References… 查看,会发现能够生成数据库中外码约束的PDM最右边Implementation属性显示为:Declarative;而不能生成外码约束的PDM的Implementation属性为:Trigger。如下图

                                              

解决方法如下:

                                       1.          打开PDM图,点击DataBase ---> Change Current DBMS… 打开如下界面:

                                                    

                                       2.          修改数据库为Microsoft SQL Server 2000,如下图所示:

                                                    

                                       3.          再打开model(模型)---> References… 打开如下窗口,将其中的Implementation属性,全部修改为Declarative:(需要提示的是,如果没有在第二步中,将数据库的类型修改为MS SQL Server 2000的话,那么在这一步中是不能修改成功的,无论是MS SQL Server 2005还是2008,本人均已试过)

                                                    

                                       4.          然后再打开DataBase ---> Change Current DBMS…,将之前修改的数据库类型重修修改回来,即把Microsoft SQL Server 2000修改为Microsoft SQL Server 2008(或者2005)。

                                       5.          成功完成以上步骤之后,就可以将PDM通过 DataBase ---> Database Generation,将PDM导入到数据库中,如下界面(在此界面中命名SQL文件名字以及通过那个ODBC导入到数据库中去)

                                                    

                                       6.          打开数据库,这时候可以发现,新导入的数据库中,终于出现了久违的外码约束。如下图:

                                                     

另外,网上有些文章介绍说是通过Powerdesigner生成的CDM来修改,进而生成PDM,在通过PDM导入到数据库即可,据本人亲身测试,此法是行不通的,因为即便你再CDM中将Implementation属性从Trigger修改为Declarative,在生成PDM时,Powerdesigner还是会自动将Implementation属性变回Trigger。所以最后导入的数据库还是没有外码约束。(该方法具体步骤可参照链接:http://kaminlee.iteye.com/blog/1047996,具体不再详述)

该问题的一些猜测:结合Implementation属性值以及本问题的修改方法,可以猜测出,之所以会出现这种问题,其实是和数据库本身的性质有很大的关系的,即我们现在使用的SQL Server 2008(2005)不能够顺利地使用Implementation属性的Declarative值,所以只能够在将数据库类型改为SQL Server 2000之后才将Implementation属性值改为Declarative,然后在把数据库类型强制转为SQL Server 2008(2005)才能够成功。

而之所以在CDM中直接修改Implementation值为Declarative,然后在生成PDM然后在导入到数据库中这个方法不能够如愿成功,原因有可能在于,由于SQL Server 2008不能够使用Declarative值,所以在生成PDM图时,Powerdesigner会自动将Implementation属性值转为Trigger,故,此种方法不能够成行。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值