概念
半結構化數據(semi-structured data)。在做一個信息系統設計時肯定會涉及到數據的存儲,一般我們都會將系統信息保存在某個指定的關係資料庫中。我們會將數據按業務分類,並設計相應的表,然後將對應的信息保存到相應的表中。比如我們做一個業務系統,要保存員工基本信息:工號、姓名、性別、出生日期等等;我們就會建立一個對應的staff表。
但不是系統中所有信息都可以這樣簡單的用一個表中的欄位就能對應的。
地位
半結構化數據(semi-structured data)模型在資料庫系統中有著獨特的地位:
(1)它是一種適於資料庫集成的數據模型,也就是說,適於描述包含在兩個或多個資料庫(這些資料庫含有不同模式的相似數據)中的數據。
(2)它是一種標記服務的基礎模型,用於Web上共享信息。
必要性
E/R、UML、關係模型、ODL,每個都是以模式開始。模式是一种放置數據的嚴格框架。這種嚴格性提供了某些優點。特別的,關係模型的成功在於它的高效實現。這種高效性來自於關係資料庫中的數據必須符合其模式並且該模式為查詢處理器所知這一事實。
另一方面,對半結構化數據模型感興趣的動機主要是它的靈活性。特別的,半結構化數據是“無模式”的。更準確地說,其數據是自描述的。它攜帶了關於其模式的信息,並且這樣的模式可以隨時間在單一資料庫內任意改變。
人們可能很自然地想知道無模式地創建資料庫是否存在優點,在這樣的資料庫中,可以隨意的輸入數據,並且訪問該數據時你感覺到的模式信息就是適合它的模式。實際上有一些小規模的信息系統,如Lotos Notes,它們就採用了自描述數據的方法。這種靈活性可能使查詢處理更加困難,但它給用戶提供了顯著地優勢。例如,可以在半結構化模型中維護一個電影資料庫,並且能如用戶所願地添加類似“我喜歡看此部電影嗎?”這樣的新屬性。這些屬性不需要所有電影都有值,或者甚至不需要多於一個電影有值。同樣的,可以添加類似“homage to”這樣的聯繫而不需要改變模式,或者甚至表示不止一對的電影間的聯繫。
數據分類
結構化數據
就像上面舉的例子。這種類別的數據最好處理,只要簡單的建立一個對應的表就可以了。
非結構化數據
像圖片、聲音、視頻等等。這類信息我們通常無法直接知道他的內容,資料庫也只能將它保存在一個BLOB欄位中,對以後檢索非常麻煩。一般的做法是,建立一個包含三個欄位的表(編號 number、內容描述 varchar(1024)、內容 blob)。引用通過編號,檢索通過內容描述。現在還有很多非結構化數據的處理工具,市面上常見的內容管理器就是其中的一種。
半結構化數據
這樣的數據和上面兩種類別都不一樣,它是結構化的數據,但是結構變化很大。因為我們要了解數據的細節所以不能將數據簡單的組織成一個檔案按照非結構化數據處理,由於結構變化很大也不能夠簡單的建立一個表和他對應。本文主要討論針對半結構化數據存儲常用的兩種方式。
先舉一個半結構化的數據的例子,比如存儲員工的簡歷。不像員工基本信息那樣一致每個員工的簡歷大不相同。有的員工的簡歷很簡單,比如只包括教育情況;有的員工的簡歷卻很複雜,比如包括工作情況、婚姻情況、出入境情況、戶口遷移情況、黨籍情況、技術技能等等。還有可能有一些我們沒有預料的信息。通常我們要完整的保存這些信息並不是很容易的,因為我們不會希望系統中的表的結構在系統的運行期間進行變更。
儲存方式
化解為結構化數據
這種方法通常是對現有的簡歷中的信息進行粗略的統計整理,總結出簡歷中信息所有的類別同時考慮系統真正關心的信息。對每一類別建立一個子表,比如上例中我們可以建立教育情況子表、工作情況子表、黨籍情況子表等等,並在主表中加入一個備註欄位,將其它系統不關心的信息和一開始沒有考慮到的信息保存在備註中。
優點:查詢統計比較方便。
缺點:不能適應數據的擴展,不能對擴展的信息進行檢索,對項目設計階段沒有考慮到的同時又是系統關心的信息的存儲不能很好的處理。
用XML格式來組織並保存到CLOB欄位中
XML可能是最適合存儲半結構化的數據了。將不同類別的信息保存在XML的不同的節點中就可以了。
優點:能夠靈活的進行擴展,信息進行擴展式只要更改對應的DTD或者XSD就可以了。
缺點:查詢效率比較低,要藉助XPATH來完成查詢統計,隨著資料庫對XML的支持的提升性能問題有望能夠很好的解決。
特徵
半結構化數據中結構模式附著或相融與數據本身,數據自身就描述了其相應結構模式。具體來說,半結構化數據具有下述特徵:
(1)數據結構自描述性。結構與數據相交融,在研究和套用中不需要區分“元數據”和“一般數據”(兩者合二為一)。
(2)數據結構描述的複雜性。結構難以納入現有的各種描述框架,實際套用中不易進行清晰的理解與把握。
(3)數據結構描述的動態性。數據變化通常會導致結構模式變化,整體上具有動態得結構模式。
常規的數據模型例如E-R模型、關係模型和對象模型恰恰與上述特點相反,因此可以成為結構化數據模型。而相對於結構化數據,半結構化數據的構成更為複雜和不確定,從而也具有更高的靈活性,能夠適應更為廣泛的套用需求。
表示
半結構化數據的資料庫是節點的集合,每個節點都是一個葉子節點或者一個內部節點。葉子節點與數據相關,數據的類型可以是任意原子類型,如數字和字元串。每個內部節點至少有一條外向的弧。每條弧都有一個標籤,該標籤指明弧開始處的節點與弧末端的節點之間的關係。一個名為根的內部節點沒有進入的弧,它代表整個資料庫。每個節點都從根可達,儘管這個圖結構未必是一棵樹。
半結構化數據通常是由一個由節點集合和弧段集合組成的具根有向圖結構。有向圖中節點集合元素分為三類:
(1)葉結點。此類節點沒有由其出發的弧段,其語義表示與實際數據相關,相應數據取值類型可以是任意原子類型(數值型或字元串型)。
(2)內部節點。此類節點既有由其出發又有由其終止的弧段。
(3)根節點。此節點唯一,其特徵是只作為一個或多個弧段的始點,其語義是整個數據檔案。
模型
半結構化數據模型允許那些相同類型的數據項有不同的屬性集的數據規格說明。這和早先提到的數據模型形成了對比:那些數據模型中某種特定類型的所有數據必須有相同的屬性集。
對象交換模型是一個半結構化數據模型。對象由一個三元組表示,包括標記、類型和對象的值。在對象交換模型中,對象具有唯一的標識。由於模型中對象的標識可以看做關係模型中的屬性名,對象的類型可以看做關係模型中的屬性類型,所以對象交換模型基本上是自描述的。對象交換模型中的標記儘可能地詳盡,因為標記除了能夠表達對象的含義外,還可以用來確定特定的對象。