首页 新闻 会员 周边

数据库设计难题的求教

0
悬赏园豆:20 [已解决问题] 解决于 2008-11-21 09:37
<h1 class="block_title"><a id="AjaxHolder_ctl01_TitleUrl" href="http://www.cnblogs.com/linux254/archive/2008/11/20/1337836.html"></a><a id="AjaxHolder_ctl01_TitleUrl" href="http://www.cnblogs.com/linux254/archive/2008/11/20/1337836.html"><span style="color: #800080;">数据库设计难题的求教</span></a>&nbsp;</h1> <div class="post"> <div class="postcontent"> <p>最近在设计一个数据库,但是碰到这样一个难题,一直找不到合适的解决方案,希望有过类似经验的高手能够帮忙分析下,看有没有好的处理策略。</p> <p>举个管道建设中的例子吧,同样有三个对象:<br />管道:起点连接对象,结束点连接对象,管道的其他属性信息<br />管件:管件名称、管件类型<br />设备:设备名称、设备编号、设备所属单位<br /><br />关系是:管道的起点和终点连接管件或者设备,而设备和管件没有多少属性是相同的,所以不能合并,这时候表的关系应该如何建?<br /><br />目前的一种考虑是使用软关联,就是在管道的表里用4个字段,分别是起点对象类型和起点对象ID,终点连接类型和终点连接ID,但是数据库建模时这种关系无法用实体关系图合理的展示,也无法在数据库中用外键关系来描述,无法保证数据的完整性,所以感觉不是很好的解决方案,想知道大家有没有更好的思路。:)</p> </div> </div>
Enjoy Everyday的主页 Enjoy Everyday | 初学一级 | 园豆:100
提问于:2008-11-20 19:31
< >
分享
最佳答案
0

其实不必追求实体关系图的合理,也未必非要用外键,虽然可以没有约束,但是依然可以由程序来很好的管理这些

不过非要追求这个的话,我以前倒是做过一个,效果也还可以,可以参考一下:

管道表里包括:起点连接管件ID、起点连接设备ID、终点连接管理ID、终点连接设备ID、其他属性信息

前面四个ID都是外键,管件ID和设备ID分别关联到各自的表,四个都设置为可空,这样在程序中或者select时判断一下到底取哪个,但依然存在的问题是必须由程序来保证起点和终点都各自只有一个ID,另一个要为NULL。

另外一个办法,可以避免这个很麻烦的判断,但是其他地方要麻烦一些,还是这些字段,增加一个起点连接类型和终点连接类型,select的时候在inner join中除了ID关联之外,增加对连接类型的条件,另外也可以使用union all来进行查询

丁学 | 专家六级 |园豆:18730 | 2008-11-20 20:44
其他回答(1)
0

添加一个中间表,有4个字段:

管道ID、

起点或中点【管道的起点还是终点】、

连接对象类型【管道的起点或终点是设备还是管件】、

连接对象ID【管件或设备的ID】

上不了岸的鱼 | 园豆:4613 (老鸟四级) | 2008-11-20 20:56
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册