Sharepoin学习笔记—架构系列--08 Sharepoint的数据模型(DataModel)、数据管理(Data Management)与查询(Query System)
???? ? Sharepoint Foundation中的首要數據結構就是列表(List),?每個List屬于某種List Type,與此類似,每個列表中的列(Column)屬于某種FieldType,而每一條列表記錄(List Item)屬于某種Content Type.至于外部數據(External Data),即來自于Sharepoint Content Database數據庫之外的數據,也能夠在Sharepoint中顯示和管理。
??? 一、列表(List)
?????? Sharepoint Foundation保存數據記錄的方式類似于關系型數據庫中的表(Table),只不過Sharepoint的術語稱它們為列表(List),事實上這些數據記錄被保存在Sharepoint內容數據庫(Content Database)中,并以List的方式呈現給Sharepoint使用者。當然,Sharepoint的數據庫不僅存放這些用戶直接使用的數據,它還存放有Sharepoint的系統數據?:?如?Sharepoint場的配置數據(Configuration Data)、支持Sharepoint與外部數據源交互的BDC數據(用于支持BCS: Business Connectivity Services工作)。
可能有人就會問,為什么不直接使用數據庫數據呢??為什么非要在Sharepoint中以List方式繞一圈來表達?
這是因為Sharepoint Foundation的List與關系型數據庫的數據表(Table)有以下方面的不同:
??? 1、訪問支持:
???????? Sharepoint的數據訪問不支持SQL,事實上,Sharepoint的數據是通過服務器端代碼(server-side Code)如LINQ或CAML來訪問的,你可以通過編程使用Server Object Model或者?LINQ來寫入數據到List。
在客戶端,你可以使用Client Object Model或WCF Data Services(即以前的ADO.NET Data Service)來訪問List數據。
????你不能使用SQL?查詢語句或者存儲過程(Store Procedure)來直接訪問Sharepoint的后臺數據
??? 2、關聯字段:
??? 與數據表(Table)類似,列表(List)由字段(Column)組成,Column中的值既可以來自Column的值定義也可能來自其它List,對于后一種情況,Sharepoint就叫它查閱字段。
查閱字段是Sharepoint配置為從其他列表中的字段獲取其值的字段。將查閱字段添加到列表會在該列表和提供數據的列表之間建立一種關系。這也類似于關系數據庫中的關系型數據表之間的關系,但不同的是為查閱字段提供數據的List中的字段并不要求必須是外鍵字段(Foreign Key)。
當然,所有的Sharepoint Foundation定義的Lists都有一個ID字段,這個ID字段事實上就是建立查閱關系時要用到的外鍵字段(Foreign Key),沒有這樣的字段,你也不可能建立起查閱關系。
??????? 3、表聯接?:????
????????Lists?可以像關系數據表一樣建立聯接(Join),但建立聯接的兩List之間必須有查閱關系(Lookup Relation),否則這種Join就無法建立。也即:創建列表聯接時要記住一些要求。您不能只是聯接任何兩個列表而不考慮類型。如果可以聯接兩個列表,就不僅僅是任何主字段和外字段可用作字段的聯接對。主列表中的字段必須是?Lookup?類型的字段,它必須查找外列表中的字段。?出于此原因,所有聯接都鏡像列表之間的現有查閱關系。
??
??
?
?????4、附加信息:
????Sharepoint Foundation的文檔庫(document library)是一種特殊的List,因為它的List記錄可能會包括有文檔附件(Attached Document)以及與此文檔相關的描述字段(eg:?作者,創建時間,主題,最后修改者…….)。圖片庫也與此類似,只不過它的附件是以圖片文件的方式提供。
??? 從上面的大致比較我們就可以知道,由于Sharepoint的特殊要求,我們不可以照搬關系型數據庫那一套,我們只有按照Sharepoint特殊要求來建立數據的組織與使用。
???????在Sharepoint中每個List都屬于某個List Type,SharePoint Foundation包含有許多內置的List Type,比如: Announcements, Tasks, and Calendar等,用戶可以直接拿來建立自己的List實例。
??? 當然,開發人員也可以根據用戶的特定要求創建用戶自定義的List Type。
?
二、內容類型與字段類型(Content Types and Field Types)
?? 1、內容類型(Content Types)
??????? ?List中的記錄條即List Item也是屬于某種類型(Content Type)的,所謂Content Type就是內容類型,它是?Microsoft SharePoint Foundation 2010?列表或文檔庫中一類項目或文檔的元數據(列)、工作流、行為以及其他設置的可重用集合。借助于內容類型,可以采用集中的可重用方式來管理一類信息的設置。
???? 例如,假定這樣一種業務情形:您具有三種不同類型的文檔,分別為費用報表、采購訂單和發票。所有這三種類型的文檔都具有一些共同的特征;首先它們都是財務文檔,并且包含的數據具有以貨幣表示的值。但是,每種類型的文檔都具有各自的數據要求、各自的文檔模板和各自的工作流。此業務問題的一種解決方案是創建四種內容類型(Content Type)。第一種內容類型"Financial Document"可以封裝組織中所有財務文檔共有的數據要求。其余三種內容類型("Expense Report"、"Purchase Order"和"Invoice")可以從"Financial Document"繼承共有元素。此外,它們還可以定義每種類型特有的特征,如特定元數據集(meta data)、用于創建新項目的文檔模板和用于處理項目的特定工作流。
?????使用Content Type的最簡單的方式就是使用Sharepoint Foundation內置的Content Type。Sharepoint Foundation有許多內置的Content Type,如: Event?和?Announcement。開發人員也可以根據用戶需要開發用戶自定義的Content Type.
? 2、字段類型(Field Types)
??? 列表中的字段(Field)也屬于某種類型(Field Type字段類型),這種類型是不同于存儲在此字段中的值(Value)的數據類型(Data Type?如:整型、字符串、日期等等)的。SharePoint Foundation?的字段類型的定義不僅包括基礎數據類型(如:整型、字符串、日期等等),而且還包括這些數值是如何格式化,如何呈現的(如:創建、顯示、編輯這個字段所呈現給用戶的表單界面)。SharePoint Foundation有許多內置的字段類型,如:Modified By, Due Date等等。開發人員也可以開發用戶自定義字段類型(Field Type)。
?
三、外部數據列表與BCS (External Lists and the Business Connectivity Service)
????? Sharepoint提供了強大的與外部數據源交互的能力,我們可以把諸如SAP,Oracle這樣的外部數據庫的數據資源呈現到Sharepoint界面上來。使用Sharepoint的Business Connectivity Services (BCS)不僅可以讀取外部數據,而且支持寫入。
下圖顯示了BCS中的主要組成部分及其它們之間的關系
?????? ?Business Data Connectivity (BDC) Service?是新版本的業務數據目錄,它之前是在?Microsoft Office SharePoint Server 2007?中提供的,現在在?Microsoft SharePoint Foundation 2010?中提供。
??? 設計?BDC?的主要目的是,使您能夠通過執行極少的編碼工作,以聲明方式從各種外部系統公開業務數據。
??? 為實現此目標,BDC?通過元數據模型(該模型提供了一致的簡化客戶端對象模型)來提供對基礎數據源的同類訪問。
??? 利用?BDC?服務,您能以聲明方式對外部系統進行建模,以便您能公開?SharePoint Server 2010?中的外部數據(對于具有企業版客戶端訪問許可證的?Microsoft SharePoint Server 2010,也可在?Microsoft Office 2010?應用程序中執行此操作)。
?????? BDC?填補了?SharePoint?網站和業務應用程序之間的間隙,使您能夠將各種外部系統中的關鍵數據引入?SharePoint?列表(通過新的外部列表功能和外部數據列)、Web?部件、搜索、用戶配置文件和自定義應用程序。
?????? BDC?的核心功能是提供與各種外部系統的連接,并且它內部支持連接到以下類型的數據源:數據庫、Windows Communication Foundation (WCF)?和?Web?服務、Microsoft .NET Framework?程序集、自定義數據源;
??????? ? BDC?元數據模型(BDC?模型)是?BDC?的核心。類似于?Entity(外部內容類型)和用于提取有關外部系統的復雜詳細信息的?Method?的數據結構統稱為?MetadataObjects,并包含?BDC?模型。
???? 外部系統的?BDC?模型實際上是一個?XML?文件,它是當您在?SharePoint Designer?中創建外部內容類型時自動生成的。在創建一個模型并將該模型上載到運行?SharePoint Server?的服務器上的?BDC?元數據存儲之后,可隨時在?SharePoint Server?中和?Microsoft Office?應用程序(例如,Microsoft Outlook、Microsoft SharePoint Workspace?和?Microsoft Word)中使用該模型中定義的外部內容類型,以使用?Business Connectivity Services?的演示功能和自定義解決方案根據上下文顯示外部數據。我們可使用?SharePoint Server?管理中心內的"BDC?應用程序服務"頁中的"導出"選項,或使用?SharePoint Designer?中的外部內容類型的"導出"選項隨時查看?BDC?模型。
???????? BDC?模型存儲在關系數據庫(此數據庫不同于Content Database與Configuration Database)中,它在Sharepoint叫metadata store,在?BDC?運行時可以解釋這些模型之前,需要將這些BDC?模型加載或具體化到內存中。數據庫表和用于保留、讀取和修改?BDC?模型的存儲過程的集合構成了?BDC?元數據存儲組件。只有在?Business Connectivity Services?的服務器部署上,此組件才會存在。
????????在BDC?模型存儲到關系數據庫Metadata Store之后,用戶就可以通過多種途徑使用它,比如:用戶可以創建一個基于外部內容類型(External Content Type)的數據列表(List)。也可以基于已經存在的List向其添加一個來自于外部內容類型的新字段。SharePoint Server 2010在BCS方面有許多加強,它包含一些內置的Webpart來使用External Data,包括搜索外部數據。此外,SharePoint Workspace與Microsoft Office的客戶端應用程序也能做到直接獲取外部數據。在SharePoint Server 2010中,用戶還能做到索引與搜索外部數據源(External data sources)
????當某個Sharepoint的客戶端應用程序請求外部數據時,運行在前端Web服務器上的BDC運行時(BDC Runtime)會向本地的緩存(Locally Cache)請求BDC?模型數據,這些BDC?模型數據是從BDC metadata store中復制到緩存以提高運行效率的。BDC運行時在得到此模型數據后就可以向客戶端應用程序提供針對外部數據的相關操作了。與此類似,在客戶端也緩存得有BDC?模型數據,BDC的客戶端運行時(BDC Client Runtime)會基于此BDC?模型數據提請外部數據訪問請求。當然,申請到的外部數據會保留在客戶端以支持客戶端的離線操作。
????在BDC?服務啟動起來并且所需的BDC模型數據也成功注冊后,最終用戶就可以使用外部數據了。他們既可以使用無代碼方式(non-code)使用外部數據,也可以采取比較復雜的編程方式來使用外部數據。BDC運行時提供了一整套API來支持開發人員通過開發WebPart或其它解決方案與外部數據源交互。
????? ?由于BDC模型數據提供了一個類似于中間層的機制,當通過代碼訪問和操作外部數據源數據時,即使是針對不同的數據源對象,Sharepoint也能使用相同的代碼作相關訪問,BDC模型數據會自動把這個操作轉化為針對不同數據源的具體的對應操作,這樣就保證了在Sharepoint端訪問數據的一致性表達,也就是說你可以使用同一套BDC運行時提供的API來訪問外部數據,而無需根據外部數據源的不同使用不同的API。
??? 需要注意的的BDC解決方案是在場級別進行打包和部署的,你不可以在沙盒方案中創建和部署與BDC。
總結
以上是生活随笔為你收集整理的Sharepoin学习笔记—架构系列--08 Sharepoint的数据模型(DataModel)、数据管理(Data Management)与查询(Query System)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 外汇理财是真的还是假的?快消除这些误会!
- 下一篇: 2020年地方债利率是多少?地方债最新信