資料庫設計的乙個難題的解決

2022-07-18 07:57:14 字數 850 閱讀 1838

最近在設計乙個資料庫,但是碰到這樣乙個難題,一直找不到合適的解決方案,希望有過類似經驗的高手能夠幫忙分析下,看有沒有好的處理策略。

舉個管道建設中的例子吧,同樣有三個物件:

管道:起點連線物件,結束點連線物件,管道的其他屬性資訊

管件:管件名稱、管件型別

裝置:裝置名稱、裝置編號、裝置所屬單位

關係是:管道的起點和終點連線管件或者裝置,而裝置和管件沒有多少屬性是相同的,所以不能合併,這時候表的關係應該如何建?

目前的一種考慮是使用軟關聯,就是在管道的表裡用4個字段,分別是起點物件型別和起點物件id,終點連線型別和終點連線id,但是資料庫建模時這種關係無法用實體關係圖合理的展示,也無法在資料庫中用外來鍵關係來描述,無法保證資料的完整性,所以感覺不是很好的解決方案,想知道大家有沒有更好的思路。:)

提問者:enjoy everyday- 初學一級

最佳答案

其實不必追求實體關係圖的合理,也未必非要用外來鍵,雖然可以沒有約束,但是依然可以由程式來很好的管理這些

管道表裡包括:起點連線管件id、起點連線裝置id、終點連線管理id、終點連線裝置id、其他屬性資訊

前面四個id都是外來鍵,管件id和裝置id分別關聯到各自的表,四個都設定為可空,這樣在程式中或者select時判斷一下到底取哪個,但依然存在的問題是必須由程式來保證起點和終點都各自只有乙個id,另乙個要為null。

另外乙個辦法,可以避免這個很麻煩的判斷,但是其他地方要麻煩一些,還是這些字段,增加乙個起點連線型別和終點連線型別,select的時候在inner join中除了id關聯之外,增加對連線型別的條件,另外也可以使用union all來進行查詢

2008/11/20 20:44:11 回答者:丁學

乙個站內簡訊的資料庫設計

先說一下需求和環境 乙個系統的站內信模組,有存在大量的按部門 的可能,相對的個人對個人的 是比較少的。資料庫是採用的mysql5.0。最先的資料庫設計如下 兩張表 一張msg表,字段如下 id int 自增長id senderid int 外來鍵關聯傳送者id title varchar 128 簡...

乙個站內簡訊的資料庫設計

先說一下需求和環境 乙個系統的站內信模組,有存在大量的按部門 的可能,相對的個人對個人的 是比較少的。資料庫是採用的mysql5.0。最先的資料庫設計如下 兩張表 一張msg表,字段如下 id int 自增長id senderid int 外來鍵關聯傳送者id title varchar 128 簡...

乙個專案報表資料庫設計的問題

如何設計的合理.2專案管理模組 縣區使用者登陸成功後進入系統主頁面,能對縣區內企業填寫的專案進行管理,有查詢功能根據查詢條件生成報表,有列印 匯出功能。市使用者有最高許可權,能對縣區使用者企業進行管理,有查詢功能根據查詢條件生成報表,有列印 匯出功能。市使用者有最高許可權。一 資料庫設計與分析 本系...