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