﻿<?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>博客园-深蓝居</title><link>http://www.cnblogs.com/studyzy/</link><description>关注SQL Server 2008,关注数据模型，开始BI生涯</description><language>zh-cn</language><lastBuildDate>Sun, 21 Mar 2010 01:44:32 GMT</lastBuildDate><pubDate>Sun, 21 Mar 2010 01:44:32 GMT</pubDate><ttl>60</ttl><item><title>使用Visio Viewer载入数据库中的Visio图</title><link>http://www.cnblogs.com/studyzy/archive/2010/03/16/1687698.html</link><dc:creator>深蓝</dc:creator><author>深蓝</author><pubDate>Tue, 16 Mar 2010 15:00:00 GMT</pubDate><guid>http://www.cnblogs.com/studyzy/archive/2010/03/16/1687698.html</guid><description><![CDATA[<p>阅读: 34 评论: 0 作者: <a href="http://www.cnblogs.com/studyzy/" target="_blank">深蓝</a> 发表于 2010-03-16 23:00 <a href="http://www.cnblogs.com/studyzy/archive/2010/03/16/1687698.html" target="_blank">原文链接</a></p><p>需求很简单，在SQL Server数据库中存放用户上传的Visio文件，然后使用Visio Viewer在IE中直接显示用户上传的Visio文件的内容。</p>  <p>对于这个需求，我们需要分成两部分：</p>  <p>1.实现Visio文件的数据库存放和读取，并在Asp.Net中能够下载下来。</p>  <p>2.使用微软官方提供的Visio Viewer，在HTML中使用该Object来调用Visio图。</p>  <p>对于第一个功能。首先需要实现的是文件的上传。在文件上传时我们一般需要记录3个内容：文件的Content Type，文件名和文件的二进制内容。用户上传文件保存到数据库的功能代码很简单，我这里就不累述了。</p>  <p>然后说一下下载功能，我们新建一个ViewFile.aspx文件，然后在后台代码中编写如下：</p>  <div>   <pre><span style="color: #0000ff">protected</span> <span style="color: #0000ff">void</span> Page_Load(<span style="color: #0000ff">object</span> sender, EventArgs e)
       {
           var p = Mgr.GetProcessByID(Request.QueryString[&quot;<span style="color: #8b0000">id</span>&quot;]);
           Page.Response.Clear();
           Page.Response.ContentType = p.FileContentType; <span style="color: #008000">//内容类型</span>
           Page.Response.AddHeader(&quot;<span style="color: #8b0000">Content-Disposition</span>&quot;, &quot;<span style="color: #8b0000">attachment;FileName=</span>&quot; + p.FileName);<span style="color: #008000">//文件名</span>
           Page.Response.BinaryWrite(p.ProcessFile.ToArray());<span style="color: #008000">//文件内容</span>
           Page.Response.End();
       }<br /></pre>
</div>

<p>OK ，就这么简单，现在我们只需要运行程序，然后Url中输入ViewFile.aspx?id=6就可以读取到ID=6的Visio文件并下载下来。</p>

<p>接下来再说Visio Viewer的调用，编写一个新的页面VisioView.aspx，</p>

<div>
  <pre>protected void Page_Load(object sender, EventArgs e)
        {
            StringBuilder sb = new StringBuilder();
            sb.Append(&quot;<span style="color: #8b0000">&lt;object classid=clsid:279D6C9A-652E-4833-BEFC-312CA8887857  id=vviewer </span>&quot;);
            sb.Append(&quot;<span style="color: #8b0000">codebase=http://download.microsoft.com/download/4/5/2/452f8090-413f-408f-83c0-edd66db786ee/vviewer.exe Width =100% Height = 600 &gt; </span>&quot;);
            sb.Append(&quot;<span style="color: #8b0000">&lt;param name=SRC value=</span>&quot; + &quot;<span style="color: #8b0000">http://localhost:2303/VisioFile.aspx?id=6</span>&quot; + &quot;<span style="color: #8b0000">&gt; </span>&quot;);
            sb.Append(&quot;<span style="color: #8b0000">&lt;param name=HighQualityRender value=1&gt; </span>&quot;);
            sb.Append(&quot;<span style="color: #8b0000">&lt;param name=BackColor value=#000000&gt; </span>&quot;);
            sb.Append(&quot;<span style="color: #8b0000">&lt;param name=PageColor value=#000000&gt; </span>&quot;);
            sb.Append(&quot;<span style="color: #8b0000">&lt;param name=PageVisible value=1&gt; </span>&quot;);
            sb.Append(&quot;<span style="color: #8b0000">&lt;param name=AlertsEnabled value=1&gt; </span>&quot;);
            sb.Append(&quot;<span style="color: #8b0000">&lt;param name=ContextMenuEnabled value=1&gt; </span>&quot;);
            sb.Append(&quot;<span style="color: #8b0000">&lt;param name=GridVisible value=1&gt; </span>&quot;);
            sb.Append(&quot;<span style="color: #8b0000">&lt;param name=PropertyDialogEnabled value=1&gt; </span>&quot;);
            sb.Append(&quot;<span style="color: #8b0000">&lt;param name=ScrollbarsVisible value=1&gt; </span>&quot;);
            sb.Append(&quot;<span style="color: #8b0000">&lt;param name=ToolbarVisible value=1&gt; </span>&quot;);
            sb.Append(&quot;<span style="color: #8b0000">&lt;param name=CurrentPageIndex value=1&gt; </span>&quot;);
            sb.Append(&quot;<span style="color: #8b0000">&lt;param name=Zoom value=-1&gt; </span>&quot;);
            sb.Append(&quot;<span style="color: #8b0000">&lt;/object&gt;</span>&quot;);
            lvisio.<a style="color: #0000ff" href="http://search.microsoft.com/default.asp?so=RECCNT&amp;siteid=us%2Fdev&amp;p=1&amp;nq=NEW&amp;qu=Text&amp;IntlSearch=&amp;boolean=PHRASE&amp;ig=01&amp;i=09&amp;i=99">Text</a> = sb.ToString();//这里是一个Literal控件
        }</pre>
</div>
这个地方的代码都是正确的，但是我们运行asp.net页面却会弹出错误&#8220;Microsoft Office Visio Viewer无法加载指定的URL或文件。&#8221;，如图：

<br />

<p><a href="http://images.cnblogs.com/cnblogs_com/studyzy/WindowsLiveWriter/VisioViewerVisio_13E40/image_4.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/studyzy/WindowsLiveWriter/VisioViewerVisio_13E40/image_thumb_1.png" width="371" height="96" /></a> </p>

<p>Visio文件正常下载，那么说明我们的src参数是正确的啊！这是什么原因造成的呢，经过简单的研究，发现原来是Visio Viewer的一个Bug吧，这个控件他只认识Visio格式后缀的url，而我们这里的文件URL是VisioFile.aspx?id=6，这个地方Visio Viewer认为不是一个Visio文件，所以根本不加载其中的内容了。</p>

<p>那么怎么解决呢？办法有好几个：</p>

<p>1.做一个.vsd的httphandler，然后指定解释.vsd格式的类，这样URL就变成了XXX.vsd格式了。</p>

<p>2.加一个无聊的参数：xx=.vsd。这样Visio Viewer就以为这个路径是Visio文件并进行加载了。</p>

<p>我采用第二个方案，修改代码第6行：</p>

<p>sb.Append(&quot;&lt;param name=SRC value=&quot; + &quot;<a href="http://localhost:2303/VisioFile.aspx?id=6&quot;">http://localhost:2303/VisioFile.aspx?id=6&quot;</a> + &quot;&amp;xx=.vsd&gt; &quot;);</p>

<p></p>

<p>OK，我们存放在数据库中的Visio就可以正常显示在Visio Viewer中了。</p> <img src="http://www.cnblogs.com/studyzy/aggbug/1687698.html?type=1" width="1" height="1" alt=""/><p>评论: 0　<a href="http://www.cnblogs.com/studyzy/archive/2010/03/16/1687698.html#pagedcomment" target="_blank">查看评论</a>　<a href="http://www.cnblogs.com/studyzy/archive/2010/03/16/1687698.html#commentform" target="_blank">发表评论</a></p><p><a href="http://job.cnblogs.com/" target="_blank">找优秀程序员，就在博客园</a></p><hr/><p>最新新闻：<br/>· <a href="http://news.cnblogs.com/n/59265/" target="_blank">Pwn2Own前夕抓紧补 谷歌为Chrome浏览器发布11项安全补丁</a><span style="color:gray">(2010-03-21 08:21)</span><br/>· <a href="http://news.cnblogs.com/n/59264/" target="_blank">黑客大赛开始 iPhone成主要攻破目标</a><span style="color:gray">(2010-03-21 08:12)</span><br/>· <a href="http://news.cnblogs.com/n/59263/" target="_blank">给Chrome的一封信</a><span style="color:gray">(2010-03-21 07:35)</span><br/>· <a href="http://news.cnblogs.com/n/59262/" target="_blank">甲骨文将关闭OpenSSO</a><span style="color:gray">(2010-03-20 23:54)</span><br/>· <a href="http://news.cnblogs.com/n/59261/" target="_blank">专访陈晓薇：九城已重建、我还没想好去哪</a><span style="color:gray">(2010-03-20 22:07)</span><br/></p><p>编辑推荐：<a href="http://news.cnblogs.com/n/59093/" target="_blank">[视频]想做你的Code</a><br/></p><p>网站导航：<a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/" target="_blank">个人主页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/group/" target="_blank">小组</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://kb.cnblogs.com" target="_blank">知识库</a></p>]]></description></item><item><title>折腾词库，一个词库互转程序</title><link>http://www.cnblogs.com/studyzy/archive/2010/03/02/1676774.html</link><dc:creator>深蓝</dc:creator><author>深蓝</author><pubDate>Tue, 02 Mar 2010 12:41:00 GMT</pubDate><guid>http://www.cnblogs.com/studyzy/archive/2010/03/02/1676774.html</guid><description><![CDATA[<p>阅读: 1308 评论: 1 作者: <a href="http://www.cnblogs.com/studyzy/" target="_blank">深蓝</a> 发表于 2010-03-02 20:41 <a href="http://www.cnblogs.com/studyzy/archive/2010/03/02/1676774.html" target="_blank">原文链接</a></p><p>我在之前写过一个小程序，用于实现QQ拼音、搜狗拼音、谷歌拼音和百度手机拼音输入法词库的互转，文章地址是：<a href="http://www.cnblogs.com/studyzy/archive/2009/12/31/1637030.html" target="_blank">http://www.cnblogs.com/studyzy/archive/2009/12/31/1637030.html</a></p>
<p>本来我只是出于从将个人的词库从QQ拼音导入到搜狗拼音中，随手写的个小程序，结果哪知道原来大家都有和我类似的需求，希望实现各种输入法词库的相互转换；另外现在智能手机越来越多，在手机上的输入法也竞争相当激烈，QQ手机拼音、搜狗手机拼音、百度手机拼音等输入法都出来的，有些手机输入法也支持词库的导入导出，所以也用得到我这个词库互转程序。最近又有人提出，希望将搜狗的细胞词库和QQ的分类词库转换成其他输入法的词库，这个功能也很有必要，所以我打算继续折腾这个程序，将词库转换的范围继续扩大！</p>
<p>经过两天的努力，终于完成了我的词库转换小工具，将现有词库的以文本格式导出，然后选择源词库格式和新词库格式，单击&#8220;转换&#8221;按钮即可词库格式的转换。放出程序截图如图所示：</p>
<p><a href="http://images.cnblogs.com/cnblogs_com/studyzy/WindowsLiveWriter/428abe7a39ed_11893/image_2.png" target="_blank"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/studyzy/WindowsLiveWriter/428abe7a39ed_11893/image_thumb.png" width="557" height="435" /></a> </p>
<p>目前我这个转换小工具还只支持纯文本格式的词库，因为对于搜狗细胞词库（scel格式）和QQ分类词库（qpyd格式）我没有具体的解析这些词库的算法或者程序集，所以无法解析成文本并进行转换。如果大家谁知道怎么解析搜狗细胞词库和QQ分类词库的话还希望不吝赐教！</p>
<p>如果希望将搜狗细胞词库导入到谷歌拼音中，该怎么实现呢？首先需要到官方网站去下载txt格式的细胞词库，该词库中只有词条，没有拼音！选择该txt文件，然后选择&#8220;搜狗细胞词库Txt&#8221;作为转换源，以谷歌拼音作为目标格式即可！</p>
<p><a href="http://images.cnblogs.com/cnblogs_com/studyzy/WindowsLiveWriter/428abe7a39ed_11893/image_4.png" target="_blank"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/studyzy/WindowsLiveWriter/428abe7a39ed_11893/image_thumb_1.png" width="557" height="435" /></a> </p>
<p>对于没有拼音的文本词库，程序会找到每个字的拼音，自动生成带拼音的词库，这里面有一个问题是出现多音字怎么办？我在高级设置中给出了一个&#8220;忽略多音字&#8221;的选项，默认是选中的，所以会导致很多词的拼音是错误的，比如&#8220;音乐&#8221;会被拼写成&#8220;yin le&#8221;，因为乐是多音字，只取了其一个音&#8220;le&#8221;。如果取消了&#8220;忽略多音字&#8221;选项，那么所有的多音字的拼音就都会出现在词库中，形成词条中多音字的所有组合，如图所示：</p>
<p><a href="http://images.cnblogs.com/cnblogs_com/studyzy/WindowsLiveWriter/428abe7a39ed_11893/image_6.png" target="_blank"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/studyzy/WindowsLiveWriter/428abe7a39ed_11893/image_thumb_2.png" width="557" height="435" /></a> </p>
<p>本来1895个词条，经过多音字的组合，就变成了7597条！这样导致词库变得太大，而且输入法处理起来也困难，所以不建议使用。对于词条中多音字的处理不知道大家还有没有更好的办法能够获得一个词的准确拼音，不要将&#8220;音乐&#8221;变成&#8220;yin le&#8221;了。</p>
<p>另外我还设置了词条长度的筛选功能，将单个字的词条、长度大于指定长度的词条都筛选掉，不进行转换。</p>
<p>现在这个程序功能还很弱，只支持：百度手机、QQ手机、搜狗拼音、搜狗五笔、QQ拼音、谷歌拼音、搜狗细胞词库Txt，仍然有以下问题有待解决：</p>
<ul><li>如何解析搜狗细胞词库scel格式和QQ分类词库qpyd格式？</li><li>如何获得QQ分类词库的Txt格式？</li><li>如何获得一个词条的准确拼音？</li><li>搜狗手机输入法好像不支持本地词库导入，电脑上的词库就没办法导入到其中了？</li><li>支持更多的输入法类型的词库。 </li></ul>
<p>我已经将程序代码放到Google Code中，有兴趣的可以看看，地址：<a href="http://code.google.com/p/imewlconverter/" target="_blank">http://code.google.com/p/imewlconverter/</a></p>
<p>&nbsp;</p>
<p>这里放出可执行文件，方便有同样需求的人来一起折腾词库，下载地址：<a href="http://files.cnblogs.com/studyzy/深蓝词库转换小工具-v1.0.zip" target="_blank">/Files/studyzy/深蓝词库转换小工具-v1.0.zip</a></p><img src="http://www.cnblogs.com/studyzy/aggbug/1676774.html?type=1" width="1" height="1" alt=""/><p>评论: 1　<a href="http://www.cnblogs.com/studyzy/archive/2010/03/02/1676774.html#pagedcomment" target="_blank">查看评论</a>　<a href="http://www.cnblogs.com/studyzy/archive/2010/03/02/1676774.html#commentform" target="_blank">发表评论</a></p><p><a href="http://job.cnblogs.com/" target="_blank">找优秀程序员，就在博客园</a></p><hr/><p>最新新闻：<br/>· <a href="http://news.cnblogs.com/n/59265/" target="_blank">Pwn2Own前夕抓紧补 谷歌为Chrome浏览器发布11项安全补丁</a><span style="color:gray">(2010-03-21 08:21)</span><br/>· <a href="http://news.cnblogs.com/n/59264/" target="_blank">黑客大赛开始 iPhone成主要攻破目标</a><span style="color:gray">(2010-03-21 08:12)</span><br/>· <a href="http://news.cnblogs.com/n/59263/" target="_blank">给Chrome的一封信</a><span style="color:gray">(2010-03-21 07:35)</span><br/>· <a href="http://news.cnblogs.com/n/59262/" target="_blank">甲骨文将关闭OpenSSO</a><span style="color:gray">(2010-03-20 23:54)</span><br/>· <a href="http://news.cnblogs.com/n/59261/" target="_blank">专访陈晓薇：九城已重建、我还没想好去哪</a><span style="color:gray">(2010-03-20 22:07)</span><br/></p><p>编辑推荐：<a href="http://news.cnblogs.com/n/59093/" target="_blank">[视频]想做你的Code</a><br/></p><p>网站导航：<a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/" target="_blank">个人主页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/group/" target="_blank">小组</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://kb.cnblogs.com" target="_blank">知识库</a></p>]]></description></item><item><title>PowerDesigner概念模型的Notation设置</title><link>http://www.cnblogs.com/studyzy/archive/2010/02/25/1673892.html</link><dc:creator>深蓝</dc:creator><author>深蓝</author><pubDate>Thu, 25 Feb 2010 15:55:00 GMT</pubDate><guid>http://www.cnblogs.com/studyzy/archive/2010/02/25/1673892.html</guid><description><![CDATA[<p>阅读: 78 评论: 0 作者: <a href="http://www.cnblogs.com/studyzy/" target="_blank">深蓝</a> 发表于 2010-02-25 23:55 <a href="http://www.cnblogs.com/studyzy/archive/2010/02/25/1673892.html" target="_blank">原文链接</a></p><p>在进行数据库设计模型时，分为概念模型设计和物理模型设计两种，概念模型主要是反映真是世界中的业务关系，也就是我们常用的实体关系图。物理模型是在概念模型设计好后通过概念模型直接转换生成的，然后再对系统生成的物理模型进行修改。概念模型的建模主要靠的是建模人员的业务理解能力，而物理模型的建模主要靠的是建模人员对某个数据库产品的熟悉和相关的技术水平。</p>  <p>在PowerDesigner中新建一个概念数据模型，可以选择模型的Notation，在PD15中提供了5种Notation可以选择，新建概念模型后，在设计面板中右击，在弹出式菜单中选择“Model Options”选项即可弹出模型选项窗口，并修改模型的Notation，如同所示：</p>  <p><a href="http://images.cnblogs.com/cnblogs_com/studyzy/WindowsLiveWriter/PowerDesigner_14CB3/image_2.png"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/studyzy/WindowsLiveWriter/PowerDesigner_14CB3/image_thumb.png" width="553" height="423" /></a> </p>  <p>一般我们使用ER图作为概念模型图，所以建议选择Entity/Relationship或者E/R+Merise，这两者的区别是后者在ER模型的基础上还提供了Merise建模理论，允许在概念模型中使用Association和Association Link。另外三个Notation中，Merise使用Association完全代替了Relationship；IDEF1X是IDEF系列方法中IDEF1的扩展版本，是在E-R(实体关系)方法的原则基础上,增加了一些规则，使语义更为丰富的一种方法，其表现方式与一般的ER图表示有一点区别；Barker比ER模型还要简化，只能使用“实体”和“关系”两个组件进行建模，不能使用“继承”组件。一般情况下，使用E/R模型就够了，不过为了更好的表现实体之间的业务关系，有些时候还是使用Association来代替实体还是有一定的必要的，所以更建议选择E/R+Merise模型。</p><img src="http://www.cnblogs.com/studyzy/aggbug/1673892.html?type=1" width="1" height="1" alt=""/><p>评论: 0　<a href="http://www.cnblogs.com/studyzy/archive/2010/02/25/1673892.html#pagedcomment" target="_blank">查看评论</a>　<a href="http://www.cnblogs.com/studyzy/archive/2010/02/25/1673892.html#commentform" target="_blank">发表评论</a></p><p><a href="http://job.cnblogs.com/" target="_blank">找优秀程序员，就在博客园</a></p><hr/><p>最新新闻：<br/>· <a href="http://news.cnblogs.com/n/59265/" target="_blank">Pwn2Own前夕抓紧补 谷歌为Chrome浏览器发布11项安全补丁</a><span style="color:gray">(2010-03-21 08:21)</span><br/>· <a href="http://news.cnblogs.com/n/59264/" target="_blank">黑客大赛开始 iPhone成主要攻破目标</a><span style="color:gray">(2010-03-21 08:12)</span><br/>· <a href="http://news.cnblogs.com/n/59263/" target="_blank">给Chrome的一封信</a><span style="color:gray">(2010-03-21 07:35)</span><br/>· <a href="http://news.cnblogs.com/n/59262/" target="_blank">甲骨文将关闭OpenSSO</a><span style="color:gray">(2010-03-20 23:54)</span><br/>· <a href="http://news.cnblogs.com/n/59261/" target="_blank">专访陈晓薇：九城已重建、我还没想好去哪</a><span style="color:gray">(2010-03-20 22:07)</span><br/></p><p>编辑推荐：<a href="http://news.cnblogs.com/n/59093/" target="_blank">[视频]想做你的Code</a><br/></p><p>网站导航：<a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/" target="_blank">个人主页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/group/" target="_blank">小组</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://kb.cnblogs.com" target="_blank">知识库</a></p>]]></description></item><item><title>PowerDesigner的样式设置</title><link>http://www.cnblogs.com/studyzy/archive/2010/01/13/1646372.html</link><dc:creator>深蓝</dc:creator><author>深蓝</author><pubDate>Wed, 13 Jan 2010 03:48:00 GMT</pubDate><guid>http://www.cnblogs.com/studyzy/archive/2010/01/13/1646372.html</guid><description><![CDATA[<p>阅读: 219 评论: 0 作者: <a href="http://www.cnblogs.com/studyzy/" target="_blank">深蓝</a> 发表于 2010-01-13 11:48 <a href="http://www.cnblogs.com/studyzy/archive/2010/01/13/1646372.html" target="_blank">原文链接</a></p><p>PD提供了强大的配置功能，可以对生成的数据库对象命名、数据模型的展现进行设置。这里首先讲下样式的设置。</p>  <p><strong>颜色和字体设置</strong></p>  <p><strong>1.单独设置某个对象的颜色和字体</strong></p>  <p>1.1修改实体填充色</p>  <p>（1）单击选中某个需要修改填充色的实体。</p>  <p>（2）右击，在弹出式菜单中选择&#8220;Format&#8221;选项，系统将弹出格式化窗口。</p>  <p>（3）切换到&#8220;Fill&#8221;选项卡中，选择Fill color为白色，如图所示：</p>  <p><a href="http://images.cnblogs.com/cnblogs_com/studyzy/WindowsLiveWriter/PowerDesigner_F965/image_2.png" target="_blank"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/studyzy/WindowsLiveWriter/PowerDesigner_F965/image_thumb.png" width="431" height="376" /></a> </p>  <p>（4）单击确定或应用按钮，即可将选中的实体修改为白色填充色。</p>  <p>1.2修改线条颜色</p>  <p>（1）选中需要修改线条颜色的实体或者是关系。</p>  <p>（2）右击，在弹出式菜单中选择&#8220;Format&#8221;选项，系统将弹出格式化窗口。</p>  <p>（3）切换到&#8220;Line Style&#8221;选项卡，修改Color为黑色，如图所示：</p>  <p><a href="http://images.cnblogs.com/cnblogs_com/studyzy/WindowsLiveWriter/PowerDesigner_F965/image_4.png" target="_blank"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/studyzy/WindowsLiveWriter/PowerDesigner_F965/image_thumb_1.png" width="431" height="376" /></a> </p>  <p>（4）单击确定或应用按钮，即可将选中的实体线条修改为黑色。</p>  <p>1.3修改字体</p>  <p>（1）选中需要修改线条颜色的实体或者是关系。</p>  <p>（2）右击，在弹出式菜单中选择&#8220;Format&#8221;选项，系统将弹出格式化窗口。</p>  <p>（3）切换到&#8220;Font&#8221;选项卡，左边会列出多个Symbol，可以将实体的名字、实体中的属性、主键等分别设置不同的字体。统一要求所有Symbol都使用Times New Roman字体，Size为10，颜色为黑色，如图所示：</p>  <p><a href="http://images.cnblogs.com/cnblogs_com/studyzy/WindowsLiveWriter/PowerDesigner_F965/image_8.png" target="_blank"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/studyzy/WindowsLiveWriter/PowerDesigner_F965/image_thumb_3.png" width="431" height="376" /></a> </p>  <p>（4）单击确定或应用按钮，即可将选中的对象的文字进行修改。</p>  <p><strong>2.设置所有模型的颜色和字体</strong></p>  <p>设置一个模型中所有对象的颜色、字体等的方法有两种，一种是使用Ctrl+A全选所有实体和关系，然后右键单击&#8220;Format&#8221;选项或者单击工具栏的Line Style、Fill Style和Font按钮。</p>  <p>另一个办法是不选择任何对象，在空白区域右击，在弹出式菜单中选择&#8220;Display Preferences&#8221;选项，在左边的Category列表中选择&#8220;Format&#8221;-&gt;&#8220;Entity&#8221;选项，系统会在右侧显示当前的实体的样式。单击&#8220;Modify&#8221;按钮，即可弹出Symbol Format窗口，修改实体的样式，如图所示。</p>  <p>&nbsp;</p>  <p>&nbsp;</p>  <p>&nbsp;</p>  <p>&nbsp;</p>  <p><a href="http://images.cnblogs.com/cnblogs_com/studyzy/WindowsLiveWriter/PowerDesigner_F965/image_10.png" target="_blank"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/studyzy/WindowsLiveWriter/PowerDesigner_F965/image_thumb_4.png" width="595" height="522" /></a> </p>  <p>修改完毕后，单击&#8220;确定&#8221;按钮，回到Display Preferences窗口，单击&#8220;Set As Default&#8221;，然后单击&#8220;OK&#8221;按钮，系统会弹出修改样式对话框，选择All Symbols选项，然后单击&#8220;OK&#8221;按钮，则当前模型中的所有实体都会被统一修改。同时，以后添加的新实体也会使用修改后的样式。</p>  <p><a href="http://images.cnblogs.com/cnblogs_com/studyzy/WindowsLiveWriter/PowerDesigner_F965/image_12.png" target="_blank"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/studyzy/WindowsLiveWriter/PowerDesigner_F965/image_thumb_5.png" width="240" height="162" /></a></p><img src="http://www.cnblogs.com/studyzy/aggbug/1646372.html?type=1" width="1" height="1" alt=""/><p>评论: 0　<a href="http://www.cnblogs.com/studyzy/archive/2010/01/13/1646372.html#pagedcomment" target="_blank">查看评论</a>　<a href="http://www.cnblogs.com/studyzy/archive/2010/01/13/1646372.html#commentform" target="_blank">发表评论</a></p><p><a href="http://job.cnblogs.com/" target="_blank">找优秀程序员，就在博客园</a></p><hr/><p>最新新闻：<br/>· <a href="http://news.cnblogs.com/n/59265/" target="_blank">Pwn2Own前夕抓紧补 谷歌为Chrome浏览器发布11项安全补丁</a><span style="color:gray">(2010-03-21 08:21)</span><br/>· <a href="http://news.cnblogs.com/n/59264/" target="_blank">黑客大赛开始 iPhone成主要攻破目标</a><span style="color:gray">(2010-03-21 08:12)</span><br/>· <a href="http://news.cnblogs.com/n/59263/" target="_blank">给Chrome的一封信</a><span style="color:gray">(2010-03-21 07:35)</span><br/>· <a href="http://news.cnblogs.com/n/59262/" target="_blank">甲骨文将关闭OpenSSO</a><span style="color:gray">(2010-03-20 23:54)</span><br/>· <a href="http://news.cnblogs.com/n/59261/" target="_blank">专访陈晓薇：九城已重建、我还没想好去哪</a><span style="color:gray">(2010-03-20 22:07)</span><br/></p><p>编辑推荐：<a href="http://news.cnblogs.com/n/59093/" target="_blank">[视频]想做你的Code</a><br/></p><p>网站导航：<a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/" target="_blank">个人主页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/group/" target="_blank">小组</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://kb.cnblogs.com" target="_blank">知识库</a></p>]]></description></item><item><title>分析与设计数据库模型的简单过程</title><link>http://www.cnblogs.com/studyzy/archive/2010/01/11/1643976.html</link><dc:creator>深蓝</dc:creator><author>深蓝</author><pubDate>Mon, 11 Jan 2010 03:48:00 GMT</pubDate><guid>http://www.cnblogs.com/studyzy/archive/2010/01/11/1643976.html</guid><description><![CDATA[<p>阅读: 247 评论: 3 作者: <a href="http://www.cnblogs.com/studyzy/" target="_blank">深蓝</a> 发表于 2010-01-11 11:48 <a href="http://www.cnblogs.com/studyzy/archive/2010/01/11/1643976.html" target="_blank">原文链接</a></p><p>近期在做一个业务系统的分析和数据模型设计，工作这几年也做过好几个项目的数据库模型的设计，期间也算是积累了一定的经验吧，这次有机会就写写我的数据库模型设计过程与方法。</p>  <p>在数据库设计中，设计的目标就是要建立E-R图（实体-关系图），在PowerDesigner中就是要建立概念模型或者逻辑模型。既然是实体-关系图，所以整个建模的核心就是围绕建立&#8220;实体&#8221;对象和找到实体之间的&#8220;关系&#8221;。实体分为两部分：标识（主键）和属性。标识是实体的一个或多个属性的组合，用于唯一的表标识出实体中的每一个数据。在确认一个实体的过程中，首先就是要确认实体的主键，只要找到了实体的主键，那么剩下的就是实体的属性。</p>  <p><strong>1.确认核心实体</strong></p>  <p>在建模过程中，首先需要对业务进行分析，知道我们的模型要表示怎么样的一个事情，从而确定我们模型的核心实体，找到了核心实体和其主键，那么剩下的工作就是以核心实体为中心进行实体关联的扩展和实体属性的抽象。一个数据库模型中一般会有1~2个实体作为整个模型的核心实体，核心实体一般都是一个名词，在整个业务过程中作为主语和宾语。所以总的来说，我们用一个主谓宾的句子来描述我们这个模型，那么基本就可以肯定，这句话中的主语和宾语就是核心实体，而通常谓语也是一个很核心的对象，该对象可能会产生一个实体来表示，也可能只是一个关联（Association）。通常数据库中数据量最大的表就是谓语对应的表。</p>  <p>以上说法可能比较抽象，用一两个简单的例子来说明。假设我们需要设计一个学生选课系统的数据库模型，那么首先就是要分析，我们这个系统是做什么的，记录什么的？&#8220;学生选课&#8221;！虽然只有4个字，但是已经完整的表达整个系统，从这样一个主谓宾的句子中，我们可以得出，整个模型的核心是&#8220;学生&#8221;（主语）和&#8220;课程安排&#8221;（宾语），谓词&#8220;选&#8221;表名了两个实体之间的核心关系。确定了核心的实体&#8220;学生&#8221;和&#8220;课程安排&#8221;，那么接下来就是要确定实体的主键和属性。&#8220;学生&#8221;实体的主键很容易确定，只要找到能够唯一标识每个学生的一个字段即可，所以我们可以使用&#8220;学号&#8221;来作为学生实体的主键，一个学校中每个学生的学号肯定是唯一的。&#8220;课程安排&#8221;这个实体的主键并没有那么明显的属性能够表示，对于无法找到明显的实体属性作为主键的情况下，我们需要创建一个专门的标识列（ID）用来标识实体中的每个实例。在数据库中最常见的ID就是自增列。这里我们可以设计&#8220;课程安排ID&#8221;作为课程实体的主键，每在数据库中增加一门课程，系统会自动为该课程分配一个自增的唯一整数来标识。</p>  <p><a href="http://images.cnblogs.com/cnblogs_com/studyzy/WindowsLiveWriter/8b52fb11571c_10DB3/image_2.png" target="_blank"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/studyzy/WindowsLiveWriter/8b52fb11571c_10DB3/image_thumb.png" width="608" height="78" /></a> </p>  <p>再比如一个要设计一个电子商务系统的数据库模型，首先一句话总结该系统就是&#8220;用户在网上购买商品&#8221;，所以这个系统的核心实体就是&#8220;用户&#8221;和&#8220;商品&#8221;。用户实体的主键是什么？用户的登录名是唯一的、邮箱是唯一的，都可以作为该实体的主键。但是在真实的电子商务系统中很少使用登录名或邮箱来作为主键，因为其中一个很重要的原因是登录名和邮箱都太长，而且长度不确定，所以在数据库中一般会设计一个自增的&#8220;用户ID&#8221;来作为用户的主键。商品实体的主键可以用商品的条形码来作为主键，确实可以这么做，但是同样的原因，条形码太长了，所以一般会用一个Int型的自增列&#8220;商品ID&#8221;作为商品的主键。</p>  <p><a href="http://images.cnblogs.com/cnblogs_com/studyzy/WindowsLiveWriter/8b52fb11571c_10DB3/image_6.png" target="_blank"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/studyzy/WindowsLiveWriter/8b52fb11571c_10DB3/image_thumb_2.png" width="611" height="80" /></a> </p>  <p><strong>2.确认相关实体</strong></p>  <p>在找到了核心实体后，接下来就是以核心实体为中心，找到相关的实体。相关实体一般来说就是和核心实体存在直接联系的实体，当然也有些相关实体是要经过另一个相关实体与核心实体关联。相关实体一般情况下都是名词。</p>  <p>以选课系统为例，与学生相关的实体是什么？班级、专业方向、院系等，与课程安排相关的实体是什么？课程、课程的详细安排、安排的教师等，所以我们可以将这些要关联到的实体都建立。</p>  <p><a href="http://images.cnblogs.com/cnblogs_com/studyzy/WindowsLiveWriter/8b52fb11571c_10DB3/image20.png" target="_blank"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/studyzy/WindowsLiveWriter/8b52fb11571c_10DB3/image20_thumb.png" width="638" height="367" /></a> </p>  <p>再看看前面说到的电子商务平台，核心实体是用户和商品，围绕用户，我们需要建立用户的&#8220;订单&#8221;（包括订单的明细）、用户的&#8220;代金券&#8221;等实体，围绕商品，我们需要建立商品的分类，商品的供应商等相关实体。于是我们的电子商务数据库模型变为：</p>  <p><a href="http://images.cnblogs.com/cnblogs_com/studyzy/WindowsLiveWriter/8b52fb11571c_10DB3/image_26.png" target="_blank"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/studyzy/WindowsLiveWriter/8b52fb11571c_10DB3/image_thumb_11.png" width="543" height="313" /></a> </p>  <p>这一步并没有完成，一个实体可以没有属性，但是却不能没有主键，所以需要给所有相关实体添加主键，我们可以以简短的可以唯一标识实体的属性来作为主键，也可以使用自增的ID作为主键，在数据库中出于性能、快捷等方面的考虑，大部分实体都是以ID作为主键。</p>  <p><strong>3.确认关联和关系</strong></p>  <p>关联（Association）也是一种实体间的连接，在Merise模型方法学理论中，Association是一种用于连接分别代表明确定义的对象的不同实体，这种连接仅仅通过另一个实体不能很明确地表达，而通过&#8220;事件（Event）&#8221;连接来表示。</p>  <p>也就是说，实体和实体之间存在着关系（多对多），但是这种关系还存在其他的属性，这些属性如果如果作为一个明确的实体的实体来表示又不是很合适，所以就使用了Association来表达，这种关系之间一般是一个&#8220;事件&#8221;虚实体，也就是说是一个<strong>动词</strong>对应的实体。</p>  <p>以选课系统为例，&#8220;选课&#8221;这个动词就是需要用关联来表示，一个学生可以选择多个课程安排，一个课程安排会有多个学生来选，所以学生和课程安排之间是多对多的关系，但是学生选课时还需要记录学生的时间、选课是否成功等信息，所以需要使用关联来表示选课这个动作。</p>  <p>前面说到的多对多是实体之间的一种关系，两个实体之间存在4种关系：一对一、一对多、多对一和多对多。根据核心实体和相关实体之间的关系建立实体之间的关系，于是我们的选课系统数据库模型如图所示：</p>  <p><a href="http://images.cnblogs.com/cnblogs_com/studyzy/WindowsLiveWriter/8b52fb11571c_10DB3/image46.png" target="_blank"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/studyzy/WindowsLiveWriter/8b52fb11571c_10DB3/image46_thumb.png" width="875" height="370" /></a> </p>  <p>对于一个电子商务系统，分析其中的实体之间的关系，也可以得到类似的关系图。要表示用户对商品的收藏，也就用户和商品两个实体直接的直接关系，一个用户可以收藏多件商品，一个商品可以被多个用户收藏，所以用户和商品之间是多对多的关系。另外，商品分类和自身是一个一对多的关系，因为分类存在大分类和小分类，是一种层级关系，一个父级分类下面有多个小分类，一个小分类只会有一个父级分类，所以分类自身一对多。</p>  <p><a href="http://images.cnblogs.com/cnblogs_com/studyzy/WindowsLiveWriter/8b52fb11571c_10DB3/image_24.png" target="_blank"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/studyzy/WindowsLiveWriter/8b52fb11571c_10DB3/image_thumb_10.png" width="799" height="439" /></a> </p>  <p><strong>4.确认属性</strong></p>  <p>前面几步工作时最重要最核心的工作，接下来的工作就是要完善模型。首先需要的就是要将实体的属性补齐，实体的属性可以根据日常生活常识、用户提交的表单、用户需求调研等来确定。比如学生表，根据常识我们知道，学生会具有姓名、性别、生日等属性；课程会具有课程名、学分等属性；课程的详细安排会安排具体的时间、上课的地点等属性&#8230;&#8230;在实际的企业应用中，大部分实体的属性时不可能通过常识来得到的，必须进行需求的调研，结合业务上的需求和实际中的表单、数据流等找到实体的属性。比如对于供应商这个实体，我们只知道供应商有编号，有名字，还有其他什么属性就必须得调研了。调研时我们知道企业新增加一个供应商时会填写一个新增供应商表，那么我们就可以拿到该表，更加表单的内容来设计供应商实体的属性。</p>  <p><strong>5.范式化</strong></p>  <p>在前面设计选课系统的数据模型时，对于选课的详细信息实体，会存在上课的时间、上课的地点等属性，但是仔细一考虑，这些属性如果直接放在该实体中，必然会形成数据重复，导致数据维护困难，不符合3范式的设计原则，所以应该将这些属性提出，作为单独的实体，于是，我们的选课系统的数据库模型就变为如图所示：</p>  <p><a href="http://images.cnblogs.com/cnblogs_com/studyzy/WindowsLiveWriter/8b52fb11571c_10DB3/image1.png" target="_blank"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/studyzy/WindowsLiveWriter/8b52fb11571c_10DB3/image1_thumb.png" width="889" height="566" /></a> </p>  <p>再说下电子商务系统的模型，里面最重要的一个实体&#8220;商品&#8221;会包含很多属性，比如大小、颜色、重量、卖价&#8230;&#8230;，这其中，大小、颜色本身也可以作为实体抽取出来，以便于进行维护，所以我们的电子商务系统的模型便为：</p>  <p><a href="http://images.cnblogs.com/cnblogs_com/studyzy/WindowsLiveWriter/8b52fb11571c_10DB3/image_22.png" target="_blank"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/studyzy/WindowsLiveWriter/8b52fb11571c_10DB3/image_thumb_7.png" width="857" height="553" /></a>&nbsp;</p>  <p><strong>6.细节调整</strong></p>  <p>现在整个模型已经基本上完成了，但是仍然有几个地方需要进一步的确认和调整：属性的数据类型和实体之间的关系。现在数据库模型中，所有的属性的数据类型都是Undefined，需要根据系统要求、业务需求和调研来确定每个属性的数据类型。但一般来说还是具有一定的规则可循：</p>  <ul>   <li>自增ID用Integer型，如果数据量会特别特别大的话，可以使用长整型。 </li>    <li>涉及到金额的用Money类型。 </li>    <li>涉及字符串的确定该属性中是否有可能出现中文，如果有中文出现的，用variable multibyte，没有中文出现那就用Characters或者variable Characters。 </li>    <li>如果是枚举类型的，用Byte。 </li>    <li>日期和时间类型的，确定是要用日期还是用时间，或者两者都需要记录。 </li>    <li>具有小数的用float类型。 </li> </ul>  <p>按照实际情况将模型中的每个属性的数据类型进行修改。另外就是实体之间的关系，在默认情况下，添加的实体关系是一对多的关系，另外也可能存在一对一或者多对多的关系，除了这些关系外，另外还需要确定对应的关系实体是否是必须的。一对多中，一这部分就存在0,1 和1,1两种情况；多的部分存在0,n和1,n两种情况。最常见的情况是1,1:0,n，也就是说多的一端肯定会对应一个一的实体，而一的一端可以对应0到多个实体。</p>  <p><a href="http://images.cnblogs.com/cnblogs_com/studyzy/WindowsLiveWriter/8b52fb11571c_10DB3/image_10.png" target="_blank"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/studyzy/WindowsLiveWriter/8b52fb11571c_10DB3/image_thumb_3.png" width="996" height="562" /></a> </p>  <p>再比如电子商务系统，确定该数据库模型中每个实体属性的数据类型，然后修改实体之间的关系，将必须存在值对应的地方修改为1,1或者1,n即可。</p>  <p><a href="http://images.cnblogs.com/cnblogs_com/studyzy/WindowsLiveWriter/8b52fb11571c_10DB3/image_12.png" target="_blank"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/studyzy/WindowsLiveWriter/8b52fb11571c_10DB3/image_thumb_4.png" width="991" height="522" /></a> </p>  <p>&nbsp;</p>  <p>&nbsp;</p>  <p>通过以上几步操作，我们可以建立完整的数据库概念模型，主要应该关注在实体的建立（核心就是要找到实体的主键）和实体关系的建立（核心就是找到实体直接是一对多还是多对多或者一对一），只要把这两点做好，那么整个模型的框架就搭建好了。</p><img src="http://www.cnblogs.com/studyzy/aggbug/1643976.html?type=1" width="1" height="1" alt=""/><p>评论: 3　<a href="http://www.cnblogs.com/studyzy/archive/2010/01/11/1643976.html#pagedcomment" target="_blank">查看评论</a>　<a href="http://www.cnblogs.com/studyzy/archive/2010/01/11/1643976.html#commentform" target="_blank">发表评论</a></p><p><a href="http://job.cnblogs.com/" target="_blank">找优秀程序员，就在博客园</a></p><hr/><p>最新新闻：<br/>· <a href="http://news.cnblogs.com/n/59265/" target="_blank">Pwn2Own前夕抓紧补 谷歌为Chrome浏览器发布11项安全补丁</a><span style="color:gray">(2010-03-21 08:21)</span><br/>· <a href="http://news.cnblogs.com/n/59264/" target="_blank">黑客大赛开始 iPhone成主要攻破目标</a><span style="color:gray">(2010-03-21 08:12)</span><br/>· <a href="http://news.cnblogs.com/n/59263/" target="_blank">给Chrome的一封信</a><span style="color:gray">(2010-03-21 07:35)</span><br/>· <a href="http://news.cnblogs.com/n/59262/" target="_blank">甲骨文将关闭OpenSSO</a><span style="color:gray">(2010-03-20 23:54)</span><br/>· <a href="http://news.cnblogs.com/n/59261/" target="_blank">专访陈晓薇：九城已重建、我还没想好去哪</a><span style="color:gray">(2010-03-20 22:07)</span><br/></p><p>编辑推荐：<a href="http://news.cnblogs.com/n/59093/" target="_blank">[视频]想做你的Code</a><br/></p><p>网站导航：<a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/" target="_blank">个人主页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/group/" target="_blank">小组</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://kb.cnblogs.com" target="_blank">知识库</a></p>]]></description></item><item><title>重新写了一个拼音输入法词库转换小程序</title><link>http://www.cnblogs.com/studyzy/archive/2009/12/31/1637030.html</link><dc:creator>深蓝</dc:creator><author>深蓝</author><pubDate>Thu, 31 Dec 2009 09:32:00 GMT</pubDate><guid>http://www.cnblogs.com/studyzy/archive/2009/12/31/1637030.html</guid><description><![CDATA[<p>阅读: 307 评论: 0 作者: <a href="http://www.cnblogs.com/studyzy/" target="_blank">深蓝</a> 发表于 2009-12-31 17:32 <a href="http://www.cnblogs.com/studyzy/archive/2009/12/31/1637030.html" target="_blank">原文链接</a></p><p>之前，由于我要从QQ拼音平台转换到搜狗拼音上，所以我写了一个小程序把QQ拼音词库转换为搜狗拼音词库。后来陆续收到来信，索要程序同时也希望把搜狗拼音词库转换为QQ拼音，所以我就在这个小程序上做了一点改进。这两天我给手机换了百度拼音输入法，之所以用这个输入法是因为这个输入法可以将词库保存到服务器上，那么我重装系统后重新安装输入法就可以把服务器上我的词库同步到我的手机上了。百度手机输入法支持本地文本文件的备份和还原，所以我就希望将我电脑中的输入法词库导入到手机中，这样我平时发短信就更快了。</p>  <p>为了能够把电脑上的QQ拼音词库和搜狗拼音词库（文本导出）转换到百度手机输入法上，于是我就继续改进了这个输入法词库转换小程序。小程序运行的界面如图所示：</p>  <p><a href="http://images.cnblogs.com/cnblogs_com/studyzy/WindowsLiveWriter/5092499e8ffa_EF09/image_2.png" target="_blank"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/studyzy/WindowsLiveWriter/5092499e8ffa_EF09/image_thumb.png" width="759" height="446" /></a> </p>  <p>以QQ拼音转百度为例，选择QQ拼音词库的路径，长度过滤默认是5，也就是说只要大于等于5个字的词就不转换，词频过滤默认是3，也就是说小于3的词频的词都不会转换，只有大于等于3的词才会转换。然后点击&#8220;QQ转百度&#8221;按钮，系统将成功转换符合条件的词并提示完成。</p>  <p>把转换后的词文件复制到手机上，然后运行百度手机输入法的用户词库管理-》用户词恢复-》从文本导入，即可。如果词库较大，会恢复很长很长时间，恢复后然后再做一下用户词备份，备份到百度即可。</p><p>&nbsp;<a href="http://files.cnblogs.com/studyzy/QQPY2SGPY1.2.zip" target="_blank">/Files/studyzy/QQPY2SGPY1.2.zip</a></p>  <p>现将程序源代码放出来，希望对需要的人士有所帮助。可执行文件在bin目录的Debug目录中，需要.net 2.0才能运行。</p><img src="http://www.cnblogs.com/studyzy/aggbug/1637030.html?type=1" width="1" height="1" alt=""/><p>评论: 0　<a href="http://www.cnblogs.com/studyzy/archive/2009/12/31/1637030.html#pagedcomment" target="_blank">查看评论</a>　<a href="http://www.cnblogs.com/studyzy/archive/2009/12/31/1637030.html#commentform" target="_blank">发表评论</a></p><p><a href="http://job.cnblogs.com/" target="_blank">找优秀程序员，就在博客园</a></p><hr/><p>最新新闻：<br/>· <a href="http://news.cnblogs.com/n/59265/" target="_blank">Pwn2Own前夕抓紧补 谷歌为Chrome浏览器发布11项安全补丁</a><span style="color:gray">(2010-03-21 08:21)</span><br/>· <a href="http://news.cnblogs.com/n/59264/" target="_blank">黑客大赛开始 iPhone成主要攻破目标</a><span style="color:gray">(2010-03-21 08:12)</span><br/>· <a href="http://news.cnblogs.com/n/59263/" target="_blank">给Chrome的一封信</a><span style="color:gray">(2010-03-21 07:35)</span><br/>· <a href="http://news.cnblogs.com/n/59262/" target="_blank">甲骨文将关闭OpenSSO</a><span style="color:gray">(2010-03-20 23:54)</span><br/>· <a href="http://news.cnblogs.com/n/59261/" target="_blank">专访陈晓薇：九城已重建、我还没想好去哪</a><span style="color:gray">(2010-03-20 22:07)</span><br/></p><p>编辑推荐：<a href="http://news.cnblogs.com/n/59093/" target="_blank">[视频]想做你的Code</a><br/></p><p>网站导航：<a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/" target="_blank">个人主页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/group/" target="_blank">小组</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://kb.cnblogs.com" target="_blank">知识库</a></p>]]></description></item><item><title>SQL Server 2008 R2主数据服务安装</title><link>http://www.cnblogs.com/studyzy/archive/2009/12/28/sqlserver2008r2-mds-setup.html</link><dc:creator>深蓝</dc:creator><author>深蓝</author><pubDate>Sun, 27 Dec 2009 16:17:00 GMT</pubDate><guid>http://www.cnblogs.com/studyzy/archive/2009/12/28/sqlserver2008r2-mds-setup.html</guid><description><![CDATA[<p>阅读: 307 评论: 1 作者: <a href="http://www.cnblogs.com/studyzy/" target="_blank">深蓝</a> 发表于 2009-12-28 00:17 <a href="http://www.cnblogs.com/studyzy/archive/2009/12/28/sqlserver2008r2-mds-setup.html" target="_blank">原文链接</a></p><p>SQL Server 2008 R2的主数据服务（Master Data Services，简称MDS）已经放出，目前是CTP版本，微软提供了下载地址：</p>
<p><a href="http://www.microsoft.com/downloads/details.aspx?displaylang=zh-cn&amp;FamilyID=fe0c6a31-5ad6-4eea-a865-73bbe2608bd1" target="_blank">http://www.microsoft.com/downloads/details.aspx?displaylang=zh-cn&amp;FamilyID=fe0c6a31-5ad6-4eea-a865-73bbe2608bd1</a></p>
<p>在下载页面中提供了SQL2008R2的安装试用，一个是DVD的文件，另外是自解压文件；第3个下载就是主数据服务的自解压文件：<a href="http://go.microsoft.com/fwlink/?LinkID=168578&amp;clcid=0x804" target="_blank">Master Data Services X64 可执行文件</a> ；第4个下载是StreamInsight，一个复杂事件处理的框架，这里暂不讲解。</p>
<p>主数据服务只提供了64位版本，所以必须要在64位的操作系统或者虚拟机中安装。微软的产品已经开始全面跨入64位平台，最新的Windows2008R2、Exchange2010、MOSS2010等都只推出64位版本。公司虽然配置的是64位的硬件，可惜安装的是32位的XP，所以没办法在本机或者本机虚拟机中安装MDS，感谢经理提供了一个Hyper-v给我，让我能够有条件试用MDS。闲话休说，进入正题！</p>
<p>主数据服务是什么？我在之前的一篇<a href="http://www.cnblogs.com/studyzy/archive/2009/06/23/1508782.html" target="_blank">介绍SQL Server 2008 R2的博客</a>中推荐过一篇<a href="http://www.ibm.com/developerworks/cn/data/library/techarticles/dm-0904loulj/index.html" target="_blank">主数据管理和实施的文章</a>，这里再次推荐一下，对主数据是什么存在疑问的可以仔细研读。</p>
<p>若要安装SQL2008R2的MDS，除了是64位操作系统外，还需要服务器上安装了ASP.NET的IIS，当然SQL2008R2数据库也是必须的。MDS主要包含：Asp.Net的应用程序用于进行主数据管理、Host在IIS中的WCF服务提供WebService、SQL2008R2数据库用于数据存储。在安装了IIS和SQL Server 2008 R2后，下载并安装MDS，安装完成后便可在开始菜单的&#8220;Microsoft SQL Server 2008 R2 November CTP&#8221;下的&#8220;Master Data Services&#8221;下找到&#8220;配置管理器&#8221;。打开配置管理器如图所示：</p>
<p><a href="http://images.cnblogs.com/cnblogs_com/studyzy/WindowsLiveWriter/SQLServer2008R2_136F4/image_2.png" target="_blank"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/studyzy/WindowsLiveWriter/SQLServer2008R2_136F4/image_thumb.png" width="640" height="447" /></a> </p>
<p>单击左边面板的&#8220;数据库&#8221;选项，切换到数据库配置界面，如图所示：</p>
<p><a href="http://images.cnblogs.com/cnblogs_com/studyzy/WindowsLiveWriter/SQLServer2008R2_136F4/image_4.png" target="_blank"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/studyzy/WindowsLiveWriter/SQLServer2008R2_136F4/image_thumb_1.png" width="640" height="405" /></a> </p>
<p>由于我们之前并没有创建过MDS的数据库，所以单击&#8220;Create Database&#8221;按钮，系统弹出创建MDS数据库向导窗口，以帮助创建MDS数据库。</p>
<p>向导窗口第一页只是一个说明，没有任何需要选择或者填写的，直接单击&#8220;下一步&#8221;按钮，进入数据库服务器配置界面，默认选择本地的数据库实例，由于这里我们MDS服务、IIS和SQL2008R2都在同一台服务器上，所以不需要修改，如图所示：</p>
<p><a href="http://images.cnblogs.com/cnblogs_com/studyzy/WindowsLiveWriter/SQLServer2008R2_136F4/image_6.png" target="_blank"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/studyzy/WindowsLiveWriter/SQLServer2008R2_136F4/image_thumb_2.png" width="640" height="426" /></a> </p>
<p>单击&#8220;下一步&#8221;按钮，进入数据库配置界面，输入要创建的MDS数据库的数据库名，然后使用默认的数据库配置即可，如图：</p>
<p><a href="http://images.cnblogs.com/cnblogs_com/studyzy/WindowsLiveWriter/SQLServer2008R2_136F4/image_8.png" target="_blank"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/studyzy/WindowsLiveWriter/SQLServer2008R2_136F4/image_thumb_3.png" width="640" height="426" /></a> </p>
<p>单击&#8220;下一步&#8221;按钮，进入服务帐户配置界面，系统默认使用当前的帐户，由于是在虚拟机中做实验，所以服务帐户和接下来的的Administrator Account都使用管理员帐户即可，不用修改。一直&#8220;下一步&#8221;直到系统进行MDS数据库的创建，如图所示：</p>
<p><a href="http://images.cnblogs.com/cnblogs_com/studyzy/WindowsLiveWriter/SQLServer2008R2_136F4/image_10.png" target="_blank"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/studyzy/WindowsLiveWriter/SQLServer2008R2_136F4/image_thumb_4.png" width="640" height="426" /></a> </p>
<p>创建MDS的数据库成功后，返回主数据服务配置管理器界面，可以看到当前的数据库配置，如图所示：</p>
<p><a href="http://images.cnblogs.com/cnblogs_com/studyzy/WindowsLiveWriter/SQLServer2008R2_136F4/image_12.png" target="_blank"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/studyzy/WindowsLiveWriter/SQLServer2008R2_136F4/image_thumb_5.png" width="640" height="405" /></a> </p>
<p>数据库配置成功后接下来配置Web，单击左侧的&#8220;Web配置&#8221;选项，切换到Web配置界面，配置Web站点和Web应用的数据库，如图所示：</p>
<p><a href="http://images.cnblogs.com/cnblogs_com/studyzy/WindowsLiveWriter/SQLServer2008R2_136F4/image_14.png" target="_blank"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/studyzy/WindowsLiveWriter/SQLServer2008R2_136F4/image_thumb_6.png" width="587" height="480" /></a> </p>
<p>这里我不使用已有的站点来创建Web应用，因为我的虚拟机中默认站点已经按照了MOSS2010虚拟机。单击&#8220;Create Site&#8221;按钮，弹出创建网站窗口，可以设置Web站点的名字、协议、IP、端口、应用程序池等，如图所示：</p>
<p><a href="http://images.cnblogs.com/cnblogs_com/studyzy/WindowsLiveWriter/SQLServer2008R2_136F4/image_16.png" target="_blank"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/studyzy/WindowsLiveWriter/SQLServer2008R2_136F4/image_thumb_7.png" width="419" height="480" /></a> </p>
<p>这里创建成功后就会在IIS中添加对应的网站，所以以后若需要修改配置时可以直接在IIS中对Web站点进行修改。创建成功后接下来创建Web应用的数据库，单击Web配置中的&#8220;Select&#8221;按钮，弹出连接MDS数据库的窗口，配置MDS数据库的链接属性（这里是同一台服务器，所以直接使用默认设置即可），然后单击&#8220;连接&#8221;按钮，选择前面创建的MDS数据库&#8220;MDSTest1&#8221;，如图所示：</p>
<p><a href="http://images.cnblogs.com/cnblogs_com/studyzy/WindowsLiveWriter/SQLServer2008R2_136F4/image_18.png" target="_blank"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/studyzy/WindowsLiveWriter/SQLServer2008R2_136F4/image_thumb_8.png" width="640" height="451" /></a> </p>
<p>单击&#8220;OK&#8221;按钮，回到Web配置界面，将Web Services区域的复选框&#8220;Enable Web Services for this Web application&#8221;设为选中，以启动WCF的Web服务。（当然，如果不希望发布WCF接口，那么也可以不选中该复选框。）最后单击&#8220;应用&#8221;按钮，系统将弹出一个成功提示，并可选择打开主数据管理Web站点，选择打开MDM站点，如图所示：</p>
<p><a href="http://images.cnblogs.com/cnblogs_com/studyzy/WindowsLiveWriter/SQLServer2008R2_136F4/image_22.png" target="_blank"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/studyzy/WindowsLiveWriter/SQLServer2008R2_136F4/image_thumb_10.png" width="605" height="480" /></a></p>
<p>接下来安装示例数据，单击Model Deployment Wizard连接，弹出模型部署向导，单击部署选项，然后选择部署的包文件，示例包文件在C:\Program Files\Microsoft SQL Server\Master Data Services\Samples\Packages\中，这里我们部署一个产品的包Product，然后一直&#8220;下一步&#8221;即可加载和部署包。</p>
<p>部署完成后返回主数据管理页面，便可选择Product模型和版本，如图所示：</p>
<p><a href="http://images.cnblogs.com/cnblogs_com/studyzy/WindowsLiveWriter/SQLServer2008R2_136F4/image_24.png" target="_blank"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/studyzy/WindowsLiveWriter/SQLServer2008R2_136F4/image_thumb_11.png" width="487" height="480" /></a> </p>
<p>单击&#8220;资源管理器&#8221;选项，便可查看Product的属性、结构、集合等，如图所示：</p>
<p><a href="http://images.cnblogs.com/cnblogs_com/studyzy/WindowsLiveWriter/SQLServer2008R2_136F4/image_26.png" target="_blank"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/studyzy/WindowsLiveWriter/SQLServer2008R2_136F4/image_thumb_12.png" width="488" height="480" /></a> </p>
<p>比如要查看Class属性的值，可单击&#8220;实体&#8221;，在下列菜单中选择Class即可查看到Class的值有哪些，如图所示：</p>
<p><a href="http://images.cnblogs.com/cnblogs_com/studyzy/WindowsLiveWriter/SQLServer2008R2_136F4/image_30.png" target="_blank"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/studyzy/WindowsLiveWriter/SQLServer2008R2_136F4/image_thumb_14.png" width="640" height="465" /></a> </p>
<p>另外还可以通过MDM对各种数据进行管理，至此我们的MDS便安装完成，SQL2008R2的MDS到底该怎么使用，在什么情况下使用，我将在接下来的文章中讲解。</p> <img src="http://www.cnblogs.com/studyzy/aggbug/1633697.html?type=1" width="1" height="1" alt=""/><p>评论: 1　<a href="http://www.cnblogs.com/studyzy/archive/2009/12/28/sqlserver2008r2-mds-setup.html#pagedcomment" target="_blank">查看评论</a>　<a href="http://www.cnblogs.com/studyzy/archive/2009/12/28/sqlserver2008r2-mds-setup.html#commentform" target="_blank">发表评论</a></p><p><a href="http://job.cnblogs.com/" target="_blank">找优秀程序员，就在博客园</a></p><hr/><p>最新新闻：<br/>· <a href="http://news.cnblogs.com/n/59265/" target="_blank">Pwn2Own前夕抓紧补 谷歌为Chrome浏览器发布11项安全补丁</a><span style="color:gray">(2010-03-21 08:21)</span><br/>· <a href="http://news.cnblogs.com/n/59264/" target="_blank">黑客大赛开始 iPhone成主要攻破目标</a><span style="color:gray">(2010-03-21 08:12)</span><br/>· <a href="http://news.cnblogs.com/n/59263/" target="_blank">给Chrome的一封信</a><span style="color:gray">(2010-03-21 07:35)</span><br/>· <a href="http://news.cnblogs.com/n/59262/" target="_blank">甲骨文将关闭OpenSSO</a><span style="color:gray">(2010-03-20 23:54)</span><br/>· <a href="http://news.cnblogs.com/n/59261/" target="_blank">专访陈晓薇：九城已重建、我还没想好去哪</a><span style="color:gray">(2010-03-20 22:07)</span><br/></p><p>编辑推荐：<a href="http://news.cnblogs.com/n/59093/" target="_blank">[视频]想做你的Code</a><br/></p><p>网站导航：<a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/" target="_blank">个人主页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/group/" target="_blank">小组</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://kb.cnblogs.com" target="_blank">知识库</a></p>]]></description></item><item><title>在PowerDesigner中设计物理模型3——视图、存储过程和函数</title><link>http://www.cnblogs.com/studyzy/archive/2009/12/18/1627334.html</link><dc:creator>深蓝</dc:creator><author>深蓝</author><pubDate>Fri, 18 Dec 2009 09:30:00 GMT</pubDate><guid>http://www.cnblogs.com/studyzy/archive/2009/12/18/1627334.html</guid><description><![CDATA[<p>阅读: 452 评论: 0 作者: <a href="http://www.cnblogs.com/studyzy/" target="_blank">深蓝</a> 发表于 2009-12-18 17:30 <a href="http://www.cnblogs.com/studyzy/archive/2009/12/18/1627334.html" target="_blank">原文链接</a></p><p><strong>视图</strong></p>
<p>在SQL Server中视图定义了一个SQL查询，一个查询中可以查询一个表也可以查询多个表，在PD中定义视图与在SQL Server中定义查询相似。例如要创几个所有学生的所有选课结果的视图，那么在工具栏中选择视图按钮，然后在设计面板中单击鼠标一次便可添加一个空白的视图，切换到鼠标指针模式，双击该视图便可打开视图的属性窗口。在General选项卡中，可以设置视图的名字和其他属性。</p>
<p><a href="http://images.cnblogs.com/cnblogs_com/studyzy/WindowsLiveWriter/PowerDesigner3_11F55/image_2.png"><img height="423" width="521" src="http://images.cnblogs.com/cnblogs_com/studyzy/WindowsLiveWriter/PowerDesigner3_11F55/image_thumb.png" alt="image" border="0" title="image" style="display: inline; border-width: 0px;" /></a> </p>
<p>Usage是表示视图是只读的视图还是可更新的视图，还有一个是check option选项，指定了 CHECK OPTION，也不能依据视图来验证任何直接对视图的基础表执行的更新。如果我们只创建一般的视图，那么就选择只查询选项。</p>
<p>Dimensional Type指定该视图表示的是维度还是事实，这个主要是在进行数据仓库多维数据建模时使用，一般情况下不需要指定。后面的两个复选框也不需要进行修改。Type使用默认的view选项。</p>
<p>切换到SQL Query选项卡，在文本框中可以设置视图定义的查询内容，建议直接先在SSMS中验证视图定义SQL语句的正确性，然后再将SQL语句复制粘贴到该文本框中。在定义视图时最好不要使用*，而应该使用各个需要的列名，这样在视图属性的Columns中才能看到每个列。设计SQL Query如图所示。</p>
<p><a href="http://images.cnblogs.com/cnblogs_com/studyzy/WindowsLiveWriter/PowerDesigner3_11F55/image_4.png"><img height="423" width="521" src="http://images.cnblogs.com/cnblogs_com/studyzy/WindowsLiveWriter/PowerDesigner3_11F55/image_thumb_1.png" alt="image" border="0" title="image" style="display: inline; border-width: 0px;" /></a> </p>
<p>当然，也可以在PD中使用自带的SQL编辑器编写SQL语句，单击右下角的&ldquo;Edit with SQL Editor&rdquo;按钮，即可弹出SQL Editor编辑器，编写SQL语句。</p>
<p><strong>存储过程和函数</strong></p>
<p>存储过程和用户自定义函数都是在同一个组件中设置的，在工具栏中单击Procedure按钮，然后在设计面板中单击一次便可添加一个Procedure。例如要创建一个存储过程根据学生的学号获得学生所选的课程，那么对于的操作如下：</p>
<p>在指针模式下双击添加的Procedure，打开Procedure属性窗口，在General选项卡中可以设置该存储过程的名字。</p>
<p><a href="http://images.cnblogs.com/cnblogs_com/studyzy/WindowsLiveWriter/PowerDesigner3_11F55/image_8.png"><img height="397" width="605" src="http://images.cnblogs.com/cnblogs_com/studyzy/WindowsLiveWriter/PowerDesigner3_11F55/image_thumb_3.png" alt="image" border="0" title="image" style="display: inline; border-width: 0px;" /></a> </p>
<p>然后切换到Definition选项卡，该选项卡中定义了存储过程的定义，在下拉列表框中，选择&lt;Default Procedure&gt;选项，如果是要定义函数，那么就需要选择&lt;Default Function&gt;选项，系统会根据选择的类型创建SQL语句的模板。</p>
<p><a href="http://images.cnblogs.com/cnblogs_com/studyzy/WindowsLiveWriter/PowerDesigner3_11F55/image_14.png"><img height="397" width="605" src="http://images.cnblogs.com/cnblogs_com/studyzy/WindowsLiveWriter/PowerDesigner3_11F55/image_thumb_6.png" alt="image" border="0" title="image" style="display: inline; border-width: 0px;" /></a> </p>
<p>在下面的SQL语句中，可以将create procedure [%QUALIFIER%]%PROC%保留，其他的删除，根据自己要创建的存储过程编写SQL语句。</p>
<div>
<pre>create procedure [%QUALIFIER%]%PROC%
@StudentID <span style="color: #0000ff;">int</span>
<span style="color: #0000ff;">as</span>
begin
select CourseName
from vwStudentCourse
where StudentID=@StudentID
end</pre>
</div>
<p>单击确定按钮，系统会根据编写的SQL语句，将所使用的表、视图与存储过程关联起来，如图所示：</p>
<p><a href="http://images.cnblogs.com/cnblogs_com/studyzy/WindowsLiveWriter/PowerDesigner3_11F55/image_20.png"><img height="163" width="407" src="http://images.cnblogs.com/cnblogs_com/studyzy/WindowsLiveWriter/PowerDesigner3_11F55/image_thumb_9.png" alt="image" border="0" title="image" style="display: inline; border-width: 0px;" /></a> </p>
<p>创建函数的过程与之类似，只是使用的是create function而不是create Procedure而已。</p>
<p>至此，最常见的数据库对象：表（表的约束）、视图、存储过程、函数等在PD的创建已经介绍完了，接下来会介绍PD的设置。</p><img src="http://www.cnblogs.com/studyzy/aggbug/1627334.html?type=1" width="1" height="1" alt=""/><p>评论: 0　<a href="http://www.cnblogs.com/studyzy/archive/2009/12/18/1627334.html#pagedcomment" target="_blank">查看评论</a>　<a href="http://www.cnblogs.com/studyzy/archive/2009/12/18/1627334.html#commentform" target="_blank">发表评论</a></p><p><a href="http://job.cnblogs.com/" target="_blank">找优秀程序员，就在博客园</a></p><hr/><p>最新新闻：<br/>· <a href="http://news.cnblogs.com/n/59265/" target="_blank">Pwn2Own前夕抓紧补 谷歌为Chrome浏览器发布11项安全补丁</a><span style="color:gray">(2010-03-21 08:21)</span><br/>· <a href="http://news.cnblogs.com/n/59264/" target="_blank">黑客大赛开始 iPhone成主要攻破目标</a><span style="color:gray">(2010-03-21 08:12)</span><br/>· <a href="http://news.cnblogs.com/n/59263/" target="_blank">给Chrome的一封信</a><span style="color:gray">(2010-03-21 07:35)</span><br/>· <a href="http://news.cnblogs.com/n/59262/" target="_blank">甲骨文将关闭OpenSSO</a><span style="color:gray">(2010-03-20 23:54)</span><br/>· <a href="http://news.cnblogs.com/n/59261/" target="_blank">专访陈晓薇：九城已重建、我还没想好去哪</a><span style="color:gray">(2010-03-20 22:07)</span><br/></p><p>编辑推荐：<a href="http://news.cnblogs.com/n/59093/" target="_blank">[视频]想做你的Code</a><br/></p><p>网站导航：<a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/" target="_blank">个人主页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/group/" target="_blank">小组</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://kb.cnblogs.com" target="_blank">知识库</a></p>]]></description></item><item><title>在PowerDesigner中设计物理模型2&amp;mdash;&amp;mdash;约束</title><link>http://www.cnblogs.com/studyzy/archive/2009/12/17/1626650.html</link><dc:creator>深蓝</dc:creator><author>深蓝</author><pubDate>Thu, 17 Dec 2009 11:45:00 GMT</pubDate><guid>http://www.cnblogs.com/studyzy/archive/2009/12/17/1626650.html</guid><description><![CDATA[<p>阅读: 361 评论: 0 作者: <a href="http://www.cnblogs.com/studyzy/" target="_blank">深蓝</a> 发表于 2009-12-17 19:45 <a href="http://www.cnblogs.com/studyzy/archive/2009/12/17/1626650.html" target="_blank">原文链接</a></p><p><strong>唯一约束</strong></p>  <p>唯一约束与创建唯一索引基本上是一回事，因为在创建唯一约束的时候，系统会创建对应的一个唯一索引，通过唯一索引来实现约束。不过唯一约束更直观的表达了对应列的唯一性，使得对应索引的目的更加清晰，所以一般建议创建唯一约束而不是只创建唯一索引。</p>  <p>在PD中创建唯一约束的操作，以教室表来说，RoomID是主键，必然是唯一的，RoomName如果我们也要去必须是唯一的，那么具体操作如下：</p>  <p>在PD的模型设计面板中，双击“教室”表，打开属性窗口，切换到&quot;”Keys”选项卡，可以看到里面有一行数据PK_ClassRoom，这是主键约束。添加一行数据，命名为UQ_RoomName，不能将右边的“P”列选上，然后单击工具栏的“属性”按钮，弹出UQ_RoomName的属性窗口，切换到列选项卡，单击增加列按钮，选择将RoomName列添加到其中，然后单击确定即可完成唯一约束的添加。</p>  <p><a href="http://images.cnblogs.com/cnblogs_com/studyzy/WindowsLiveWriter/PowerDesigner2_A96F/image_6.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/studyzy/WindowsLiveWriter/PowerDesigner2_A96F/image_thumb_2.png" width="441" height="480" /></a> </p>  <p>这样系统就会自动创建唯一约束。</p>  <p><strong>CHECK约束</strong></p>  <p>CHECK分为列约束和表约束，列约束是只对表中的某一个列进行的约束，可以在列的属性中进行设置，而表约束是对多个列进行的约束，需要在表的属性中进行设置（其实列约束也可以在表约束中设置）。</p>  <p>1.标准CHECK约束</p>  <p>对于一些常用的CHECK约束，可以直接通过设置界面来完成。以班级表为例，ClassName每个学校有自己的命名规则，假设这里规定ClassName必须以2开头，那么需要在ClassName列上定义CHECK约束，使得其满足命名规范。具体操作是在PD中双击Class表，打开Class的属性窗口，切换到列选项卡，选择ClassName列，单击工具栏的“属性”按钮，弹出ClassName的属性窗口，切换到StandardChecks选项卡如图：</p>  <p><a href="http://images.cnblogs.com/cnblogs_com/studyzy/WindowsLiveWriter/PowerDesigner2_A96F/image_26.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/studyzy/WindowsLiveWriter/PowerDesigner2_A96F/image_thumb_12.png" width="521" height="397" /></a> </p>  <p>在这个选项卡可以定义属性的标准检查约束，窗口中每项的参数的含义，如下：</p>  <table border="0" cellspacing="0" cellpadding="0"><tbody>     <tr>       <td width="72">参数</td>        <td width="354">说明</td>     </tr>      <tr>       <td>Minimum</td>        <td>属性可接受的最小数</td>     </tr>      <tr>       <td>Maximum </td>        <td>属性可接受的最大数</td>     </tr>      <tr>       <td>Default</td>        <td>属性不赋值时，系统提供的默认值</td>     </tr>      <tr>       <td>Unit</td>        <td>单位，如公里、吨、元</td>     </tr>      <tr>       <td>Format</td>        <td>属性的数据显示格式</td>     </tr>      <tr>       <td>Lowercase</td>        <td>属性的赋值全部变为小写字母</td>     </tr>      <tr>       <td>Uppercase</td>        <td>属性的赋值全部变为大写字母</td>     </tr>      <tr>       <td>Cannot modify</td>        <td>该属性一旦赋值不能再修改</td>     </tr>      <tr>       <td>List Of Values</td>        <td>属性赋值列表，除列表中的值，不能有其他的值</td>     </tr>      <tr>       <td>Label</td>        <td>属性列表值的标签</td>     </tr>   </tbody></table>  <p>2.直接编写SQL语句的CHECK约束</p>  <p>在前面弹出ClassName属性窗口中，单击左下角的“More”按钮，系统将弹出更多的选项卡，切换到“Additional Checks”选项卡，可以设置约束名和具体的约束内容，如图所示：</p>  <p><a href="http://images.cnblogs.com/cnblogs_com/studyzy/WindowsLiveWriter/PowerDesigner2_A96F/image_8.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/studyzy/WindowsLiveWriter/PowerDesigner2_A96F/image_thumb_3.png" width="513" height="480" /></a> </p>  <p>表级的CHECK约束与列级的CHECK约束设置类似，单击表属性窗口左下角的“More”按钮，切换到Check选项卡，设置CHECK约束的命名和SQL语句内容。</p>  <p><a href="http://images.cnblogs.com/cnblogs_com/studyzy/WindowsLiveWriter/PowerDesigner2_A96F/image_10.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/studyzy/WindowsLiveWriter/PowerDesigner2_A96F/image_thumb_4.png" width="521" height="433" /></a> </p>  <p>3.使用Rule创建约束</p>  <p>同样以班级名必须以2开头为例，通过Rule创建CHECK约束。首先需要创建一个Rule，双击Class表，打开表的属性窗口，切换到Rules选项卡，单击“Create a Object”按钮，系统将打开一个业务规则属性窗口，修改规则名，并将规则的类型修改为Constraint，如图所示：</p>  <p><a href="http://images.cnblogs.com/cnblogs_com/studyzy/WindowsLiveWriter/PowerDesigner2_A96F/image_16.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/studyzy/WindowsLiveWriter/PowerDesigner2_A96F/image_thumb_7.png" width="541" height="480" /></a> </p>  <p>然后切换到Expression选项卡，设置规则的内容为“ClassName LIKE '2%'”，单击确定按钮即可完成Rule的设置。切换到表属性的Check选项卡，默认约束内容中的“%RULES%”就是用来表示Rule中设置的内容，如果我们还有一些其他的CHECK约束内容，不希望在Rule中设置，而是在Check选项卡中设置，那么只需要删除%RULES%将CHECK约束内容添加进去，也可以保留%RULES%，然后在与%RULES%之间添加一个and即可。比如规定ClassID必须小于10000，那么我们可以将Check内容设置如下：</p>  <p><a href="http://images.cnblogs.com/cnblogs_com/studyzy/WindowsLiveWriter/PowerDesigner2_A96F/image_18.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/studyzy/WindowsLiveWriter/PowerDesigner2_A96F/image_thumb_8.png" width="521" height="433" /></a> </p>  <p>生成的脚本如下：</p>  <p>create table Class (   <br />&#160;&#160; ClassID&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; int&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; not null,    <br />&#160;&#160; ClassName&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; varchar(20)&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; not null,    <br />&#160;&#160; constraint PK_CLASS primary key nonclustered (ClassID),    <br />&#160;&#160; constraint CKT_CLASS check (ClassID&lt;10000),    <br />&#160;&#160; constraint ClassNameRule check (ClassName LIKE '2%')    <br />)    <br />go</p>  <p>可以看到，根据Rule生成的CHECK约束与在Check选项卡中设置的约束将分别创建一个约束，相互并不影响。</p>  <p><strong>默认约束</strong></p>  <p>默认约束是用户在没有输入值的情况下，系统给出默认的值。最常用的是CreateTime字段，设置默认值为getdate()，在用户创建一行数据时记录下创建时间。例如对于选课表，需要记录下选课的时间，则可以设置ApplyTime的默认值为getdate()函数。</p>  <p><a href="http://images.cnblogs.com/cnblogs_com/studyzy/WindowsLiveWriter/PowerDesigner2_A96F/image_22.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/studyzy/WindowsLiveWriter/PowerDesigner2_A96F/image_thumb_10.png" width="240" height="103" /></a> </p>  <p>设置默认值约束的操作如下：双击选课表，打开表属性窗口，选择ApplyTime字段，单击工具栏的属性按钮，打开列的属性窗口，切换到Standard Checks选项卡，在Default下拉列表框中选择getdate()即可。</p>  <p><a href="http://images.cnblogs.com/cnblogs_com/studyzy/WindowsLiveWriter/PowerDesigner2_A96F/image_24.png"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/studyzy/WindowsLiveWriter/PowerDesigner2_A96F/image_thumb_11.png" width="524" height="480" /></a> </p>  <p>至此我们所有的约束在PD中的设置都介绍完了，下一篇将介绍视图、存储过程等数据库对象。</p><img src="http://www.cnblogs.com/studyzy/aggbug/1626650.html?type=1" width="1" height="1" alt=""/><p>评论: 0　<a href="http://www.cnblogs.com/studyzy/archive/2009/12/17/1626650.html#pagedcomment" target="_blank">查看评论</a>　<a href="http://www.cnblogs.com/studyzy/archive/2009/12/17/1626650.html#commentform" target="_blank">发表评论</a></p><p><a href="http://job.cnblogs.com/" target="_blank">找优秀程序员，就在博客园</a></p><hr/><p>最新新闻：<br/>· <a href="http://news.cnblogs.com/n/59265/" target="_blank">Pwn2Own前夕抓紧补 谷歌为Chrome浏览器发布11项安全补丁</a><span style="color:gray">(2010-03-21 08:21)</span><br/>· <a href="http://news.cnblogs.com/n/59264/" target="_blank">黑客大赛开始 iPhone成主要攻破目标</a><span style="color:gray">(2010-03-21 08:12)</span><br/>· <a href="http://news.cnblogs.com/n/59263/" target="_blank">给Chrome的一封信</a><span style="color:gray">(2010-03-21 07:35)</span><br/>· <a href="http://news.cnblogs.com/n/59262/" target="_blank">甲骨文将关闭OpenSSO</a><span style="color:gray">(2010-03-20 23:54)</span><br/>· <a href="http://news.cnblogs.com/n/59261/" target="_blank">专访陈晓薇：九城已重建、我还没想好去哪</a><span style="color:gray">(2010-03-20 22:07)</span><br/></p><p>编辑推荐：<a href="http://news.cnblogs.com/n/59093/" target="_blank">[视频]想做你的Code</a><br/></p><p>网站导航：<a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/" target="_blank">个人主页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/group/" target="_blank">小组</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://kb.cnblogs.com" target="_blank">知识库</a></p>]]></description></item><item><title>在PowerDesigner中设计物理模型1——表和主外键</title><link>http://www.cnblogs.com/studyzy/archive/2009/12/15/1624899.html</link><dc:creator>深蓝</dc:creator><author>深蓝</author><pubDate>Tue, 15 Dec 2009 08:19:00 GMT</pubDate><guid>http://www.cnblogs.com/studyzy/archive/2009/12/15/1624899.html</guid><description><![CDATA[<p>阅读: 643 评论: 0 作者: <a href="http://www.cnblogs.com/studyzy/" target="_blank">深蓝</a> 发表于 2009-12-15 16:19 <a href="http://www.cnblogs.com/studyzy/archive/2009/12/15/1624899.html" target="_blank">原文链接</a></p><p>在PD中建立物理模型由以下几种办法：</p>  <ol>   <li>直接新建物理模型。 </li>    <li>设计好概念模型，然后由概念模型生成物理模型。 </li>    <li>设计好逻辑模型，然后由逻辑模型生成物理模型。 </li>    <li>使用逆向工程的方法，连接到现有的数据库，由数据库生成物理模型。 </li> </ol>  <p>物理模型能够直观的反应出当前数据库的结构。在数据库中的表、视图、存储过程等数据库对象都可以在物理模型中进行设计。由于物理模型和数据库的一致性，接下来以数据库对象和物理模型对象的对应来一一介绍：</p>  <p>表</p>  <p>新建物理模型时需要指定物理模型对应的DBMS，这里我们使用SQL Server 2008，新建一个物理模型后，系统会显示一个专门用于物理模型设计的工具栏：</p>  <p><a href="http://images.cnblogs.com/cnblogs_com/studyzy/WindowsLiveWriter/PowerDesigner_9527/image_2.png" target="_blank"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/studyzy/WindowsLiveWriter/PowerDesigner_9527/image_thumb.png" width="564" height="30" /></a> </p>  <p>若要在物理模型中添加一个表，单击&#8220;表&#8221;按钮，然后再到模型设计面板中单击一次便可添加一个表，系统默认为表命名为Table_n，这里的n会随着添加的表增多而顺序增加。添加的表是没有任何列的，如图所示：</p>  <p><a href="http://images.cnblogs.com/cnblogs_com/studyzy/WindowsLiveWriter/PowerDesigner_9527/image_4.png" target="_blank"><img style="border-right-width: 0px; display: inline; border-top-width: 0px; border-bottom-width: 0px; border-left-width: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/studyzy/WindowsLiveWriter/PowerDesigner_9527/image_thumb_1.png" width="85" height="70" /></a> </p>  <p>单击工具栏的鼠标指针按钮，将鼠标切换回指针模式，然后双击一个表，系统将打开表属性窗口，在General选项卡中可以设置表的Name、Code等属性。例如我们要新建一个教室表（ClassRoom），则可修改Name和Code。Name是在模型中显示的名称，Code是生成数据库表的时候的实际表名。另外Name中的内容还会作为SQL Server中的表备注。</p>  <p><a href="http://images.cnblogs.com/cnblogs_com/studyzy/WindowsLiveWriter/PowerDesigner_9527/image9.png" target="_blank"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/studyzy/WindowsLiveWriter/PowerDesigner_9527/image9_thumb.png" width="521" height="433" /></a> </p>  <p>单击Columns切换到列选项卡，在下面的列表中可以添加表中的列。Name是模型上显示的名称，Code是生成的实际的表名，后面的3个复选框P代办主键、F代表外键，M代表不能为空。为教室表设计了两个列，如图所示：</p>  <p><a href="http://images.cnblogs.com/cnblogs_com/studyzy/WindowsLiveWriter/PowerDesigner_9527/image14.png" target="_blank"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/studyzy/WindowsLiveWriter/PowerDesigner_9527/image14_thumb.png" width="521" height="433" /></a>&nbsp;</p>  <p>主键</p>  <p>在设计一个表时，一般情况下每个表都会有一个主键，主键分为单列主键和复合主键。在为表设置主键时有以下几种办法：</p>  <p>1.在Columns选项卡中，直接选中主键列的P列复选框，这是最简单的方式。</p>  <p>2.选中一个列，然后单击工具栏中的&#8220;属性&#8221;按钮，系统将弹出列属性窗口，在该窗口中可以设置该列的各种属性，当然也包括该列是否是否是主键。另外还有一个很重要的复选框是&#8220;Identity&#8221;。选中Identity复选框则表示该列为自增列。</p>  <p><a href="http://images.cnblogs.com/cnblogs_com/studyzy/WindowsLiveWriter/PowerDesigner_9527/image19.png" target="_blank"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/studyzy/WindowsLiveWriter/PowerDesigner_9527/image19_thumb.png" width="521" height="397" /></a> </p>  <p>3.切换到Keys选项卡中，在其中添加一行命名为PK_ClassRoom，然后单击工具栏的&#8220;属性&#8221;按钮，打开键属性窗口，在该窗口中切换到Columns选项卡，单击添加列按钮，弹出列选择窗口，选中主键中应该包含的列，单击确定按钮即可完成主键的创建。</p>  <p><a href="http://images.cnblogs.com/cnblogs_com/studyzy/WindowsLiveWriter/PowerDesigner_9527/image24.png" target="_blank"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/studyzy/WindowsLiveWriter/PowerDesigner_9527/image24_thumb.png" width="543" height="480" /></a> </p>  <p>另外需要注意的是，在建立主键时，系统会在主键上建立索引，索引分为聚集索引和非聚集索引，在&#8220;键属性&#8221;窗口的General选项卡中可以设置该主键上建立的索引是聚集索引还是非聚集索引，如图所示：</p>  <p><a href="http://images.cnblogs.com/cnblogs_com/studyzy/WindowsLiveWriter/PowerDesigner_9527/image28.png" target="_blank"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/studyzy/WindowsLiveWriter/PowerDesigner_9527/image28_thumb.png" width="521" height="397" /></a> </p>  <p>外键</p>  <p>如果是由概念模型或者逻辑模型生成物理模型，那么外键是通过Relationship生成的，也可以通过工具栏中的Reference来实现两表之间的外键关系。假如一个课程只会在一个固定的教室上课，而一个教室会安排多个课程在不同的时间上课，所以教室和课程是一对多的关系，那么课程表中就需要添加RoomID列以形成外键列，具体操作方法就是在工具栏中单击&#8220;Reference&#8221;按钮，然后在设计面板中，课程表上按下鼠标左键，并拖拽到教师表中放开鼠标，这时如果课程表中没有RoomID列，系统会自动创建RoomID列并创建该列上的外键引用，如果已经存在RoomID列，则只添加外键引用，不会再添加新列。</p>  <p>&nbsp;<a href="http://images.cnblogs.com/cnblogs_com/studyzy/WindowsLiveWriter/PowerDesigner_9527/image1.png" target="_blank"><img style="border-bottom: 0px; border-left: 0px; display: inline; border-top: 0px; border-right: 0px" title="image" border="0" alt="image" src="http://images.cnblogs.com/cnblogs_com/studyzy/WindowsLiveWriter/PowerDesigner_9527/image1_thumb.png" width="244" height="258" /></a> </p>  <p>切换到鼠标指针模式，双击箭头，系统将弹出引用的属性窗口，在属性窗口中可以设置该引用的Name、Code、关联的列、约束名、更新策略和删除策略等。</p>  <p>下一篇文章将会介绍其他约束具体包括：</p>  <p>1.CHECK约束</p>  <p>2.默认值约束</p>  <p>3.非空约束</p>  <p>&#8230;&#8230;</p>  <p>另外在物理模型中还包括：视图、存储过程、函数、触发器等都会在接下来的几篇文章中讲解到。</p><img src="http://www.cnblogs.com/studyzy/aggbug/1624899.html?type=1" width="1" height="1" alt=""/><p>评论: 0　<a href="http://www.cnblogs.com/studyzy/archive/2009/12/15/1624899.html#pagedcomment" target="_blank">查看评论</a>　<a href="http://www.cnblogs.com/studyzy/archive/2009/12/15/1624899.html#commentform" target="_blank">发表评论</a></p><p><a href="http://job.cnblogs.com/" target="_blank">找优秀程序员，就在博客园</a></p><hr/><p>最新新闻：<br/>· <a href="http://news.cnblogs.com/n/59265/" target="_blank">Pwn2Own前夕抓紧补 谷歌为Chrome浏览器发布11项安全补丁</a><span style="color:gray">(2010-03-21 08:21)</span><br/>· <a href="http://news.cnblogs.com/n/59264/" target="_blank">黑客大赛开始 iPhone成主要攻破目标</a><span style="color:gray">(2010-03-21 08:12)</span><br/>· <a href="http://news.cnblogs.com/n/59263/" target="_blank">给Chrome的一封信</a><span style="color:gray">(2010-03-21 07:35)</span><br/>· <a href="http://news.cnblogs.com/n/59262/" target="_blank">甲骨文将关闭OpenSSO</a><span style="color:gray">(2010-03-20 23:54)</span><br/>· <a href="http://news.cnblogs.com/n/59261/" target="_blank">专访陈晓薇：九城已重建、我还没想好去哪</a><span style="color:gray">(2010-03-20 22:07)</span><br/></p><p>编辑推荐：<a href="http://news.cnblogs.com/n/59093/" target="_blank">[视频]想做你的Code</a><br/></p><p>网站导航：<a href="http://www.cnblogs.com" target="_blank">博客园首页</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/" target="_blank">个人主页</a>&nbsp;&nbsp;<a href="http://news.cnblogs.com" target="_blank">新闻</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/ing/" target="_blank">闪存</a>&nbsp;&nbsp;<a href="http://home.cnblogs.com/group/" target="_blank">小组</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com/q/" target="_blank">博问</a>&nbsp;&nbsp;<a href="http://space.cnblogs.com" target="_blank">社区</a>&nbsp;&nbsp;<a href="http://kb.cnblogs.com" target="_blank">知识库</a></p>]]></description></item></channel></rss>