﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-小菜毛毛技术分享-随笔分类-数据建模</title><link>http://www.blogjava.net/caizh2009/category/41279.html</link><description>与大家共同成长</description><language>zh-cn</language><lastBuildDate>Sat, 10 Jul 2010 08:18:21 GMT</lastBuildDate><pubDate>Sat, 10 Jul 2010 08:18:21 GMT</pubDate><ttl>60</ttl><item><title> 数据库设计三大范式应用实例剖析</title><link>http://www.blogjava.net/caizh2009/archive/2010/07/08/325534.html</link><dc:creator>小菜毛毛</dc:creator><author>小菜毛毛</author><pubDate>Thu, 08 Jul 2010 03:13:00 GMT</pubDate><guid>http://www.blogjava.net/caizh2009/archive/2010/07/08/325534.html</guid><wfw:comment>http://www.blogjava.net/caizh2009/comments/325534.html</wfw:comment><comments>http://www.blogjava.net/caizh2009/archive/2010/07/08/325534.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/caizh2009/comments/commentRss/325534.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/caizh2009/services/trackbacks/325534.html</trackback:ping><description><![CDATA[<span style="font-family: verdana,sans-serif; font-size: 14px; line-height: 21px;">
<p style="margin: 1em 0px 0.5em; padding: 0px;">引言<br />
<br />
数据库的设计范式是数据库设计所需要满足的规范，满足这些规范的数据库是简洁的、结构明晰的，同时，不会发生插入（insert）、删除
（delete）和更新（update）操作异常。反之则是乱七八糟，不仅给数据库的编程人员制造麻烦，而且面目可憎，可能存储了大量不需要的冗余信息。<br />
<br />
设计范式是不是很难懂呢？非也，大学教材上给我们一堆数学公式我们当然看不懂，也记不住。所以我们很多人就根本不按照范式来设计数据库。<br />
<br />
实质上，设计范式用很形象、很简洁的话语就能说清楚，道明白。本文将对范式进行通俗地说明，并以笔者曾经设计的一个简单论坛的数据库为例来讲解怎样将这
些范式应用于实际工程。<br />
<br />
范式说明<br />
<br />
第一范式（1NF）：数据库表中的字段都是单一属性的，不可再分。这个单一属性
由基本类型构成，包括整型、实数、字符型、逻辑型、日期型等。<br />
<br />
例如，如下的数据库表是符合第一范式的：<br />
</p>
<table align="center" border="1" cellpadding="2" cellspacing="0" width="90%">
    <tbody>
        <tr>
            <td>字段1</td>
            <td>字段2</td>
            <td>字段3</td>
            <td>字段4</td>
        </tr>
        <tr>
            <td>&nbsp;</td>
            <td>&nbsp;</td>
            <td>&nbsp;</td>
            <td>&nbsp;</td>
        </tr>
    </tbody>
</table>
<br />
而这样的数据库表是不符合第一范式的：<br />
<br />
<table align="center" border="1" cellpadding="2" cellspacing="0" width="90%">
    <tbody>
        <tr>
            <td>字段1</td>
            <td>字段2</td>
            <td colspan="2">字段3</td>
            <td>字段4</td>
        </tr>
        <tr>
            <td>&nbsp;</td>
            <td>&nbsp;</td>
            <td>字段3.1</td>
            <td>字段3.2</td>
            <td>&nbsp;</td>
        </tr>
    </tbody>
</table>
<p style="margin: 1em 0px 0.5em; padding: 0px;"><br />
很显然，在当前的任何关系数据库管理系
统（DBMS）中，傻瓜也不可能做出不符合第一范式的数据库，因为这些DBMS不允许你把数据库表的一列再分成二列或多列。因此，你想在现有的DBMS中
设计出不符合第一范式的数据库都是不可能的。<br />
<br />
第二范式（2NF）：数据库表中不存在非关键字段对任一候选关键字段的部分函数依赖（部
分函数依赖指的是存在组合关键字中的某些字段决定非关键字段的情况），也即所有非关键字段都完全依赖于任意一组候选关键字。</p>
<table align="left" border="0" cellpadding="0" cellspacing="0">
    <tbody>
        <tr>
            <td valign="top">&nbsp;</td>
        </tr>
        <tr>
            <td>&nbsp;</td>
        </tr>
    </tbody>
</table>
<br />
<br />
假定选课关系表为SelectCourse(学号, 姓名, 年龄, 课程名称, 成绩, 学分)，关键字为组合关键字(学号,
课程名称)，因为存在如下决定关系：<br />
<br />
(学号, 课程名称) &#8594; (姓名, 年龄, 成绩, 学分)<br />
<br />
这个数据库表
不满足第二范式，因为存在如下决定关系：<br />
<br />
(课程名称) &#8594; (学分)<br />
<br />
(学号) &#8594; (姓名, 年龄)<br />
<br />
即存在组合关键字中的字段决定非关键字的情况。<br />
<br />
由于不符合2NF，这个选课关系表会存在如下问题：<br />
<br />
(1)
数据冗余：<br />
<br />
同一门课程由n个学生选修，"学分"就重复n-1次；同一个学生选修了m门课程，姓名和年龄就重复了m-1次。<br />
<br />
(2) 更新异常：<br />
<br />
若调整了某门课程的学分，数据表中所有行的"学分"值都要更新，否则会出现同一门课程学分不同的情况。<br />
<br />
(3) 插入异常：<br />
<br />
假设要开设一门新的课程，暂时还没有人选修。这样，由于还没有"学号"关键字，课程名称和学分也无法记录入数据
库。<br />
<br />
(4) 删除异常：<br />
<br />
假设一批学生已经完成课程的选修，这些选修记录就应该从数据库表中删除。但是，与此同
时，课程名称和学分信息也被删除了。很显然，这也会导致插入异常。&nbsp;<br />
<br />
把选课关系表SelectCourse改为如下三个表：<br />
<br />
学生：Student(学号, 姓名, 年龄)；<br />
<br />
课程：Course(课程名称, 学分)；<br />
<br />
选课关
系：SelectCourse(学号, 课程名称, 成绩)。<br />
<br />
这样的数据库表是符合第二范式的，消除了数据冗余、更新异常、插入异常
和删除异常。<br />
<br />
另外，所有单关键字的数据库表都符合第二范式，因为不可能存在组合关键字。<br />
<br />
第三范式（3NF）：在
第二范式的基础上，数据表中如果不存在非关键字段对任一候选关键字段的传递函数依赖则符合第三范式。所谓传递函数依赖，指的是如果存在"A &#8594; B &#8594;
C"的决定关系，则C传递函数依赖于A。因此，满足第三范式的数据库表应该不存在如下依赖关系：<br />
<br />
关键字段 &#8594; 非关键字段x &#8594;
非关键字段y<br />
<br />
假定学生关系表为Student(学号, 姓名, 年龄, 所在<a style="text-decoration: none; color: #336699;" href="http://edu.itbulo.com/"><span style="color: #000000;">学院</span></a>,&nbsp;<a style="text-decoration: none; color: #336699;" href="http://edu.itbulo.com/"><span style="text-decoration: underline;"><span style="color: #004a9c;">学院</span></span></a>地点,&nbsp;<a style="text-decoration: none; color: #336699;" href="http://edu.itbulo.com/"><span style="text-decoration: underline;"><span style="color: #004a9c;">学院</span></span></a>电话)，关键字为单一关键字"学号"，因为存在如下决定关系：<br />
<br />
(学号) &#8594;
(姓名, 年龄, 所在<a style="text-decoration: none; color: #336699;" href="http://edu.itbulo.com/"><span style="text-decoration: underline;"><span style="color: #004a9c;">学院</span></span></a>,&nbsp;<a style="text-decoration: none; color: #336699;" href="http://edu.itbulo.com/"><span style="text-decoration: underline;"><span style="color: #004a9c;">学院</span></span></a>地点,&nbsp;<a style="text-decoration: none; color: #336699;" href="http://edu.itbulo.com/"><span style="text-decoration: underline;"><span style="color: #004a9c;">学院</span></span></a>电话)<br />
<br />
这个数据库是
符合2NF的，但是不符合3NF，因为存在如下决定关系：<br />
<br />
(学号) &#8594; (所在<a style="text-decoration: none; color: #336699;" href="http://edu.itbulo.com/"><span style="text-decoration: underline;"><span style="color: #004a9c;">学院</span></span></a>) &#8594; (<a style="text-decoration: none; color: #336699;" href="http://edu.itbulo.com/"><span style="text-decoration: underline;"><span style="color: #004a9c;">学院</span></span></a>地点,&nbsp;<a style="text-decoration: none; color: #336699;" href="http://edu.itbulo.com/"><span style="text-decoration: underline;"><span style="color: #004a9c;">学院</span></span></a>电话)<br />
<br />
即存在非关键
字段"<a style="text-decoration: none; color: #336699;" href="http://edu.itbulo.com/"><span style="text-decoration: underline;"><span style="color: #004a9c;">学院</span></span></a>地点"、"<a style="text-decoration: none; color: #336699;" href="http://edu.itbulo.com/"><span style="text-decoration: underline;"><span style="color: #004a9c;">学院</span></span></a>电话"对关键字段"学号"的传递函数依
赖。<br />
<br />
它也会存在数据冗余、更新异常、插入异常和删除异常的情况，读者可自行分析得知。<br />
<br />
把学生关系表分为如下两个
表：<br />
<br />
学生：(学号, 姓名, 年龄, 所在<a style="text-decoration: none; color: #336699;" href="http://edu.itbulo.com/"><span style="text-decoration: underline;"><span style="color: #004a9c;">学院</span></span></a>)；<br />
<br />
<a style="text-decoration: none; color: #336699;" href="http://edu.itbulo.com/"><span style="text-decoration: underline;"><span style="color: #004a9c;">学院</span></span></a>：(<a style="text-decoration: none; color: #336699;" href="http://edu.itbulo.com/"><span style="text-decoration: underline;"><span style="color: #004a9c;">学院</span></span></a>, 地点, 电话)。<br />
<br />
这样的数据库表是符合第三范式的，消除了数据冗余、更
新异常、插入异常和删除异常。<br />
<br />
鲍依斯-科得范式（BCNF）：在第三范式的基础上，数据库表中如果不存在任何字段对任一候选关键字段
的传递函数依赖则符合第三范式。
<p style="margin: 1em 0px 0.5em; padding: 0px;">　假设仓库管理关系表为
StorehouseManage(仓库ID, 存储物品ID, 管理员ID,
数量)，且有一个管理员只在一个仓库工作；一个仓库可以存储多种物品。这个数据库表中存在如下决定关系：<br />
<br />
(仓库ID,
存储物品ID) &#8594;(管理员ID, 数量)<br />
<br />
(管理员ID, 存储物品ID) &#8594; (仓库ID, 数量)<br />
<br />
所以，
(仓库ID, 存储物品ID)和(管理员ID,
存储物品ID)都是StorehouseManage的候选关键字，表中的唯一非关键字段为数量，它是符合第三范式的。但是，由于存在如下决定关系：<br />
<br />
(仓库ID) &#8594; (管理员ID)<br />
<br />
(管理员ID) &#8594; (仓库ID)<br />
<br />
即存在关键字段决定关键字段的情况，所以
其不符合BCNF范式。它会出现如下异常情况：<br />
<br />
(1) 删除异常：<br />
<br />
当仓库被清空后，所有"存储物品ID"和"数
量"信息被删除的同时，"仓库ID"和"管理员ID"信息也被删除了。<br />
<br />
(2) 插入异常：<br />
<br />
当仓库没有存储任何物
品时，无法给仓库分配管理员。<br />
<br />
(3) 更新异常：<br />
<br />
如果仓库换了管理员，则表中所有行的管理员ID都要修改。<br />
<br />
把仓库管理关系表分解为二个关系表：<br />
<br />
仓库管理：StorehouseManage(仓库ID, 管理员ID)；<br />
<br />
仓库：Storehouse(仓库ID, 存储物品ID, 数量)。<br />
<br />
这样的数据库表是符合BCNF范式的，消除了删除异常、插入异
常和更新异常。</p>
<p style="margin: 1em 0px 0.5em; padding: 0px;">范式应用<br />
<br />
我们来逐步搞定一个论
坛的数据库，有如下信息：<br />
<br />
（1） 用户：用户名，email，主页，电话，联系地址<br />
<br />
（2）
帖子：发帖标题，发帖内容，回复标题，回复内容&nbsp;<br />
<br />
第一次我们将数据库设计为仅仅存在表：</p>
<table align="center" border="1" cellpadding="2" cellspacing="0" width="90%">
    <tbody>
        <tr>
            <td>用户名</td>
            <td>email</td>
            <td>主页</td>
            <td>电话</td>
            <td>联系地址</td>
            <td>发帖标题</td>
            <td>发帖内容</td>
            <td>回复标题</td>
            <td>回复内容</td>
        </tr>
    </tbody>
</table>
<br />
这个数据库表符合第一范式，但是没有任何一组候选关键字能决定数据库表的整行，唯一的关键字段用户名也不能完全决定整个元组。我们需要增加"
发帖ID"、"回复ID"字段，即将表修改为：<br />
<br />
<table align="center" border="1" cellpadding="2" cellspacing="0" width="90%">
    <tbody>
        <tr>
            <td>用户名</td>
            <td>email</td>
            <td>主页</td>
            <td>电话</td>
            <td>联系地址</td>
            <td>发帖ID</td>
            <td>发帖标题</td>
            <td>发帖内容</td>
            <td>回复ID</td>
            <td>回复标题</td>
            <td>回复内容</td>
        </tr>
    </tbody>
</table>
<br />
这样数据表中的关键字(用户名，发帖ID，回复ID)能决定整行：<br />
<br />
(用户名,发帖ID,回复ID) &#8594;
(email,主页,电话,联系地址,发帖标题,发帖内容,回复标题,回复内容)<br />
<br />
但是，这样的设计不符合第二范式，因为存在如下决定
关系：<br />
<br />
(用户名) &#8594; (email,主页,电话,联系地址)<br />
<br />
(发帖ID) &#8594; (发帖标题,发帖内容)<br />
<br />
(回复ID) &#8594; (回复标题,回复内容)<br />
<br />
即非关键字段部分函数依赖于候选关键字段，很明显，这个设计会导致大量的数据冗余和操作
异常。&nbsp;
<table align="left" border="0" cellpadding="0" cellspacing="0">
    <tbody>
        <tr>
            <td valign="top">&nbsp;</td>
        </tr>
        <tr>
            <td>&nbsp;</td>
        </tr>
    </tbody>
</table>
<br />
<br />
我们将数据库表分解为（带下划线的为关键字）：<br />
<br />
（1） 用户信息：用户名，email，主页，电话，联系地址<br />
<br />
（2） 帖子信息：发帖ID，标题，内容<br />
<br />
（3） 回复信息：回复ID，标题，内容<br />
<br />
（4）
发贴：用户名，发帖ID<br />
<br />
（5） 回复：发帖ID，回复ID<br />
<br />
这样的设计是满足第1、2、3范式和BCNF范式要求
的，但是这样的设计是不是最好的呢？<br />
<br />
不一定。<br />
<br />
观察可知，第4项"发帖"中的"用户名"和"发帖ID"之间是
1：N的关系，因此我们可以把"发帖"合并到第2项的"帖子信息"中；第5项"回复"中的"发帖ID"和"回复ID"之间也是1：N的关系，因此我们可以
把"回复"合并到第3项的"回复信息"中。这样可以一定量地减少数据冗余，新的设计为：<br />
<br />
（1）
用户信息：用户名，email，主页，电话，联系地址<br />
<br />
（2） 帖子信息：用户名，发帖ID，标题，内容<br />
<br />
（3）
回复信息：发帖ID，回复ID，标题，内容<br />
<br />
数据库表1显然满足所有范式的要求；<br />
<br />
数据库表2中存在非关键字段"标
题"、"内容"对关键字段"发帖ID"的部分函数依赖，即不满足第二范式的要求，但是这一设计并不会导致数据冗余和操作异常；<br />
<br />
数据库
表3中也存在非关键字段"标题"、"内容"对关键字段"回复ID"的部分函数依赖，也不满足第二范式的要求，但是与数据库表2相似，这一设计也不会导致数
据冗余和操作异常。<br />
<br />
由此可以看出，并不一定要强行满足范式的要求，对于1：N关系，当1的一边合并到N的那边后，N的那边就不再满足
第二范式了，但是这种设计反而比较好！<br />
<br />
对于M：N的关系，不能将M一边或N一边合并到另一边去，这样会导致不符合范式要求，同时导致
操作异常和数据冗余。&nbsp;<br />
对于1：1的关系，我们可以将左边的1或者右边的1合并到另一边去，设计导致不符合范式要求，但是并不会导致操作异常和数
据冗余。<br />
<br />
结论<br />
<br />
满足范式要求的数据库设计是结构清晰的，同时可避免数据冗余和操作异常。这并意味着不符合范式要求
的设计一定是错误的，在数据库表中存在1：1或1：N关系这种较特殊的情况下，合并导致的不符合范式要求反而是合理的。<br />
<br />
在我们设计数
据库的时候，一定要时刻考虑范式的要求。</span>
<img src ="http://www.blogjava.net/caizh2009/aggbug/325534.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/caizh2009/" target="_blank">小菜毛毛</a> 2010-07-08 11:13 <a href="http://www.blogjava.net/caizh2009/archive/2010/07/08/325534.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>PowerDesigner 连接oracle直接生成数据库中的表</title><link>http://www.blogjava.net/caizh2009/archive/2010/01/08/308651.html</link><dc:creator>小菜毛毛</dc:creator><author>小菜毛毛</author><pubDate>Fri, 08 Jan 2010 01:39:00 GMT</pubDate><guid>http://www.blogjava.net/caizh2009/archive/2010/01/08/308651.html</guid><wfw:comment>http://www.blogjava.net/caizh2009/comments/308651.html</wfw:comment><comments>http://www.blogjava.net/caizh2009/archive/2010/01/08/308651.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/caizh2009/comments/commentRss/308651.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/caizh2009/services/trackbacks/308651.html</trackback:ping><description><![CDATA[<div class="blog_content">配置的前提是要有装<span class="hilite3">oracle</span>的驱动程序，如果有装<span class="hilite3">oracle</span>服务器端或客户端就自动安装上的<span class="hilite3">oracle</span>的驱动程序 <br />
1、database-&gt;generate database <br />
2、general-&gt;Direct generation&nbsp; 如果没有配置好数据源，就要点数据库的图标 <br />
3、配置Data Sourcce <br />
选择ODBC machine data source <br />
选择Configure <br />
4、点击添加data source 选择用户数据源（只用于当前机器） <br />
5、选择<span class="hilite3">oracle</span>驱动，填写新建的数据源的名字即可！ </div>
<script type="text/javascript"><!-- google_ad_client="pub-4348265167276910" ;
/* 468x60, 个人博客 */ google_ad_slot="2046406163" ; google_ad_width="468;
google_ad_height" = 60;
//-->
</script><script src="http://pagead2.googlesyndication.com/pagead/show_ads.js" type="text/javascript">
</script><script src="http://pagead2.googlesyndication.com/pagead/expansion_embed.js"></script><script src="http://googleads.g.doubleclick.net/pagead/test_domain.js"></script><script src="http://pagead2.googlesyndication.com/pagead/render_ads.js"></script><script>google_protectAndRun("render_ads.js::google_render_ad", google_handleError, google_render_ad);</script>
<img src ="http://www.blogjava.net/caizh2009/aggbug/308651.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/caizh2009/" target="_blank">小菜毛毛</a> 2010-01-08 09:39 <a href="http://www.blogjava.net/caizh2009/archive/2010/01/08/308651.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>PowerDesigner教程系列（六）概念数据模型 </title><link>http://www.blogjava.net/caizh2009/archive/2009/08/13/291015.html</link><dc:creator>小菜毛毛</dc:creator><author>小菜毛毛</author><pubDate>Thu, 13 Aug 2009 07:23:00 GMT</pubDate><guid>http://www.blogjava.net/caizh2009/archive/2009/08/13/291015.html</guid><wfw:comment>http://www.blogjava.net/caizh2009/comments/291015.html</wfw:comment><comments>http://www.blogjava.net/caizh2009/archive/2009/08/13/291015.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/caizh2009/comments/commentRss/291015.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/caizh2009/services/trackbacks/291015.html</trackback:ping><description><![CDATA[<span style="font-size: 10pt">目标：本文主要介绍联系的定义及使用。</span>
<p style="font-size: 10pt"><strong>&nbsp;一、&nbsp;联系</strong><br />
联系（Relationship）是指实体集这间或实体集内部实例之间的连接。<br />
<br />
&nbsp;实体之间可以通过联系来相互关联。与实体和实体集对应，联系也可以分为联系和联系集，联系集是实体集之间的联系，联系是实体之间的联系，联系是具有方向性的。联系和联系集在含义明确的情况之下均可称为联系。<br />
<br />
&nbsp;按照实体类型中实例之间的数量对应关系，通常可将联系分为4类，即一对一（ONE&nbsp;TO ONE）联系、一对多（ONE TO MANY）联系、多对一（MANY TO ONE）联系和多对多联系（MANY TO MANY）。</p>
<p style="font-size: 10pt"><strong>&nbsp;二、&nbsp;建立联系</strong><br />
在CDM工具选项板中除了公共的工具外，还包括如下图所示的其它对象产生工具。<br />
<img src="http://images.cnblogs.com/cnblogs_com/yxonline/PD_17.jpg" border="0"  alt="" /><br />
&nbsp;在图形窗口中创建两个实体后，单击&#8220;实体间建立联系&#8221;工具，单击一个实体，在按下鼠标左键的同时把光标拖至别一个实体上并释放鼠标左键，这样就在两个实体间创建了联系，右键单击图形窗口，释放Relationship工具。如下图所示<br />
<img src="http://images.cnblogs.com/cnblogs_com/yxonline/PD_18.jpg" border="0"  alt="" /><br />
<br />
<strong>三、&nbsp;四种基本的联系<br />
</strong>即一对一（ONE&nbsp;TO ONE）联系、一对多（ONE TO MANY）联系、多对一（MANY TO ONE）联系和多对多联系（MANY TO MANY）。如图所示<br />
<img src="http://images.cnblogs.com/cnblogs_com/yxonline/PD_19.jpg" border="0"  alt="" /><br />
<strong>四、&nbsp;其他几类特殊联系</strong><br />
<br />
除了4种基本的联系之外，实体集与实体集之间还存在标定联系（Identify Relationship）、非标定联系（Non-Identify RelationShip）和递归联系（Recursive Relationship）。<br />
<br />
<em><strong>标定联系：</strong><br />
</em>每个实体类型都有自己的标识符，如果两个实体集之间发生联系，其中一个实体类型的标识符进入另一个实体类型并与该实体类型中的标识符共同组成其标识符时，这种联系则称为标定联系，也叫依赖联系。反之称为非标定联系，也叫非依赖联系。<br />
<span style="color: #ff0000">&nbsp;注意：<br />
在非标定联系中，一个实体集中的部分实例依赖于另一个实例集中的实例，在这种依赖联系中，每个实体必须至少有一个标识符。而在标定联系中，一个实体集中的全部实例完全依赖于另个实体集中的实例，在这种依赖联系中一个实体必须至少有一个标识符，而另一个实体却可以没有自己的标识符。没有标识符的实体用它所依赖的实体的标识符作为自己的标识符。</span><br />
<br />
换句话来理解，在标定联系中，一个实体（选课）依赖 一个实体（学生），那么（学生）实体必须至少有一个标识符，而（选课）实体可以没有自己的标识符，没有标标识符的实体可以用实体（学生）的标识符作为自己的标识符。<br />
<img src="http://images.cnblogs.com/cnblogs_com/yxonline/PD_20.jpg" border="0"  alt="" /><br />
<br />
</p>
<p style="font-size: 10pt"><em><strong>&nbsp;递归联系：</strong><br />
</em>递归联系是实体集内部实例之间的一种联系，通常形象地称为自反联系。同一实体类型中不同实体集之间的联系也称为递归联系。<br />
<br />
例如：在&#8220;职工&#8221;实体集中存在很多的职工，这些职工之间必须存在一种领导与被领导的关系。又如&#8220;学生&#8221;实体信中的实体包含&#8220;班长&#8221;子实体集与&#8220;普通学生&#8221;子实体集，这两个子实体集之间的联系就是一种递归联系。创建递归联系时，只需要单击&#8220;实体间建立联系&#8221;工具从实体的一部分拖至该实体的别一个部分即可。如图<br />
<img src="http://images.cnblogs.com/cnblogs_com/yxonline/PD_21.jpg" border="0"  alt="" /><br />
<br />
<strong>五、&nbsp;定义联系的特性</strong><br />
<br />
在两个实体间建立了联系后，双击联系线，打开联系特性窗口，如图所示。<br />
<img height="490" src="http://images.cnblogs.com/cnblogs_com/yxonline/PD_22.jpg" width="522" border="0"  alt="" /><br />
<br />
<strong>&nbsp;六、&nbsp;定义联系的角色名<br />
</strong>在联系的两个方向上各自包含有一个分组框，其中的参数只对这个方向起作用，Role Name为角色名，描述该方向联系的作用，一般用一个动词或动宾组表。<br />
如：&#8220;学生 to 课目&nbsp;&#8221; 组框中应该填写&#8220;拥有&#8221;，而在&#8220;课目To 学生&#8221;组框中填写&#8220;属于&#8221;。（在此只是举例说明，可能有些用词不太合理）。</p>
<p style="font-size: 10pt"><strong>七、&nbsp;定义联系的强制性</strong><br />
Mandatory 表洋这个方向联系的强制关系。选中这个复选框，则在联系线上产生一个联系线垂直的竖线。不选择这个复选框则表示联系这个方向上是可选的，在联系线上产生一个小圆圈。<br />
<br />
<strong>八、&nbsp;有关联系的基数</strong><br />
联系具有方向性，每个方向上都有一个基数。<br />
<br />
举例，<br />
&#8220;系&#8221;与&#8220;学生&#8221;两个实体之间的联系是一对多联系，换句话说&#8220;学生&#8221;和&#8220;系&#8221;之间的联系是多对一联系。而且一个学生必须属于一个系，并且只能属于一个系，不能属于零个系，所以从&#8220;学生&#8221;实体至&#8220;系&#8221;实体的基数为&#8220;1,1&#8221;，从联系的另一方向考虑，一个系可以拥有多个学生，也可以没有任何学生，即零个学生，所以该方向联系的基数就为&#8220;0,n&#8221;,如图所示<br />
<img src="http://images.cnblogs.com/cnblogs_com/yxonline/PD_23.jpg" border="0"  alt="" /><br />
待续。</p>
<div id="div_digg"></div>
<img src ="http://www.blogjava.net/caizh2009/aggbug/291015.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/caizh2009/" target="_blank">小菜毛毛</a> 2009-08-13 15:23 <a href="http://www.blogjava.net/caizh2009/archive/2009/08/13/291015.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>PowerDesigner教程系列（五）概念数据模型 </title><link>http://www.blogjava.net/caizh2009/archive/2009/08/13/291014.html</link><dc:creator>小菜毛毛</dc:creator><author>小菜毛毛</author><pubDate>Thu, 13 Aug 2009 07:23:00 GMT</pubDate><guid>http://www.blogjava.net/caizh2009/archive/2009/08/13/291014.html</guid><wfw:comment>http://www.blogjava.net/caizh2009/comments/291014.html</wfw:comment><comments>http://www.blogjava.net/caizh2009/archive/2009/08/13/291014.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/caizh2009/comments/commentRss/291014.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/caizh2009/services/trackbacks/291014.html</trackback:ping><description><![CDATA[<span style="font-size: 10pt">目标：<br />
本文主要介绍数据项、新增数据项、数据项的唯一性代码选项和重用选项等。<br />
<br />
一、数据项<br />
数据项（Data Item）是信息存储的最小单位，它可以附加在实体上作为实体的属性。<br />
注意：模型中允许存在没有附加至任何实体上的数据项。<br />
<br />
二、新建数据项<br />
1）使用&#8220;Model&#8221;---&gt; Data Items 菜单，在打开的窗口中显示已有的数据项的列表，点击 &#8220;Add a Row&#8221;按钮，创建一个新数据项，如图所示<br />
<img src="http://images.cnblogs.com/cnblogs_com/yxonline/PD_14.jpg" border="0"  alt="" /><br />
<br />
2）当然您可以继续设置具体数据项的Code、DataType、Length等等信息。这里就不再详细说明了。<br />
<br />
三、数据项的唯一性代码选项和重用选项<br />
使用Tools---&gt;Model Options-&gt;Model Settings。在Data Item组框中定义数据项的唯一性代码选项(Unique Code)与重用选项（Allow Reuse）。<br />
注意：<br />
如果选择Unique Code复选框 ，每个数据项在同一个命名空间有唯一的代码，而选择Allow reuse ，一个数据项可以充当多个实体的属性。<br />
<img src="http://images.cnblogs.com/cnblogs_com/yxonline/PD_15.jpg" border="0"  alt="" /><br />
<br />
四、在实体中添加数据项<br />
1）双击一个实体符号，打开该实体的属性窗口。<br />
2）单击Attributes选项卡，打开如下图所示窗口<br />
<img src="http://images.cnblogs.com/cnblogs_com/yxonline/PD_16.jpg" border="0"  alt="" /><br />
<br />
注意：<br />
Add a DataItem 与 Reuse a DataItem的区别在于<br />
Add a DataItem 情况下，选择一个已经存在的数据项，系统会自动复制所选择的数据项。如果您设置了UniqueCode选项，那系统在复制过程中，新数据项的Code会自动生成一个唯一的号码，否则与所选择的数据项完全一致。<br />
<br />
<br />
Reuse a DataItem情况下，只引用不新增，就是引用那些已经存在的数据项，作为新实体的数据项。<br />
<br />
待续。</span>
<div id="div_digg">
<div class="diggit" onclick="DiggIt(708387,25621,1)"><span class="diggnum" id="digg_count_708387">0</span> </div>
<div class="buryit" onclick="DiggIt(708387,25621,2)"><span class="burynum" id="bury_count_708387">0</span> </div>
<div class="clear"></div>
<span id="span_isdigged_708387" style="display: none">0</span>
<div class="diggword" id="digg_word_708387">(请您对文章做出评价)</div>
</div>
<img src ="http://www.blogjava.net/caizh2009/aggbug/291014.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/caizh2009/" target="_blank">小菜毛毛</a> 2009-08-13 15:23 <a href="http://www.blogjava.net/caizh2009/archive/2009/08/13/291014.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>PowerDesigner教程系列（四）概念数据模型 </title><link>http://www.blogjava.net/caizh2009/archive/2009/08/13/291013.html</link><dc:creator>小菜毛毛</dc:creator><author>小菜毛毛</author><pubDate>Thu, 13 Aug 2009 07:19:00 GMT</pubDate><guid>http://www.blogjava.net/caizh2009/archive/2009/08/13/291013.html</guid><wfw:comment>http://www.blogjava.net/caizh2009/comments/291013.html</wfw:comment><comments>http://www.blogjava.net/caizh2009/archive/2009/08/13/291013.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/caizh2009/comments/commentRss/291013.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/caizh2009/services/trackbacks/291013.html</trackback:ping><description><![CDATA[<span style="font-size: 10pt">目标：<br />
本文主要介绍如何定义实体的主、次标识符。<br />
<br />
一、标识符<br />
标识符是实体中一个或多个属性的集合，可用来唯一标识实体中的一个实例。要强调的是，CDM中的标识符等价于PDM中的主键或候选键。<br />
每个实体都必须至少有一个标识符。如果实体只有一个标识符，则它为实体的主标识符。如果实体有多个标识符，则其中一个被指定为主标识符，其余的标识符就是次标识符了。<br />
<br />
二、如果定义主、次标识符<br />
1）选择某个实体双击弹出实体的属性对话框。在Identifiers选项卡上可以进行实体标识符的定义。如下图所示<br />
<br />
<img src="http://images.cnblogs.com/cnblogs_com/yxonline/PD_11.jpg" border="0"  alt="" /><br />
<br />
2）选择第一行&#8220;主标识符&#8221;，点击属性按钮或双击第一行&#8220;主标识符&#8221;，弹出属性对话框，如图所示<br />
<img src="http://images.cnblogs.com/cnblogs_com/yxonline/PD_12.jpg" border="0"  alt="" /><br />
</span>
<p><span style="font-size: 10pt">3）选择"Attributes"选项卡，再点击&#8220;Add Attributes&#8221;工具，弹出如图所示窗口，选择某个属性作为标识符就行了。<br />
<img src="http://images.cnblogs.com/cnblogs_com/yxonline/PD_13.jpg" border="0"  alt="" /></span></p>
<p><span style="font-size: 10pt">待续。<br />
</p>
</span>
<div id="div_digg">
<div class="diggit" onclick="DiggIt(708271,25621,1)"><span class="diggnum" id="digg_count_708271">0</span> </div>
<div class="buryit" onclick="DiggIt(708271,25621,2)"><span class="burynum" id="bury_count_708271">0</span> </div>
<div class="clear"></div>
<span id="span_isdigged_708271" style="display: none">0</span>
<div class="diggword" id="digg_word_708271">(请您对文章做出评价)</div>
</div>
<img src ="http://www.blogjava.net/caizh2009/aggbug/291013.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/caizh2009/" target="_blank">小菜毛毛</a> 2009-08-13 15:19 <a href="http://www.blogjava.net/caizh2009/archive/2009/08/13/291013.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>PowerDesigner教程系列（三）概念数据模型 </title><link>http://www.blogjava.net/caizh2009/archive/2009/08/13/291011.html</link><dc:creator>小菜毛毛</dc:creator><author>小菜毛毛</author><pubDate>Thu, 13 Aug 2009 07:17:00 GMT</pubDate><guid>http://www.blogjava.net/caizh2009/archive/2009/08/13/291011.html</guid><wfw:comment>http://www.blogjava.net/caizh2009/comments/291011.html</wfw:comment><comments>http://www.blogjava.net/caizh2009/archive/2009/08/13/291011.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/caizh2009/comments/commentRss/291011.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/caizh2009/services/trackbacks/291011.html</trackback:ping><description><![CDATA[<span style="font-size: 10pt">目标：<br />
本文主要介绍属性的标准检查约束、如何定义属性的附加检查。<br />
<br />
一、定义属性的标准检查约束<br />
标准检查约束是一组确保属性有效的表达式。在实体属性的特性窗口，打开如图所示的检查选项卡。<br />
<img src="http://images.cnblogs.com/cnblogs_com/yxonline/PD_09.jpg" border="0"  alt="" /><br />
<br />
在这个选项卡可以定义属性的标准检查约束，窗口中每项的参数的含义，如下<br />
<table style="border-right: #000000 1px solid; padding-right: 1px; border-top: #000000 1px solid; padding-left: 1px; padding-bottom: 1px; margin: 1px; border-left: #000000 1px solid; width: 577px; padding-top: 1px; border-bottom: #000000 1px solid; border-collapse: collapse; height: 52px" cellspacing="0" cellpadding="3" border="1">
    <tbody>
        <tr>
            <td style="font-size: 10pt; width: 107px; height: 25px">参数</td>
            <td style="font-size: 10pt">说明</td>
        </tr>
        <tr>
            <td style="font-size: 10pt">Minimum</td>
            <td style="font-size: 10pt">属性可接受的最小数</td>
        </tr>
        <tr>
            <td style="font-size: 10pt">Maximum&nbsp;</td>
            <td style="font-size: 10pt">属性可接受的最大数</td>
        </tr>
        <tr>
            <td style="font-size: 10pt">Default</td>
            <td style="font-size: 10pt">属性不赋值时，系统提供的默认值</td>
        </tr>
        <tr>
            <td style="font-size: 10pt">Unit</td>
            <td style="font-size: 10pt">单位，如公里、吨、元</td>
        </tr>
        <tr>
            <td style="font-size: 10pt">Format</td>
            <td style="font-size: 10pt">属性的数据显示格式</td>
        </tr>
        <tr>
            <td style="font-size: 10pt">Lowercase</td>
            <td style="font-size: 10pt">属性的赋值全部变为小写字母</td>
        </tr>
        <tr>
            <td style="font-size: 10pt">Uppercase</td>
            <td style="font-size: 10pt">属性的赋值全部变为大写字母</td>
        </tr>
        <tr>
            <td style="font-size: 10pt">Cannot modify</td>
            <td style="font-size: 10pt">该属性一旦赋值不能再修改</td>
        </tr>
        <tr>
            <td style="font-size: 10pt">List Of Values</td>
            <td style="font-size: 10pt">属性赋值列表，除列表中的值，不能有其他的值</td>
        </tr>
        <tr>
            <td style="font-size: 10pt">Label</td>
            <td style="font-size: 10pt">属性列表值的标签</td>
        </tr>
    </tbody>
</table>
<br />
二、定义属性的附加检查<br />
当Standard checks 或Rules 不能满足检查的要求时，可以在Additional Checks选项卡的Server子页上，通过SQL语句中使用%MINMAX%、%LISTVAL%、%RULES%、%UPPER%、%LOWER%几个变量来定义Standard和Rule,如图所示<br />
<img src="http://images.cnblogs.com/cnblogs_com/yxonline/PD_10.jpg" border="0"  alt="" /><br />
<br />
%MINMAX%、%LISTVAL%、%UPPER%、%LOWER%<br />
在Standard Check中定义的Minimum 和Maximum、List values 、uppervalues、lowervalues<br />
<br />
%RULES%<br />
在Rules特性窗口Expression选项卡中定义的有效性规则表达式<br />
<br />
<br />
待续。</span>
<div id="div_digg"></div>
<img src ="http://www.blogjava.net/caizh2009/aggbug/291011.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/caizh2009/" target="_blank">小菜毛毛</a> 2009-08-13 15:17 <a href="http://www.blogjava.net/caizh2009/archive/2009/08/13/291011.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>PowerDesigner教程系列（二）概念数据模型 目标：目标：</title><link>http://www.blogjava.net/caizh2009/archive/2009/08/13/291007.html</link><dc:creator>小菜毛毛</dc:creator><author>小菜毛毛</author><pubDate>Thu, 13 Aug 2009 07:09:00 GMT</pubDate><guid>http://www.blogjava.net/caizh2009/archive/2009/08/13/291007.html</guid><wfw:comment>http://www.blogjava.net/caizh2009/comments/291007.html</wfw:comment><comments>http://www.blogjava.net/caizh2009/archive/2009/08/13/291007.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/caizh2009/comments/commentRss/291007.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/caizh2009/services/trackbacks/291007.html</trackback:ping><description><![CDATA[目标：<br />
本文主要介绍PowerDesigner概念数据模型以及实体、属性创建。<br />
<br />
<strong>一、新建概念数据模型</strong><br />
1）选择File--&gt;New,弹出如图所示对话框，选择CDM模型（即概念数据模型）建立模型。<br />
<img src="http://images.cnblogs.com/cnblogs_com/yxonline/PD_02.jpg" border="0"  alt="" /><br />
<br />
2）完成概念数据模型的创建。以下图示，对当前的工作空间进行简单介绍。（以后再更详细说明）<br />
<img src="http://images.cnblogs.com/cnblogs_com/yxonline/PD_03.jpg" border="0"  alt="" /><br />
<br />
3）选择新增的CDM模型，右击，在弹出的菜单中选择&#8220;Properties&#8221;属性项，弹出如图所示对话框。在&#8220;General&#8221;标签里可以输入所建模型的名称、代码、描述、创建者、版本以及默认的图表等等信息。在&#8220;Notes&#8221;标签里可以输入相关描述及说明信息。当然再有更多的标签，可以点击 "More&gt;&gt;"按钮，这里就不再进行详细解释。<br />
<img height="403" src="http://images.cnblogs.com/cnblogs_com/yxonline/PD_04.jpg" width="522" border="0"  alt="" /><br />
<br />
<strong>二、创建新实体</strong><br />
1）在CDM的图形窗口中，单击工具选项版上的Entity工具，再单击图形窗口的空白处，在单击的位置就出现一个实体符号。点击Pointer工具或右击鼠标，释放Entitiy工具。如图所示<br />
<img src="http://images.cnblogs.com/cnblogs_com/yxonline/PD_05.jpg" border="0"  alt="" /><br />
2）双击刚创建的实体符号，打开下列图标窗口，在此窗口&#8220;General&#8221;标签中可以输入实体的名称、代码、描述等信息。<br />
<img src="http://images.cnblogs.com/cnblogs_com/yxonline/PD_06.jpg" border="0"  alt="" /><br />
<br />
<strong>三、添加实体属性</strong><br />
1）在上述窗口的&#8220;Attribute&#8221;选项标签上可以添加属性，如下图所示。<br />
<img src="http://images.cnblogs.com/cnblogs_com/yxonline/PD_07.jpg" border="0"  alt="" /><br />
<br />
注意：<br />
数据项中的&#8220;添加属性&#8221;和&#8220;重用已有数据项&#8221;这两项功能与模型中Data Item的Unique code 和Allow reuse选项有关。<br />
P列表示该属性是否为主标识符;D列表示该属性是否在图形窗口中显示;M列表示该属性是否为强制的，即该列是否为空值。<br />
<br />
如果一个实体属性为强制的，那么， 这个属性在每条记录中都必须被赋值，不能为空。
<p style="font-size: 10pt">2）在上图所示窗口中，点击插入属性按钮，弹出属性对话框，如下图所示。<br />
<img src="http://images.cnblogs.com/cnblogs_com/yxonline/PD_08.jpg" border="0"  alt="" /></p>
<p style="font-size: 10pt">注意：这里涉及到域的概念，即一种标准的数据结构，它可应用至数据项或实体的属性上。在以下的教程中将另立章节详细说明。<br />
<br />
待续。<br />
</p>
<img src ="http://www.blogjava.net/caizh2009/aggbug/291007.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/caizh2009/" target="_blank">小菜毛毛</a> 2009-08-13 15:09 <a href="http://www.blogjava.net/caizh2009/archive/2009/08/13/291007.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>PowerDesigner教程系列（一）概念数据模型 </title><link>http://www.blogjava.net/caizh2009/archive/2009/08/13/291005.html</link><dc:creator>小菜毛毛</dc:creator><author>小菜毛毛</author><pubDate>Thu, 13 Aug 2009 07:05:00 GMT</pubDate><guid>http://www.blogjava.net/caizh2009/archive/2009/08/13/291005.html</guid><wfw:comment>http://www.blogjava.net/caizh2009/comments/291005.html</wfw:comment><comments>http://www.blogjava.net/caizh2009/archive/2009/08/13/291005.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/caizh2009/comments/commentRss/291005.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/caizh2009/services/trackbacks/291005.html</trackback:ping><description><![CDATA[<strong>目标</strong>:<br />
本文主要介绍PowerDesigner中概念数据模型 CDM的基本概念。<br />
<br />
<strong>一、概念数据模型概述</strong><br />
数据模型是现实世界中数据特征的抽象。数据模型应该满足三个方面的要求：<br />
1）能够比较真实地模拟现实世界<br />
2）容易为人所理解<br />
3）便于计算机实现<br />
<br />
概念数据模型也称信息模型，它以实体－联系(Entity-RelationShip,简称E-R)理论为基础，并对这一理论进行了扩充。它从用户的观点出发对信息进行建模，主要用于数据库的概念级设计。<br />
<br />
通常人们先将现实世界抽象为概念世界，然后再将概念世界转为机器世界。换句话说，就是先将现实世界中的客观对象抽象为实体(Entity)和联系(Relationship),它并不依赖于具体的计算机系统或某个DBMS系统，这种模型就是我们所说的CDM;然后再将CDM转换为计算机上某个DBMS所支持的数据模型，这样的模型就是物理数据模型,即PDM。<br />
<br />
CDM是一组严格定义的模型元素的集合，这些模型元素精确地描述了系统的<u>静态特性、动态特性以及完整性约束条件</u>等，其中包括了<u>数据结构、数据操作和完整性约束</u>三部分。<br />
1）数据结构表达为实体和属性;<br />
2）数据操作表达为实体中的记录的插入、删除、修改、查询等操作;<br />
3）完整性约束表达为数据的自身完整性约束（如数据类型、检查、规则等）和数据间的参照完整性约束（如联系、继承联系等）;<br />
<br />
<br />
<strong>二、实体、属性及标识符的定义</strong><br />
实体（Entity），也称为实例，对应现实世界中可区别于其他对象的&#8220;事件&#8221;或&#8220;事物&#8221;。例如，学校中的每个学生，医院中的每个手术。<br />
每个实体都有用来描述实体特征的一组性质，称之为属性，一个实体由若干个属性来描述。如学生实体可由学号、姓名、性别、出生年月、所在系别、入学年份等属性组成。<br />
<br />
实体集（Entity Set）是具体相同类型及相同性质实体的集合。例如学校所有学生的集合可定义为&#8220;学生&#8221;实体集，&#8220;学生&#8221;实体集中的每个实体均具有学号、姓名、性别、出生年月、所在系别、入学年份等性质。<br />
<br />
实体类型（Entity Type）是实体集中每个实体所具有的共同性质的集合，例如&#8220;患者&#8221;实体类型为：患者｛门诊号，姓名，性别，年龄，身份证号.............｝。实体是实体类型的一个实例，在含义明确的情况下，实体、实体类型通常互换使用。<br />
<br />
实体类型中的每个实体包含唯一标识它的一个或一组属性，这些属性称为实体类型的标识符（Identifier），如&#8220;学号&#8221;是学生实体类型的标识符，&#8220;姓名&#8221;、&#8220;出生日期&#8221;、&#8220;信址&#8221;共同组成&#8220;公民&#8221;实体类型的标识符。<br />
<br />
有些实体类型可以有几组属性充当标识符，选定其中一组属性作为实体类型的主标识符，其他的作为次标识符。<br />
<br />
<strong>三、实体、属性及标识符的表达</strong><br />
<br />
<img src="http://images.cnblogs.com/cnblogs_com/yxonline/PD_01.jpg" border="0"  alt="" /><br />
<br />
待续！<br />
<br />
<div id="div_digg"></div>
<img src ="http://www.blogjava.net/caizh2009/aggbug/291005.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/caizh2009/" target="_blank">小菜毛毛</a> 2009-08-13 15:05 <a href="http://www.blogjava.net/caizh2009/archive/2009/08/13/291005.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>