1. 程式人生 > >Caché資料庫開發技術

Caché資料庫開發技術

一、Caché簡介及多維儲存

Caché資料庫是Inter Systems公司的產品,為了適應網際網路的迅速發展對資料儲存效率的要求,Inter Systems公司經過多年的努力,研發出了Caché資料庫。Caché是新一代高效能資料庫技術,它被譽為創新的“後關係型”資料庫,作為後關係型資料庫,它可以採用三種方式對其中的資料進行訪問:1.物件資料庫訪問;2.SQL語句進行訪問;3.採用多維陣列的方式。

示例1.1:物件方式

/// function:通過物件的方式獲取CT_Title的資料
/// debug:w ##class(web.TestTitle).GetDataByObj(11)
ClassMethod GetDataByObj(Id As %String) As %String
{
	set TTLRowId=""
	set TTLCode=""
	set TTLDesc=""
	set PObj=##class(User.CTTitle).%OpenId(Id)
	if (PObj){
		set TTLRowId=Id
	    set TTLCode=PObj.TTLCode
		set TTLDesc=PObj.TTLDesc
		}
	Quit TTLRowId_" "_TTLCode_" "_TTLDesc
}

示例1.2:SQL方式

/// function:通過SQL的方式獲取CT_Title的資料
/// debug:w ##class(web.TestTitle).GetDataBySQL(11)
ClassMethod GetDataBySQL(Id As %String) As %String
{
	set TTLRowId=""
	set TTLCode=""
	set TTLDesc=""
	&SQL(
		select TTL_RowId,TTL_Code,TTL_Desc
		into :TTLRowId,:TTLCode,:TTLDesc
		from SQLUser.CT_Title where TTL_RowId=:Id
	)
	Quit TTLRowId_" "_TTLCode_" "_TTLDesc
}

示例1.3:多維陣列方式

/// function:通過多維陣列的方式獲取CT_Title的資料
/// debug:w ##class(web.TestTitle).GetDataByGlobal(11)
ClassMethod GetDataByGlobal(Id As %String) As %String
{
	set TTLRowId=""
	set TTLCode=""
	set TTLDesc=""
	set TTLRowId=Id
	set TTLCode=$p($g(^CT("TTL",TTLRowId)),"^",1)
	set TTLDesc=$p($g(^CT("TTL",TTLRowId)),"^",2)
	Quit TTLRowId_" "_TTLCode_" "_TTLDesc
}

二、Caché資料庫的特點

1.Caché包括應用伺服器

Caché提供的不僅僅是一種單純的資料庫技術,在Caché中包括一個應用伺服器,這個伺服器提供高階物件程式設計,並且可以很容易地與很多技術整合。

2.Caché的程式設計技術--M語言

Caché提供了可以用多種技術編寫資料庫和業務邏輯的能力。Caché的ObjectScript支援所有資料存取方法:物件、SQL、多維陣列和嵌入式 HTML 。Caché Basic 與 Visual Basic 非常相似,只是做了很少的調整擴充套件,以便利用 Caché獨特的效能。

3.Caché的CSP技術

Caché為開發複雜的、基於網頁應用程式提供了豐富的整合開發環境。Caché Service Page(CSP)技術可以進行快速開發,動態產生。

示例2.1:預設的CSP頁面

<html>
<head>

<!-- Put your page Title here -->
<title>	Cache Server Page </title>

</head>

<body>

		<!-- Put your page code here -->
		My page body
</body>
</html>

示例2.2:通過CSP實現前後端互動

<csp:method name=OnPreHTTP arguments="" returntype=%Boolean>
 i ##Class(websys.SessionEvents).SessionExpired() q 1
 quit 1
</csp:method>
<html>
<head>
<title>Test</title>
</head>
<body>
	<div style="margin:0 auto;width:400px;height:400px;background-color:#C5B6B6;">
		<form action="dhcastudentcourse.csp" method="get">
			課程程式碼: <input class="h50" type="text" value="#($g(%request.Data("CourseNum",1)))#" id="CourseNum" name="CourseNum">
			<input class="h50" type="submit" value="查詢" id="Find">
		</form>	
		<table style="width:100%;">
		<server>
			Set LocId = %session.Data("LOGON.CTLOCID")
			Set LocDesc = $p(^CTLOC(LocId),"^",2)
			set CourseNum = $g(%request.Data("CourseNum",1))
			if (CourseNum'=""){
				Set rs = ##class(%ResultSet).%New("web.DHCAStudentCourse:FindInfo")
			    Set %sc = rs.Execute(CourseNum)
				w "<tr><td>姓名</td><td>分數</td></tr>"
				While(rs.Next()){
				    w "<tr><td>"_rs.GetDataByName("StName")_"</td><td>"_rs.GetDataByName("Score")_"</td></tr>"
			    }
				Do rs.Close()
			    Set rs = ""
			}
	    </server>
		</table>
		<div>
		當前使用者: #(%session.Data("LOGON.USERNAME"))#
		當前科室: #(LocDesc)# 
		</div>	
	</div>
</body>
</html>

三、開發環境及對映關係

1.開發環境

開發環境B/S架構

Web容器 : IIS

開發語言: M

資料庫:  Caché

IE-->IIS ->CSP Gateway ->csp application->dhc.logon.csp--反向操作

2.名稱空間與資料庫的對映關係

應用程式通過名稱空間訪問資料庫裡的資料和程式,因此, 名稱空間和資料庫之間要建立對映。名稱空間和資料庫之間的對映不一定是一對一的。一個數據庫可以被多個名稱空間訪問;相反,一個名稱空間可以訪問多個數據庫裡的資料。建立名稱空間的主要工作就是建立與資料庫的對映,這樣做可以將程式邏輯與物理存在的資料獨立開來,便於開發人員專注於系統功能設計,不需要為未來實施時不同的系統架構而作出額外的工序,系統架構也因為這樣變得更靈活。