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