墨色風雨
2018-07-23 08:10:32
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;">數(shù)據(jù)庫設計難題的求教</span></a> </h1> <div class="post"> <div class="postcontent"> <p>最近在設計一個數(shù)據(jù)庫,但是碰到這樣一個難題,一直找不到合適的解決方案,希望有過類似經(jīng)驗的高手能夠幫忙分析下,看有沒有好的處理策略。</p> <p>舉個管道建設中的例子吧,同樣有三個對象:<br />管道:起點連接對象,結(jié)束點連接對象,管道的其他屬性信息<br />管件:管件名稱、管件類型<br />設備:設備名稱、設備編號、設備所屬單位<br /><br />關系是:管道的起點和終點連接管件或者設備,而設備和管件沒有多少屬性是相同的,所以不能合并,這時候表的關系應該如何建?<br /><br />目前的一種考慮是使用軟關聯(lián),就是在管道的表里用4個字段,分別是起點對象類型和起點對象ID,終點連接類型和終點連接ID,但是數(shù)據(jù)庫建模時這種關系無法用實體關系圖合理的展示,也無法在數(shù)據(jù)庫中用外鍵關系來描述,無法保證數(shù)據(jù)的完整性,所以感覺不是很好的解決方案,想知道大家有沒有更好的思路。:)
2 回答

森林海
TA貢獻2011條經(jīng)驗 獲得超2個贊
其實不必追求實體關系圖的合理,也未必非要用外鍵,雖然可以沒有約束,但是依然可以由程序來很好的管理這些
不過非要追求這個的話,我以前倒是做過一個,效果也還可以,可以參考一下:
管道表里包括:起點連接管件ID、起點連接設備ID、終點連接管理ID、終點連接設備ID、其他屬性信息
前面四個ID都是外鍵,管件ID和設備ID分別關聯(lián)到各自的表,四個都設置為可空,這樣在程序中或者select時判斷一下到底取哪個,但依然存在的問題是必須由程序來保證起點和終點都各自只有一個ID,另一個要為NULL。
另外一個辦法,可以避免這個很麻煩的判斷,但是其他地方要麻煩一些,還是這些字段,增加一個起點連接類型和終點連接類型,select的時候在inner join中除了ID關聯(lián)之外,增加對連接類型的條件,另外也可以使用union all來進行查詢

幕布斯7119047
TA貢獻1794條經(jīng)驗 獲得超8個贊
添加一個中間表,有4個字段:
管道ID、
起點或中點【管道的起點還是終點】、
連接對象類型【管道的起點或終點是設備還是管件】、
連接對象ID【管件或設備的ID】
添加回答
舉報
0/150
提交
取消