基于MML電子病歷存儲(chǔ)模型研究
設(shè)計(jì)實(shí)現(xiàn)對(duì)象一關(guān)系數(shù)據(jù)庫(kù)時(shí),每個(gè)對(duì)象都要考慮采用何種類型,是否使用用戶自定義類型(UDT)。對(duì)每個(gè)對(duì)象可能有的查詢/操作認(rèn)真分析,據(jù)此設(shè)計(jì)用戶自定義函數(shù)(UDF)。例如,通過名字Bob Smith查詢病人電話列表,下面列出對(duì)象一關(guān)系的SQL語(yǔ)句:SELECT o.phoneFROM oo.person o WHERE o.hasName('Bob','Smith');這里必須為oo.person對(duì)象設(shè)計(jì)該hasName自定義方法,不然將無法進(jìn)行此查詢。在對(duì)象一關(guān)系模型中需要設(shè)計(jì)大量自定義方法。在傳統(tǒng)關(guān)系型模型,該查詢可以通過下列語(yǔ)句實(shí)現(xiàn):SELECT o.phone FROM person p,person-name n person-phom o WHERE n.name='Bob Smith'AND n.id=p.id AND o.id=p.id;需要連接3個(gè)表。
對(duì)象一關(guān)系模型中表的查詢/操作比傳統(tǒng)的關(guān)系型模型簡(jiǎn)單直觀,但是需要編程實(shí)現(xiàn)大量的自定義函數(shù)。此外由于N∶M關(guān)系是通過在對(duì)象中添加嵌套表或數(shù)組實(shí)現(xiàn)的,設(shè)計(jì)人員必須認(rèn)真考慮應(yīng)該將其添加到該關(guān)系相關(guān)的哪個(gè)對(duì)象上。
4.2 時(shí)延分析
對(duì)兩個(gè)均包含100份MML電子病歷的對(duì)象一關(guān)系數(shù)據(jù)庫(kù)和傳統(tǒng)關(guān)系型數(shù)據(jù)庫(kù)進(jìn)行比較。選取下面4組典型的數(shù)據(jù)庫(kù)操作分別在2個(gè)數(shù)據(jù)庫(kù)上運(yùn)行,以比較性能:
(1)使用簡(jiǎn)單搜索規(guī)則對(duì)單個(gè)病人進(jìn)行數(shù)據(jù)檢索,例如通過名字檢索病人數(shù)據(jù);
(2)多病人數(shù)據(jù)檢索查詢;
(3)檢索MML emr tab表數(shù)據(jù)(不是病人數(shù)據(jù));
(4)增、刪和更新數(shù)據(jù)。
使用Oracle9i實(shí)現(xiàn)2個(gè)數(shù)據(jù)庫(kù),共進(jìn)行13組操作,每組運(yùn)行5次取平均時(shí)間。實(shí)驗(yàn)結(jié)果表3所示,對(duì)象一關(guān)系模型包含2列,2個(gè)版本的差別在于版本二只在必須的情況下使用用戶自定義函數(shù)(UDF)。Q1到Q3屬于分組一,在兩種數(shù)據(jù)庫(kù)中都沒有使用UDF。Q4到Q6屬于分組二,分別對(duì)oo_person_tab,oo_organization和oo_MML表進(jìn)行多病人數(shù)據(jù)檢索查詢。以Q4為例,該查詢需要掃描整個(gè)oo_person_tab表以便執(zhí)行hasName()。Q4的時(shí)間復(fù)雜度為O(n)。使用類似hasName(),hasID()等UDF的查詢依賴于表的行數(shù)。關(guān)系型數(shù)據(jù)庫(kù)采用優(yōu)化技術(shù),時(shí)間復(fù)雜度為O(log(n)),對(duì)對(duì)象一關(guān)系數(shù)據(jù)庫(kù)的優(yōu)化由于UDF非常復(fù)雜,難于優(yōu)化。Q7,Q8和Q9屬于分組三,在對(duì)象一關(guān)系數(shù)據(jù)庫(kù)的2個(gè)實(shí)現(xiàn)中也同樣發(fā)現(xiàn),版本二由于只在必須時(shí)使用UDF,執(zhí)行時(shí)延得以大幅縮短。分組四同樣是使用UDF的緣故,執(zhí)行效率傳統(tǒng)關(guān)系型數(shù)據(jù)明顯高于對(duì)象一關(guān)系型。
5 結(jié) 語(yǔ)
設(shè)計(jì)層次上,對(duì)象一關(guān)系模型因?yàn)楸淼臄?shù)量比較少而顯得比較簡(jiǎn)潔,但設(shè)計(jì)的過程不如關(guān)系型模型直觀,設(shè)計(jì)人員需要認(rèn)真考慮對(duì)象間的關(guān)系應(yīng)當(dāng)如何表示。實(shí)現(xiàn)層次上,對(duì)象一關(guān)系模型需要提供支持多值屬性和關(guān)系的搜索方法的具體實(shí)現(xiàn),可以使用嵌套表或數(shù)組表示;關(guān)系型模型則采用獨(dú)立表,不需要設(shè)計(jì)人員編寫代碼。
查詢和執(zhí)行方面,在對(duì)象一關(guān)系模型上的查詢表達(dá)式簡(jiǎn)潔直觀,但需要事先編程實(shí)現(xiàn)對(duì)象方法。傳統(tǒng)關(guān)系型模型的數(shù)據(jù)庫(kù)操作效率要高過對(duì)象一關(guān)系模型。綜上,因?yàn)榛贛ML的電子病歷系統(tǒng)的原型非常復(fù)雜,使用對(duì)象一關(guān)系型存儲(chǔ)模型可以簡(jiǎn)化數(shù)據(jù)庫(kù)的設(shè)計(jì)和實(shí)現(xiàn),縮短開發(fā)周期;同時(shí)可以結(jié)合傳統(tǒng)關(guān)系型的優(yōu)點(diǎn),只在必須用用戶自定義方法的時(shí)候才使用UDF,一方面可以提高執(zhí)行效率;另一方面可以盡量避免因?yàn)闆]有提供必要的UDF而不能執(zhí)行電子病歷靈活多樣的數(shù)據(jù)庫(kù)查詢操作。
更多醫(yī)療電子信息請(qǐng)關(guān)注:21ic醫(yī)療電子頻道
評(píng)論