『壹』 匯編:定址方式在結構化數據訪問中的應用
; 你的程序里已經用了變數名,就是那個用於存放結果的table,但原始數據部分,沒有定義變數名。
; 只有數據,沒有名稱,這是不好的習慣,就像人沒有名字一樣。
; 不用變數名也可以,但僅限於數據類型很少的情況,而且,必須精準計算不同類型數據的開始地址。
; 本程序通過編譯,運行正確
; 若到DEBGU里調試,可輸入:
G10D
然後輸入:
d112 L150
查看,下面是根據題目編制的程序:
Code Segment
Assume CS:Code,DS:Code
; 年份
db '1975','1976','1977','1978','1979','1980','1981','1982','1983','1984'
db '1985','1986','1987','1988','1989','1990','1991','1992','1993','1994','1995'
; 總收入
dd 16,22,382,1356,2390,8000,16000,24486,50065,97479,140417,197514
dd 345980,590827,803530,1183000,1843000,2759000,3753000,4649000,5937000
; 雇員人數
dw 3,7,9,13,28,38,130,220,476,778,1001,1442,2258,2793,4037,5635,8226
dw 11542,14430,15257,17800
Start: push cs
pop ds
push cs
pop es ;使數據段、附加段與代碼段同段
xor bx,bx ;年份數據偏移地址
mov si,168 ;雇員人數數據偏移地址(21x4x2)
lea di, table ;結果偏移地址
mov cx,21 ;21年
Calculate: mov ax,[bx]
stosw
mov ax,[bx][2]
stosw ;年份存在TABLE中0-3內存單元
mov al,20h ;空格
stosb ;第4單元空格
mov ax,[bx][84] ;讀取總收入低字
push ax
stosw ;5-6單元為總收入低字
mov ax,[bx][86] ;讀取總收入高字
add bx,4 ;年份數據指針加4個位元組
push ax
stosw ;7-8單元為總收入高字
mov al,20h ;空格
stosb ;第9單元空格
lodsw ;讀取雇員人數
mov bp,ax
stosw ;AB兩個單元存放雇員
mov al,20h ;空格
stosb ;C單元空格
pop dx
pop ax
div bp ;總收入/雇員人數=人均收入,ax=商數,dx=余數
stosw ;DE單元存放人均收入
mov al,20h ;空格
stosb ;F單元空格
loop Calculate
Exit_Proc: mov ah,4ch ;結束程序
int 21h
Even
table: ;存放結果
Code ENDS
END Start ;編譯到此結束
『貳』 將非結構化數據轉化為結構化數據有哪些方法
非結構化數據轉化為結構化數據有以下幾個方法:
1. 傳統方法——樹
雖然絕大多數數據是非結構化格式的,但是結構化數據普遍存在於各類商業應用軟體和系統中,例如產品數據存儲,交易日誌,ERP和CRM 系統中都存在大量結構化數據,這些結構化數據仍應用著陳舊的數據技術處理,如基於規則的系統,決策樹等。這樣的方法需要人工進行特徵提取,操作繁瑣且需要耗費大量人力進行數據標簽。
非結構化數據,也就是通常使用的雜亂無章的文本數據。非結構化數據通常是不能用結構化數據的常規方法以傳統方式進行分析或處理的,所以這也成為AI領域一個常見的難題,要理解非結構化數據通常需要輸入整段文字,以識別其潛在的特徵,然後查看這些特徵是否出現在池中的其他文本中。因此,在處理此類任務時,深度學習以其出色的特徵提取能力一騎絕塵,於是所有人都開始想著把神經網路用在結構化數據上——建個全連接層,把每一列的內容作為輸入,再有一個確定好的標簽,就可以進行訓練和推理了。
2. 新型利器——深度學習
需要尋找結構化數據的語義,目前要解決的問題主要有:
①數據清洗。要在結構化數據 AI 應用上有所成果,首先需要解決人工數據清洗和准備的問題,找到極少或者沒有人為干預的自動化方法,才能使得這一應用可落地可拓展。
②異構數據。處理結構化數據的其中一大挑戰在於,結構化數據可能是異構的,同時組合了不同類型的數據結構,例如文本數據、定類數據、數字甚至圖像數據。其次,數據表有可能非常稀疏。想像一個 100 列的表格,每列都有 10 到 1000 個可能值(例如製造商的類型,大小,價格等),行則有幾百萬行。由於只有一小部分列值的組合有意義,可以想像,這個表格可能的組合空間有多麼「空」。
③語義理解。找到這些結構化數據的語義特徵。處理結構化數據並不僅僅依賴於數據本身的特徵 (稀疏,異構,豐富的語義和領域知識),數據表集合 (列名,欄位類型,域和各種完整性約束等)可以解碼各數據塊之間的語義和可能存在的交互的重要信息。也就是說,存儲在資料庫表中的信息具有強大的底層結構,而現有的語言模型(例如 BERT)僅受過訓練以編碼自由格式的文本。
3. 結構化數據清洗
除了某些特定的需求外,經過預處理之後的結構化數據,應該滿足以下特點:
①所有值都是數字–機器學習演算法取決於所有數據都是數字;
②非數字值(在類別或文本列中的內容)需要替換為數字標識符;
③標識並清除具有無效值的記錄;
④識別並消除了無關的類別;
⑤所有記錄都需要使用相同的一致類別。
『叄』 結構性數據和非結構性數據的區別是什麼
結構化數據是以固定欄位駐留在一個記錄或文件內。它事先被人為組織過,也依賴於一種確保數據如何存儲 處理和訪問的模型。結構化查詢語言(SQL)通常用於管理在資料庫的結構化數據表。
非結構化數據是結構化的反面,是指沒有一個預定義的數據模型或不是以一種預先已經定義好的方式進行組織。數據不必以某種方式組織,直接按照學科方式分組分類,主要是文本,但也可以圖像、音頻和視頻。
讓我們不要忘記社會媒體。Facebook、Twitter、LinkedIn、Pinterest等等——這些都含有非結構化和半結構化數據。有價值的數據,非常有利於大型和小型企業,。然而,在它們有用之前需要結構化。
半結構化數據是個跨結構化和非結構化的數據。它是結構化數據但不適合正式的關系資料庫模型或其他序列來源。很多XML文件也可能屬於這一類,雖然也有結構化和非結構化的XML文檔。
『肆』 什麼是結構化數據,非結構化數據和半結構化數據
結構化數據也稱為行數據,是由二維表結構來邏輯表達和實現的數據,嚴格地遵循數據格式與長度規范,主要通過關系型資料庫進行存儲和管理。結構化數據標記是能讓網站以更好的姿態展示在搜索結果當中的方式。做了結構化數據標記,便能使網站在搜索結果中良好地展示豐富網頁摘要。
非結構化數據是數據結構不規則或不完整,沒有預定義的數據模型,不方便用資料庫二維邏輯表來表現的數據。非結構化數據其格式非常多樣,標准也是多樣性的,而且在技術上非結構化信息比結構化信息更難標准化和理解。
半結構化數據具有一定的結構性,是一種適於資料庫集成的數據模型。也就是說,適於描述包含在兩個或多個資料庫(這些資料庫含有不同模式的相似數據)中的數據。它也是一種標記服務的基礎模型,用於Web上共享信息。
(4)數據訪問結構化方式擴展閱讀:
結構化數據的標記方式
1、使用HTML代碼標記
HTML代碼標記的方式主要有3種:微數據、微格式和RDFa。但對於一些外貿站站來說,標記是以微數據為主,少許時候也會用到微格式,視不用的頁面類型而定。
2、使用微數據標記
使用微數據標記的話,主流是使用schema進行標記。但由於頁面上有些項, schema並沒推出相應的標記代碼,從而也得仍舊使用data-vocabulary來標記, 這樣的話頁面代碼上就會出現新舊代碼並存的情況。
『伍』 資料庫按數據的組織方式來分可以分為哪三種模型
1、層次模型:
①有且只有一個結點沒有雙親結點(這個結點叫根結點)。
②除根結點外的其他結點有且只有一個雙親結點。
層次模型中的記錄只能組織成樹的集合而不能是任意圖的集合。在層次模型中,記錄的組織不再是一張雜亂無章的圖,而是一棵"倒長"的樹。
2、網狀模型 :
①允許一個以上的結點沒有雙親結點。
②一個結點可以有多個雙親結點。
網狀模型中的數據用記錄的集合來表示,數據間的聯系用鏈接(可看作指針)來表示。資料庫中的記錄可被組織成任意圖的集合。
3、關系模型:
關系模型用表的集合來表示數據和數據間的聯系。
每個表有多個列,每列有唯一的列名。
在關系模型中,無論是從客觀事物中抽象出的實體,還是實體之間的聯系,都用單一的結構類型
(5)數據訪問結構化方式擴展閱讀
1、無條件查詢
例:找出所有學生的的選課情況
SELECT st_no,su_no
FROM score
例:找出所有學生的情況
SELECT*
FROM student
「*」為通配符,表示查找FROM中所指出關系的所有屬性的值。
2、條件查詢
條件查詢即帶有WHERE子句的查詢,所要查詢的對象必須滿足WHERE子句給出的條件。
例:找出任何一門課成績在70以上的學生情況、課號及分數
SELECT UNIQUE student.st_class,student.st_no,student.st_name,student.st_sex,student.st_age,score.su_no,score.score
FROM student,score
WHERE score.score>=70 AND score.stno=student,st_no
這里使用UNIQUE是不從查詢結果集中去掉重復行,如果使用DISTINCT則會去掉重復行。另外邏輯運算符的優先順序為NOT→AND→OR。
例:找出課程號為c02的,考試成績不及格的學生
SELECT st_no
FROM score
WHERE su_no=『c02』AND score<60
3、排序查詢
排序查詢是指將查詢結果按指定屬性的升序(ASC)或降序(DESC)排列,由ORDER BY子句指明。
例:查找不及格的課程,並將結果按課程號從大到小排列
SELECT UNIQUE su_no
FROM score
WHERE score<60
ORDER BY su_no DESC
4、嵌套查詢
嵌套查詢是指WHERE子句中又包含SELECT子句,它用於較復雜的跨多個基本表查詢的情況。
例:查找課程編號為c03且課程成績在80分以上的學生的學號、姓名
SELECT st_no,st_name
FROM student
WHERE stno IN (SELECT st_no
FROM score
WHERE su_no=『c03』 AND score>80 )
這里需要明確的是:當查詢涉及多個基本表時用嵌套查詢逐次求解層次分明,具有結構程序設計特點。在嵌套查詢中,IN是常用到的謂詞。若用戶能確切知道內層查詢返回的是單值,那麼也可用算術比較運算符表示用戶的要求。
5、計算查詢
計算查詢是指通過系統提供的特定函數(聚合函數)在語句中的直接使用而獲得某些只有經過計算才能得到的結果。常用的函數有:
COUNT(*) 計算元組的個數
COUNT(列名) 對某一列中的值計算個數
SUM(列名) 求某一列值的總和(此列值是數值型)
AVG(列名) 求某一列值的平均值(此列值是數值型)
MAX(列名) 求某一列值中的最大值
MIN(列名) 求某一列值中的最小值
例:求男學生的總人數和平均年齡
SELECT COUNT(*),AVG(st_age)
FROM student
WHERE st_sex=『男』
例:統計選修了課程的學生的人數
SELECT COUNT(DISTINCT st_no)
FROM score
注意:這里一定要加入DISTINCT,因為有的學生可能選修了多門課程,但統計時只能按1人統計,所以要使用DISTINCT進行過濾。
『陸』 數據訪問層常見的方法有哪幾種
一、響應重定向方法
響應重定向方法是目前為止將一個網頁重定向到另一個網頁的最簡單的方法的最簡單的方法。當Web伺服器接到一個重定向請求後,它會將一個響應頭送給客戶端,這將導致客戶端發送一個新的請求到伺服器。按句話說,一個重定向請求實際上是兩個請求響應:一個是最初的請求響應,另一個是新的重定向請求響應。
在ASP.NET中實現重定向很容易。下面的代碼演示了如何使用Response.Redirect方法實現網頁重定向:
protected void Redirect_Click(object sender, EventArgs e)
{
Response.Redirect("menu.aspx");
}
要注意的是重定向請求只是一個GET請求,這就意味著我們不能從源頁中通過重定向命令提交數據。但是我們可以在重定向中使用查詢字元串來傳遞數據。如下面代碼所示:
protected void Redirect_Click(object sender, EventArgs e)
{
Response.Redirect("menu.aspx?userName=" + UserName.Text));
}
上面的例子將一個查詢字元串作為參數傳遞給了Response.Redirect方法的目標URL。我們可以通過如下的代碼獲得源數據。
protected void Page_Load(object sender, EventArgs e)
{
string userName = Request["userName"];
}
二、伺服器傳輸方法
和依賴於客戶端向另一個新頁發請求不同,伺服器傳輸是一種伺服器重定向技術,這種技術通過簡單的改變Web伺服器所處理的代碼來達到請求一個新頁的目的。當被請求頁和源頁面在同一個伺服器時,伺服器傳輸要比 Response.Redirect方法更有效,這是由於這種技術可以避免額外的開銷,僅僅使用伺服器的資源就可以進行重定向。要注意的這種技術有一個副作用,在頁面進行重定向時,客戶端的URL仍然會保持源頁面的URL,這可能會使客戶認為他們所獲得的數據是源頁面產生的。當然,在大多數情況下,這不是問題,但是這將使調試變得更困難。
Server.Transfer方法還可以保存初始頁的 HttpContext。因此,目標頁可以訪問源頁面的值。我們可以使用FormsCollection屬性來從目標頁面中獲得源頁面的值。首先,要確定我們使用了被重載的方法,這個方法有兩個參數:目標URL和一個Boolean類型的值,告訴伺服器是否保存用於描述源頁面值的Form。如下面的代碼所示:
Server.Transfer("Menu.aspx",true);
然後,我們在目標頁面中獲得一個叫txtUserName的Textbox控制項的值的代碼如下:
object obj = Request.Form["txtUserName"];
三、Response.Redirect和Server.Transfer的比較
由於Response.Redirect方法要進行兩次請求響應操作,因此,我們應該在對性能要求高的網站盡量避免使用這種方法。然而,只從技術上說,使用redirect方式確實可以從一個網頁跳到另一個網頁。相比之下,Server.Transfer會更有效率,但是跳轉的范圍僅限於同一個Web伺服器的不同網頁。從本質上說,我們可以使用 Server.Transfer來消除不必要的請求響應操作。如果我們需要重定位到不同伺服器的網頁,就需要使用Response.Redirect方法。
四、跨頁提交概述
在ASP.NET 2.0中,我們可以通過實現IbuttonControl介面提交給不同的WebForm,來實現跨網頁的提交。和Response.Redirect類似,跨網頁提交是一個基於客戶端的傳輸機制,但也有點象Server.Transfer,目標網頁也可以訪問源網頁的數據。為了使用跨網頁提交,我們需要在源網頁中的PostBackUrl屬性中指定目標URL。
五、實現跨網頁提交
這部分將討論一下如何在ASP.NET2.0中實現跨網頁提交。為了開始我們的學習,假設有兩個Web頁,一個是源Web頁,另一個是目標Web頁。在源網頁中初始化了使用按鈕進行的跨網頁提交操作。我們首先必須設置目標網頁按鈕的PostBackUrl屬性,順便說一句,所有實現了System.Web.UI.WebControls.IbuttonControl介面的Web控制項都有跨網頁提交的特性。下面的代碼將演示這一過程。
PostBackUrl="~/target.aspx" text = "Post to a target page"/>
當我們設置PostBackUrl屬性時,ASP.NET框架將相應的控制項綁定到一個新的叫WebForm_DoPostBackWithOptions的JavaScript函數,產生的Html代碼如下:
onclick="javascript:WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions("btnSubmit", "", false, "","Target.aspx", false, false))" id="btnSubmit" />
對於上面的html代碼來說,當用戶單擊按鈕時,瀏覽器將提交目標URL(Target.aspx),而不是源URL。
六、從目標頁面中獲得源頁面控制項的值
ASP.NET2.0提供了一個叫PreviousPage的新的屬性,這個屬性無論在何時當前頁面進行跨網頁提交操作時都會指向源頁面。要注意的是,當源頁面和目標頁面在不同的應用程序中時,這個屬性包含null(這個null並不是未初始化的意思)。還有要注意的是當目標網頁訪問PreviousPage屬性時可以獲得源頁面的數據,ASP.NET運行時裝載並執行了源頁面。這將引發ProcessChildRequest事件的發生。而且,它還會引發Page_Init事件、Page_Load和任何其他的源頁面按鈕單擊事件。
因此,我們要避免由於不小心進行誤操作,所以最好通過 IsCrossPostBack屬性來確認是否為一個跨網頁提交發生,如果這個屬性值為true,那麼目標網頁就是通過一個跨網頁提交動作而調用的。如果是通過另外一種方式調用的(如一般的請求、Response.Redirect或是一個Server.Transfer),這個屬性的值為false。下面的例子演示了如何使用這個屬性。
if ( PreviousPage.IsCrossPagePostBack)
{
//執行代碼
}
//******************************************
這個PreviousPage屬性在Server.Transfer和跨網頁提交中都可以使用。在ASP.NET2.0中,我們可以在調用Server.Transfer操作後使用PreviousPage屬性在目標頁面中來獲得源頁面的數據,代碼如下:
*******************************************//
{
Server.Transfer("menu.aspx");
}
protected void Redirect_Click(object sender, EventArgs e)
//在這個接收面中我們現在可以獲得Web頁面的數據,代碼如下:
protected void Page_Load(object sender, EventArgs e)
{
if (PreviousPage != null)
{
TextBox txtBox = (TextBox)
PreviousPage.FindControl("txtUserName");
if (textBox != null)
string userName = textBox.Text;
//其他可執行的代碼
}
}
要注意的是上面的代碼必須將txtUserName控制項轉換為TextBox類型,以便可以訪問其中的值。
七、使用PreviousPageType
PreviousPageType屬性提供了在跨網頁操作中訪問源頁面的強類型能力,下面讓我們演示一下如何不通過任何類型轉換來從源頁面中獲得控制項值。代碼如下:
< asp:Textbox ID="txtUserName" Runat="server" />
< asp:Textbox ID="txtPassword" Runat="server" />
< asp:Button ID="Submit" Runat="server" Text="Login"PostBackUrl="Menu.aspx" />
要注意的是單擊按鈕可以重定向到一個叫「Menu.asp」的目標頁。這個目標頁可以使用如下的代碼獲得用戶名和密碼:
八、保存視圖狀態
對於跨網頁提交來說,ASP.NET2.0 內嵌了一個叫__POSTBACK的隱藏欄位,這個欄位包含了關於源頁面的視圖信息 -- 也就是由源頁面提供了,包含了一個帶有一個非空PostBackUrl屬性值的服務端控制項。目標頁可以使用__POSTBACK中的信息來獲得源頁面的視圖狀態信息。代碼如下:
if(PreviousPage!=null && PreviousPage.IsCrossPagePostBack &&
PreviousPage.IsValid)
{
TextBox txtBox = PreviousPage.FindControl("txtUserName");
Response.Write(txtBox.Text);
}
在上面的代碼中核對了用於確保PreviousPage屬性不為 null的檢查代碼。順便提一下,如果目標頁和源頁面不在同一個應用程序中,這個PreviousPage屬性的值為null。只有在進行跨網頁提交操作時,IsCrossPagePostBack屬性才為true。
這個跨網頁提交的特性,是ASP.NET2.0中最強有力的特性之一,這種技術將允許在一個頁面中提交到另外一個頁面,並且可以在目標頁面地無縫地操作源頁面中的數據。
『柒』 如何將非結構化數據轉化為結構化數據
隨著機器學習的發展,過去傳統的結構化數據分析方法已經不能滿足我們的需求了。如何在神經網路中利用非結構化數據是很重要的一點。所以很多研究者致力於將非結構化數據處理成結構化數據的工具開發。將非結構化數據轉化為結構化數據有以下幾個方法:
1. 傳統方法——樹
雖然絕大多數數據是非結構化格式的,但是結構化數據普遍存在於各類商業應用軟體和系統中,例如產品數據存儲,交易日誌,ERP和CRM 系統中都存在大量結構化數據,這些結構化數據仍應用著陳舊的數據技術處理,如基於規則的系統,決策樹等。這樣的方法需要人工進行特徵提取,操作繁瑣且需要耗費大量人力進行數據標簽。
非結構化數據,也就是通常使用的雜亂無章的文本數據。非結構化數據通常是不能用結構化數據的常規方法以傳統方式進行分析或處理的,所以這也成為AI領域一個常見的難題,要理解非結構化數據通常需要輸入整段文字,以識別其潛在的特徵,然後查看這些特徵是否出現在池中的其他文本中。因此,在處理此類任務時,深度學習以其出色的特徵提取能力一騎絕塵,於是所有人都開始想著把神經網路用在結構化數據上——建個全連接層,把每一列的內容作為輸入,再有一個確定好的標簽,就可以進行訓練和推理了。
2. 新型利器——深度學習
需要尋找結構化數據的語義,目前要解決的問題主要有:
①數據清洗。要在結構化數據 AI 應用上有所成果,首先需要解決人工數據清洗和准備的問題,找到極少或者沒有人為干預的自動化方法,才能使得這一應用可落地可拓展。
②異構數據。處理結構化數據的其中一大挑戰在於,結構化數據可能是異構的,同時組合了不同類型的數據結構,例如文本數據、定類數據、數字甚至圖像數據。其次,數據表有可能非常稀疏。想像一個 100 列的表格,每列都有 10 到 1000 個可能值(例如製造商的類型,大小,價格等),行則有幾百萬行。由於只有一小部分列值的組合有意義,可以想像,這個表格可能的組合空間有多麼「空」。
③語義理解。找到這些結構化數據的語義特徵。處理結構化數據並不僅僅依賴於數據本身的特徵 (稀疏,異構,豐富的語義和領域知識),數據表集合 (列名,欄位類型,域和各種完整性約束等)可以解碼各數據塊之間的語義和可能存在的交互的重要信息。也就是說,存儲在資料庫表中的信息具有強大的底層結構,而現有的語言模型(例如 BERT)僅受過訓練以編碼自由格式的文本。
3. 結構化數據清洗
除了某些特定的需求外,經過預處理之後的結構化數據,應該滿足以下特點:
①所有值都是數字–機器學習演算法取決於所有數據都是數字;
②非數字值(在類別或文本列中的內容)需要替換為數字標識符;
③標識並清除具有無效值的記錄;
④識別並消除了無關的類別;
⑤所有記錄都需要使用相同的一致類別。
『捌』 簡述結構化方法與面向對象方法的概念以及特點
http://www.itise.com/phrase/200603101726185.html
看看這個網站
面向對象
中科永聯高級技術培訓中心(www.itise.com)
面向對象(Object Oriented,OO)是當前計算機界關心的重點,它是90年代軟體開發方法的主流。面向對象的概念和應用已超越了程序設計和軟體開發,擴展到很寬的范圍。如資料庫系統、互動式界面、應用結構、應用平台、分布式系統、網路管理結構、CAD技術、人工智慧等領域。
談到面向對象,這方面的文章非常多。但是,明確地給出對象的定義或說明對象的定義的非常少——至少我現在還沒有發現。其初,「面向對象」是專指在程序設計中採用封裝、繼承、抽象等設計方法。可是,這個定義顯然不能再適合現在情況。面向對象的思想已經涉及到軟體開發的各個方面。如,面向對象的分析(OOA,Object Oriented Analysis),面向對象的設計(OOD,Object Oriented Design)、以及我們經常說的面向對象的編程實現(OOP,Object Oriented Programming)。許多有關面向對象的文章都只是講述在面向對象的開發中所需要注意的問題或所採用的比較好的設計方法。看這些文章只有真正懂得什麼是對象,什麼是面向對象,才能最大程度地對自己有所裨益。這一點,恐怕對初學者甚至是從事相關工作多年的人員也會對它們的概念模糊不清。
面向對象是當前計算機界關心的重點,它是90年代軟體開發方法的主流。面向對象的概念和應用已超越了程序設計和軟體開發,擴展到很寬的范圍。如資料庫系統、互動式界面、應用結構、應用平台、分布式系統、網路管理結構、CAD技術、人工智慧等領域。
一、傳統開發方法存在問題
1.軟體重用性差
重用性是指同一事物不經修改或稍加修改就可多次重復使用的性質。軟體重用性是軟體工程追求的目標之一。
2.軟體可維護性差
軟體工程強調軟體的可維護性,強調文檔資料的重要性,規定最終的軟體產品應該由完整、一致的配置成分組成。在軟體開發過程中,始終強調軟體的可讀性、可修改性和可測試性是軟體的重要的質量指標。實踐證明,用傳統方法開發出來的軟體,維護時其費用和成本仍然很高,其原因是可修改性差,維護困難,導致可維護性差。
3.開發出的軟體不能滿足用戶需要
用傳統的結構化方法開發大型軟體系統涉及各種不同領域的知識,在開發需求模糊或需求動態變化的系統時,所開發出的軟體系統往往不能真正滿足用戶的需要。
用結構化方法開發的軟體,其穩定性、可修改性和可重用性都比較差,這是因為結構化方法的本質是功能分解,從代表目標系統整體功能的單個處理著手,自頂向下不斷把復雜的處理分解為子處理,這樣一層一層的分解下去,直到僅剩下若干個容易實現的子處理功能為止,然後用相應的工具來描述各個最低層的處理。因此,結構化方法是圍繞實現處理功能的「過程」來構造系統的。然而,用戶需求的變化大部分是針對功能的,因此,這種變化對於基於過程的設計來說是災難性的。用這種方法設計出來的系統結構常常是不穩定的 ,用戶需求的變化往往造成系統結構的較大變化,從而需要花費很大代價才能實現這種變化。
二、面向對象的基本概念
(1)對象。
對象是人們要進行研究的任何事物,從最簡單的整數到復雜的飛機等均可看作對象,它不僅能表示具體的事物,還能表示抽象的規則、計劃或事件。
(2)對象的狀態和行為。
對象具有狀態,一個對象用數據值來描述它的狀態。
對象還有操作,用於改變對象的狀態,對象及其操作就是對象的行為。
對象實現了數據和操作的結合,使數據和操作封裝於對象的統一體中
(3)類。
具有相同或相似性質的對象的抽象就是類。因此,對象的抽象是類,類的具體化就是對象,也可以說類的實例是對象。
類具有屬性,它是對象的狀態的抽象,用數據結構來描述類的屬性。
類具有操作,它是對象的行為的抽象,用操作名和實現該操作的方法來描述。
(4)類的結構。
在客觀世界中有若干類,這些類之間有一定的結構關系。通常有兩種主要的結構關系,即一般--具體結構關系,整體--部分結構關系。
①一般——具體結構稱為分類結構,也可以說是「或」關系,或者是「is a」關系。
②整體——部分結構稱為組裝結構,它們之間的關系是一種「與」關系,或者是「has a」關系。
(5)消息和方法。
對象之間進行通信的結構叫做消息。在對象的操作中,當一個消息發送給某個對象時,消息包含接收對象去執行某種操作的信息。發送一條消息至少要包括說明接受消息的對象名、發送給該對象的消息名(即對象名、方法名)。一般還要對參數加以說明,參數可以是認識該消息的對象所知道的變數名,或者是所有對象都知道的全局變數名。
類中操作的實現過程叫做方法,一個方法有方法名、參數、方法體。消息傳遞如圖10-1所示。
二、面向對象的特徵
(1)對象唯一性。
每個對象都有自身唯一的標識,通過這種標識,可找到相應的對象。在對象的整個生命期中,它的標識都不改變,不同的對象不能有相同的標識。
(2)分類性。
分類性是指將具有一致的數據結構(屬性)和行為(操作)的對象抽象成類。一個類就是這樣一種抽象,它反映了與應用有關的重要性質,而忽略其他一些無關內容。任何類的劃分都是主觀的,但必須與具體的應用有關。
(3)繼承性。
繼承性是子類自動共享父類數據結構和方法的機制,這是類之間的一種關系。在定義和實現一個類的時候,可以在一個已經存在的類的基礎之上來進行,把這個已經存在的類所定義的內容作為自己的內容,並加入若干新的內容。
繼承性是面向對象程序設計語言不同於其它語言的最重要的特點,是其他語言所沒有的。
在類層次中,子類只繼承一個父類的數據結構和方法,則稱為單重繼承。
在類層次中,子類繼承了多個父類的數據結構和方法,則稱為多重繼承。
在軟體開發中,類的繼承性使所建立的軟體具有開放性、可擴充性,這是信息組織與分類的行之有效的方法,它簡化了對象、類的創建工作量,增加了代碼的可重性。
採用繼承性,提供了類的規范的等級結構。通過類的繼承關系,使公共的特性能夠共享,提高了軟體的重用性。
(4)多態性(多形性)
多態性使指相同的操作或函數、過程可作用於多種類型的對象上並獲得不同的結果。不同的對象,收到同一消息可以產生不同的結果,這種現象稱為多態性。
多態性允許每個對象以適合自身的方式去響應共同的消息。
多態性增強了軟體的靈活性和重用性。
三、面向對象的要素
(1)抽象。
抽象是指強調實體的本質、內在的屬性。在系統開發中,抽象指的是在決定如何實現對象之前的對象的意義和行為。使用抽象可以盡可能避免過早考慮一些細節。
類實現了對象的數據(即狀態)和行為的抽象。
(2)封裝性(信息隱藏)。
封裝性是保證軟體部件具有優良的模塊性的基礎。
面向對象的類是封裝良好的模塊,類定義將其說明(用戶可見的外部介面)與實現(用戶不可見的內部實現)顯式地分開,其內部實現按其具體定義的作用域提供保護。
對象是封裝的最基本單位。封裝防止了程序相互依賴性而帶來的變動影響。面向對象的封裝比傳統語言的封裝更為清晰、更為有力。
(3)共享性
面向對象技術在不同級別上促進了共享
同一類中的共享。同一類中的對象有著相同數據結構。這些對象之間是結構、行為特徵的共享關系。
在同一應用中共享。在同一應用的類層次結構中,存在繼承關系的各相似子類中,存在數據結構和行為的繼承,使各相似子類共享共同的結構和行為。使用繼承來實現代碼的共享,這也是面向對象的主要優點之一。
在不同應用中共享。面向對象不僅允許在同一應用中共享信息,而且為未來目標的可重用設計准備了條件。通過類庫這種機制和結構來實現不同應用中的信息共享。
4.強調對象結構而不是程序結構
四、面向對象的開發方法
目前,面向對象開發方法的研究已日趨成熟,國際上已有不少面向對象產品出現。面向對象開發方法有Coad方法、Booch方法和OMT方法等。
1.Booch方法
Booch最先描述了面向對象的軟體開發方法的基礎問題,指出面向對象開發是一種根本不同於傳統的功能分解的設計方法。面向對象的軟體分解更接近人對客觀事務的理解,而功能分解只通過問題空間的轉換來獲得。
2.Coad方法
Coad方法是1989年Coad和Yourdon提出的面向對象開發方法。該方法的主要優點是通過多年來大系統開發的經驗與面向對象概念的有機結合,在對象、結構、屬性和操作的認定方面,提出了一套系統的原則。該方法完成了從需求角度進一步進行類和類層次結構的認定。盡管Coad方法沒有引入類和類層次結構的術語,但事實上已經在分類結構、屬性、操作、消息關聯等概念中體現了類和類層次結構的特徵。
3.OMT方法
OMT方法是1991年由James Rumbaugh等5人提出來的,其經典著作為「面向對象的建模與設計」。
該方法是一種新興的面向對象的開發方法,開發工作的基礎是對真實世界的對象建模,然後圍繞這些對象使用分析模型來進行獨立於語言的設計,面向對象的建模和設計促進了對需求的理解,有利於開發得更清晰、更容易維護的軟體系統。該方法為大多數應用領域的軟體開發提供了一種實際的、高效的保證,努力尋求一種問題求解的實際方法。
4.UML(Unified Modeling Language)語言
軟體工程領域在1995年~1997年取得了前所未有的進展,其成果超過軟體工程領域過去15年的成就總和,其中最重要的成果之一就是統一建模語言(UML)的出現。UML將是面向對象技術領域內佔主導地位的標准建模語言。
UML不僅統一了Booch方法、OMT方法、OOSE方法的表示方法,而且對其作了進一步的發展,最終統一為大眾接受的標准建模語言。UML是一種定義良好、易於表達、功能強大且普遍適用的建模語言。它融入了軟體工程領域的新思想、新方法和新技術。它的作用域不限於支持面向對象的分析與設計,還支持從需求分析開始的軟體開發全過程。
五、面向對象的模型
·對象模型
對象模型表示了靜態的、結構化的系統數據性質,描述了系統的靜態結構,它是從客觀世界實體的對象關系角度來描述,表現了對象的相互關系。該模型主要關心系統中對象的結構、屬性和操作,它是分析階段三個模型的核心,是其他兩個模型的框架。
1.對象和類
(1) 對象。
對象建模的目的就是描述對象。
(2) 類。
通過將對象抽象成類,我們可以使問題抽象化,抽象增強了模型的歸納能力。
(3) 屬性。
屬性指的是類中對象所具有的性質(數據值)。
(4) 操作和方法。
操作是類中對象所使用的一種功能或變換。類中的各對象可以共享操作,每個操作都有一個目標對象作為其隱含參數。
方法是類的操作的實現步驟。
2.關聯和鏈
關聯是建立類之間關系的一種手段,而鏈則是建立對象之間關系的一種手段。
(1) 關聯和鏈的含義。
鏈表示對象間的物理與概念聯結,關聯表示類之間的一種關系,鏈是關聯的實例,關聯是鏈的抽象。
(2) 角色。
角色說明類在關聯中的作用,它位於關聯的端點。
(3) 受限關聯。
受限關聯由兩個類及一個限定片語成,限定詞是一種特定的屬性,用來有效的減少關聯的重數,限定詞在關聯的終端對象集中說明。
限定提高了語義的精確性,增強了查詢能力,在現實世界中,常常出現限定詞。
(4) 關聯的多重性。
關聯的多重性是指類中有多少個對象與關聯的類的一個對象相關。重數常描述為「一」或「多」。
圖10-8表示了各種關聯的重數。小實心圓表示「多個」,從零到多。小空心圓表示零或一。沒有符號表示的是一對一關聯。
3.類的層次結構
(1) 聚集關系。
聚集是一種「整體-部分」關系。在這種關系中,有整體類和部分類之分。聚集最重要的性質是傳遞性,也具有逆對稱性。
聚集可以有不同層次,可以把不同分類聚集起來得到一顆簡單的聚集樹,聚集樹是一種簡單表示,比畫很多線來將部分類聯系起來簡單得多,對象模型應該容易地反映各級層次,圖10-10表示一個關於微機的多極聚集。
(2)一般化關系。
一般化關系是在保留對象差異的同時共享對象相似性的一種高度抽象方式。它是「一般---具體」的關系。一般化類稱為你類,具體類又能稱為子類,各子類繼承了交類的性質,而各子類的一些共同性質和操作又歸納到你類中。因此,一般化關系和繼承是同時存在的。一般化關系的符號表示是在類關聯的連線上加一個小三角形,如圖10-11
4.對象模型
(1)模板。模板是類、關聯、一般化結構的邏輯組成。
(2)對象模型。
對象模型是由一個或若干個模板組成。模板將模型分為若干個便於管理的子塊,在整個對象模型和類及關聯的構造塊之間,模板提供了一種集成的中間單元,模板中的類名及關聯名是唯一的。
·動態模型
動態模型是與時間和變化有關的系統性質。該模型描述了系統的控制結構,它表示了瞬間的、行為化的系統控制
性質,它關心的是系統的控制,操作的執行順序,它表示從對象的事件和狀態的角度出發,表現了對象的相互行為。
該模型描述的系統屬性是觸發事件、事件序列、狀態、事件與狀態的組織。使用狀態圖作為描述工具。它涉及到事件、狀態、操作等重要概念。
1.事件
事件是指定時刻發生的某件事。
2.狀態
狀態是對象屬性值的抽象。對象的屬性值按照影響對象顯著行為的性質將其歸並到一個狀態中去。狀態指明了對象
對輸入事件的響應。
3.狀態圖
狀態圖是一個標準的計算機概念,他是有限自動機的圖形表示,這里把狀態圖作為建立動態模型的圖形工具。
狀態圖反映了狀態與事件的關系。當接收一事件時,下一狀態就取決於當前狀態和所接收的該事件,由該事件引起的狀態變化稱為轉換。
狀態圖是一種圖,用結點表示狀態,結點用圓圈表示;圓圈內有狀態名,用箭頭連線表示狀態的轉換,上面標記事件名,箭頭方向表示轉換的方向。
·功能模型
功能模型描述了系統的所有計算。功能模型指出發生了什麼,動態模型確定什麼時候發生,而對象模型確定發生的客體。功能模型表明一個計算如何從輸入值得到輸出值,它不考慮計算的次序。功能模型由多張數據流圖組成。數據流圖用來表示從源對象到目標對象的數據值的流向,它不包含控制信息,控制信息在動態模型中表示,同時數據流圖也不表示對象中值的組織,值的組織在對象模型中表示。圖10-15給出了一個窗口系統的圖標顯示的數據流圖。
數據流圖中包含有處理、數據流、動作對象和數據存儲對象。
1.處理
數據流圖中的處理用來改變數據值。最低層處理是純粹的函數,一張完整的數據流圖是一個高層處理。
2.數據流
數據流圖中的數據流將對象的輸出與處理、處理與對象的輸入、處理與處理聯系起來。在一個計算機中,用數據流來表示一中間數據值,數據流不能改變數據值。
3.動作對象
動作對象是一種主動對象,它通過生成或者使用數據值來驅動數據流圖。
4.數據存儲對象
數據流圖中的數據存儲是被動對象,它用來存儲數據。它與動作對象不一樣,數據存儲本身不產生任何操作,它只響應存儲和訪問的要求。
六、面向對象的分析
面向對象分析的目的是對客觀世界的系統進行建模。本節以上面介紹的模型概念為基礎,結合「銀行網路系統」的具體實例來構造客觀世界問題的准確、嚴密的分析模型。
分析模型有三種用途:用來明確問題需求;為用戶和開發人員提供明確需求;為用戶和開發人員提供一個協商的基礎,作為後繼的設計和實現的框架。
(一) 面向對象的分析
系統分析的第一步是:陳述需求。分析者必須同用戶一塊工作來提煉需求,因為這樣才表示了用戶的真實意圖,其中涉及對需求的分析及查找丟失的信息。下面以「銀行網路系統」為例,用面向對象方法進行開發。
銀行網路系統問題陳述: 設計支持銀行網路的軟體,銀行網路包括人工出納站和分行共享的自動出納機。每個分理處用分理處計算機來保存各自的帳戶,處理各自的事務;各自分理處的出納站與分理處計算機通信,出納站錄入帳戶和事務數據;自動出納機與分行計算機通信,分行計算機與撥款分理處結帳,自動出納機與用戶介面接受現金卡,與分行計算機通信完成事務,發放現金,列印收據;系統需要記錄保管和安全措施;系統必須正確處理同一帳戶的並發訪問;每個分處理為自己的計算機准備軟體,銀行網路費用根據顧客和現金卡的數目分攤給各分理處。
圖10-18給出銀行網路系統的示意圖。
(二)建立對象模型
首先標識和關聯,因為它們影響了整體結構和解決問題的方法,其次是增加屬性,進一步描述類和關聯的基本網路,使用繼承合並和組織類,最後操作增加到類中去作為構造動態模型和功能模型的副產品。
1.確定類
構造對象模型的第一步是標出來自問題域的相關的對象類,對象包括物理實體和概念。所有類在應用中都必須有意義,在問題陳述中,並非所有類都是明顯給出的。有些是隱含在問題域或一般知識中的。
按圖10-19所示的過程確定類
查找問題陳述中的所有名詞,產生如下的暫定類。
軟體 銀行網路 出納員 自動出納機 分行
分處理 分處理計算機 帳戶 事務 出納站
事務數據 分行計算機 現金卡 用戶 現金
收據 系統 顧客 費用 帳戶數據
訪問 安全措施 記錄保管
根據下列標准,去掉不必要的類和不正確的類。
(1) 冗餘類:若兩個類表述了同一個信息 ,保留最富有描述能力的類。如"用戶"和"顧客"就是重復的描述,因為"顧客"最富有描述性,因此保留它。
(2) 不相乾的類:除掉與問題沒有關系或根本無關的類。例如,攤派費用超出了銀行網路的范圍。
(3) 模糊類:類必須是確定的,有些暫定類邊界定義模糊或范圍太廣,如"記錄保管"就模糊類,它是"事務"中的一部分。
(4) 屬性:某些名詞描述的是其他對象的屬性,則從暫定類中刪除。如果某一性質的獨立性很重要,就應該把他歸屬到類,而不把它作為屬性。
(5) 操作:如果問題陳述中的名詞有動作含義,則描述的操作就不是類。但是具有自身性質而且需要獨立存在的操作應該描述成類。如我們只構造電話模型,"撥號"就是動態模型的一部分而不是類,但在電話撥號系統中,"撥號"是一個重要的類,它日期、時間、受話地點等屬性。
在銀行網路系統中,模糊類是"系統"、"安全措施"、"記錄保管"、"銀行網路"等。屬於屬性的有:"帳戶數據"、"收據"、"現金"、"事務數據"。屬於實現的如:"訪問"、"軟體"等。這些均應除去。
2.准備數據字典
為所有建模實體准備一個數據字典。准確描述各個類的精確含義,描述當前問題中的類的范圍,包括對類的成員、用法方面的假設或限制。
3.確定關聯
兩個或多個類之間的相互依賴就是關聯。一種依賴表示一種關聯,可用各種方式來實現關聯,但在分析模型中應刪除實現的考慮,以便設計時更為靈活。關聯常用描述性動詞或動詞片語來表示,其中有物理位置的表示、傳導的動作、通信、所有者關系、條件的滿足等。從問題陳述中抽取所有可能的關聯表述,把它們記下來,但不要過早去細化這些表述。
下面是銀行網路系統中所有可能的關聯,大多數是直接抽取問題中的動詞片語而得到的。在陳述中,有些動詞片語表述的關聯是不明顯的。最後,還有一些關聯與客觀世界或人的假設有關,必須同用戶一起核實這種關聯,因為這種關聯在問題陳述中找不到。
銀行網路問題陳述中的關聯:
·銀行網路包括出納站和自動出納機;
·分行共享自動出納機;
·分理處提供分理處計算機;
·分理處計算機保存帳戶;
·分理處計算機處理帳戶支付事務;
·分理處擁有出納站;
·出納站與分理處計算機通信;
·出納員為帳戶錄入事務;
·自動出納機接受現金卡;
·自動出納機與用戶介面;
·自動出納機發放現金;
·自動出納機列印收據;
·系統處理並發訪問;
·分理處提供軟體;
·費用分攤給分理處。
隱含的動詞片語:
·分行由分理處組成;
·分理處擁有帳戶;
·分行擁有分行計算機;
·系統提供記錄保管;
·系統提供安全;
·顧客有現金卡。
基於問題域知識的關聯:
·分理處僱傭出納員;
·現金卡訪問帳戶。
使用下列標准去掉不必要和不正確的關聯:
(1) 若某個類已被刪除,那麼與它有關的關聯也必須刪除或者用其它類來重新表述。在例中,我們刪除了"銀行網路",相關的關聯也要刪除。
(2) 不相乾的關聯或實現階段的關聯:刪除所有問題域之外的關聯或涉及實現結構中的關聯。如"系統處理並發訪問"就是一種實現的概念。
(3) 動作:關聯應該描述應用域的結構性質而不是瞬時事件,因此應刪除"自動出納機接受現金卡","自動出納機與用戶介面"等。
(4) 派生關聯:省略那些可以用其他關聯來定義的關聯。因為這種關聯是冗餘的。銀行網路系統的初步對象圖如圖10-20所示。其中含有關聯。
4.確定屬性
屬性是個體對象的性質,屬性通常用修飾性的名詞片語來表示.形容詞常常表示具體的可枚舉的屬性值,屬性不可能在問題陳述中完全表述出來,必須藉助於應用域的知識及對客觀世界的知識才可以找到它們。只考慮與具體應用直接相關的屬性,不要考慮那些超出問題范圍的屬性。首先找出重要屬性,避免那些只用於實現的屬性,要為各個屬性取有意義的名字。按下列標准刪除不必要的和不正確的屬性:
(1) 對象:若實體的獨立存在比它的值重要,那麼這個實體不是屬性而是對象。如在郵政目錄中,"城市"是一個屬性,然而在人口普查中,"城市"則被看作是對象。在具體應用中,具有自身性質的實體一定是對象。
(2) 定詞:若屬性值取決於某種具體上下文,則可考慮把該屬性重新表述為一個限定詞。
(3) 名稱:名稱常常作為限定詞而不是對象的屬性,當名稱不依賴於上下文關系時,名稱即為一個對象屬性,尤其是它不惟一時。
(4) 標識符:在考慮對象模糊性時,引入對象標識符表示,在對象模型中不列出這些對象標識符,它是隱含在對象模型中,只列出存在於應用域的屬性。
(5) 內部值:若屬性描述了對外不透明的對象的內部狀態,則應從對象模型中刪除該屬性。
(6) 細化:忽略那些不可能對大多數操作有影響的屬性。
5.使用繼承來細化類
使用繼承來共享公共機構,以次來組織類,可以用兩種方式來進行。
(1) 自底向上通過把現有類的共同性質一般化為父類,尋找具有相似的屬性,關系或操作的類來發現繼承。例如"遠程事務"和"出納事務"是類似的,可以一般化為"事務"。有些一般化結構常常是基於客觀世界邊界的現有分類,只要可能,盡量使用現有概念。對稱性常有助於發現某些丟失的類。
(2) 自頂向下將現有的類細化為更具體的子類。具體化常常可以從應用域中明顯看出來。應用域中各枚舉字情況是最常見的具體化的來源。例如:菜單,可以有固定菜單,頂部菜單,彈出菜單,下拉菜單等,這就可以把菜單類具體細化為各種具體菜單的子類。當同一關聯名出現多次且意義也相同時,應盡量具體化為相關聯的類,例如"事務"從"出納站"和"自動出納機"進入,則"錄入站"就是"出納站"和"自動出納站"的一般化。在類層次中,可以為具體的類分配屬性和關聯。各屬性和都應分配給最一般的適合的類,有時也加上一些修正。
應用域中各枚舉情況是最常見的具體化的來源。
6.完善對象模型
對象建模不可能一次就能保證模型是完全正確的,軟體開發的整個過程就是一個不斷完善的過程。模型的不同組成部分多半是在不同的階段完成的,如果發現模型的缺陷,就必須返回到前期階段去修改,有些細化工作是在動態模型和功能模型完成之後才開始進行的。
(1) 幾種可能丟失對象的情況及解決辦法:
·同一類中存在毫無關系的屬性和操作,則分解這個類,使各部分相互關聯;
·一般化體系不清楚,則可能分離扮演兩種角色的類
·存在無目標類的操作,則找出並加上失去目標的類;
·存在名稱及目的相同的冗餘關聯,則通過一般化創建丟失的父類,把關聯組織在一
『玖』 資料庫結構
新一輪油氣資源評價資料庫是建立在國家層面上的資料庫,資料庫設計首先立足於國家能源政策和戰略制定的宏觀要求,還要結合油氣資源評價的工作特徵和各個評價項目及資源的具體情況。使用當前最流行和最成熟的資料庫技術進行資料庫的總體結構設計。
資料庫的設計以《石油工業資料庫設計規范》為指導標准,以《石油勘探開發數據》為設計基礎,借鑒前人的優秀設計理念和思路,參考國內外優秀的資源評價資料庫和油氣資源資料庫的設計技術優勢,結合本輪資源評價的具體特點,按照面向對象的設計和面向過程的設計相結合的設計方法,進行資料庫的數據劃分設計。
油氣資源評價資料庫要滿足新一輪全國油氣資源評價工作的常規油氣資源評價、煤層氣資源評價、油砂資源評價、油頁岩資源評價四個油氣資源評價的數據需求。進行資料庫具體數據內容設計。
並且,資料庫的設計要為油氣資源評價的快速、動態評價和遠程評價工作的需求保留足夠數據擴展介面,資料庫具有良好開放性、兼容性和可擴充性。
(一)數據劃分
資料庫內存放的數據將支持資源評價的整個過程。為了能更好地管理庫中數據,需要對整個過程中將用到的數據進行分類管理。具體分類方式如下(圖4-11):
圖4-11 數據分類示意圖
1.按照應用類型劃分
按照數據在資源評價過程中的應用類型劃分,可以劃分為基礎數據、參數數據和評價結果數據。
基礎數據是指從勘探生產活動及認識中直接獲取的原始數據,這些數據一般沒有經過復雜的處理和計算過程。如分析化驗數據、鑽井地質數據、盆地基礎數據等。這些數據是整個評價工作的基礎。
參數數據是指在評價過程中各種評價方法和軟體直接使用的參數數據。
評價結果數據是指資源評價中產生的各種評價結果數據,如資源量結果數據、地質評價結果數據等。
2.按照評價對象劃分
本次評價共分為大區、評價單元、計算單元三個層次,在研究中又使用了盆地、一級構造單元,在評價對象總體考慮中按照評價對象將數據劃分為大區、評價單元、計算單元等類型。
3.按照獲取方式劃分
按照獲取方式可以將數據分為直接獲取、研究獲取、間接獲取幾類。
4.按照存儲類型劃分
按照存儲類型可以將數據劃分為結構化數據和非結構化數據。
結構化數據是指能夠用現有的關系資料庫系統直接管理的數據,進一步又可以分為定量數據和定性數據兩類。
非結構化數據是指不能用現有的關系資料庫系統直接管理和操作的數據,它必須藉助於另外的工具管理和操作。如圖件數據、文檔數據等。
庫中數據類型的劃分共分六個層次逐次劃分,包括:數據存儲類型→資源類型→評價對象→應用→獲取方式→數據特徵。
對於結構化存儲的數據在應用層分為三類:基礎數據、中間數據和結果數據,基礎數據中包含用於類比的基礎數據、用於統計分析的基礎數據和直接用於公式運算的基礎數據;結構化存儲的數據在獲取方式上可以繼續劃分,其中,用於公式運算的數據可以細化為專家直接錄入、由地質類比獲取、通過生產過程獲取、通過地質研究過程獲取及其他方式。中間數據可以從以下方式獲取:標准、統計、類比、參數的關聯。結果數據的獲取有兩種方式:公式運算結果和通過鑽井、地質、綜合研究等提交的文字報告。
對於非結構化存儲的數據在應用層分為兩類:圖形數據和文檔數據。
圖形數據在獲取方式上可以繼續劃分成四種方式:通過工程測量數據獲取(如地理圖件、井位坐標數據等)、通過地質研究過程獲取(如沉積相圖、構造區劃圖等)、由綜合研究獲取(如綜合評價圖等)、其他方式。
圖形數據在表現方式上又可以進一步分為有坐標意義的圖形(如構造單元劃分圖、地理圖、井點陣圖等)、數值圖(如產烴率曲線圖、酐洛根熱降解圖等)和無坐標含義圖(如剖面圖)等。
文檔數據是指評價過程中產生的各種報告、項目運行記錄等。
(二)資料庫結構
從業務需求上,根據數據用途、數據類型和數據來源,可將本次的油氣資源評價資料庫分為三級:基礎庫、參數庫、成果庫(圖4-12)。其結構如下:
圖4-12 資料庫結構示意圖
1.基礎庫
基礎庫是油氣資源評價工作的最基礎的原始數據,有實測數據(物探數據、測井數據、鑽井數據、開發數據等)、實驗數據和經驗數據等。
確定基礎數據實際上是一項涉及油田勘探、開發等領域的多學科的復雜工作,是油氣資源評價工作的研究過程和研究成果在資料庫中的具體表現方式。在設計資料庫的過程中,需要與參數研究專家經過多次反復,才能最終確定基礎資料庫,確保基礎資料庫能滿足目前所有評價工作中計算的需要。
2.參數庫
參數庫用於存儲油氣資源評價工作所用到的參數數據,評價軟體,直接從參數庫中提取參數數據,用於計算。參數數據由基礎數據匯總而來,也可以由專家根據經驗直接得到。
本次評價中所涉及的參數大致可以分為以下幾類:①直接應用的參數;②通過標准或類比借用的參數;③通過研究過程或復雜的預處理得到的參數。
3.成果庫
成果庫用於存儲資源評價結果,包括各種計算結果、各種文檔、電子表格、圖片、圖冊等數據。
資料庫的體系結構採用分布式多層資料庫結構,包括三個組成部分:應用服務層、應用邏輯層和數據服務層。
資料庫體系結構如圖4-13所示。
圖4-13 體系結構結構圖
(1)應用服務層:應用服務層包含復雜的事務處理邏輯,應用服務層主要由中間件組件構成。中間件是位於上層應用和下層服務之間的一個軟體層,提供更簡單、可靠和增值服務。並且能夠實現跨庫檢索的關鍵技術。它能夠使應用軟體相對獨立於計算機硬體和操作系統平台,把分散的資料庫系統有機地組合在一起,為應用軟體系統的集成提供技術基礎,中間件具有標准程序介面和協議,可以實現不同硬體和操作系統平台上的數據共享和應用互操作。而在具體實現上,中間件是一個用API定義的分布式軟體管理框架,具有潛在的通信能力和良好的可擴展性能。中間件包含系統功能處理邏輯,位於應用伺服器端。它的任務是接受用戶的請求,以特定的方式向應用伺服器提出數據處理申請,通過執行相應的擴展應用程序與應用服務層進行連接,當得到應用伺服器返回的處理結果後提交給應用伺服器,再由應用伺服器傳送回客戶端。根據國內各大石油公司具體的需求開發相應的地質、油藏、生產等應用軟體功能程序模塊和各種演算法模塊。
(2)應用邏輯層:邏輯數據層是擴展數據服務層邏輯處理層,針對當前的底層資料庫的數據結構,根據具體的需求,應用各種資料庫技術,包括臨時表、視圖、存儲過程、游標、復制和快照等技術手段從底層資料庫中提取相關的數據,構建面向具體應用的邏輯資料庫或者形成一個虛擬的資料庫平台。邏輯數據層包含底層資料庫的部分或全部數據處理邏輯,並處理來自應用服務層的數據請求和訪問,將處理結果返回給邏輯數據層。
形成一個虛擬的資料庫平台我們可以應用資料庫系統中的多個技術來實現。如果系統中的一個節點中的場地或分片數據能夠滿足當前虛擬資料庫,可以在應用服務層中使用大量的查詢,生成一個以數據集結果為主的虛擬資料庫平台,並且由數據集附帶部分資料庫的管理應用策略。或者對節點上的資料庫進行復制方法進行虛擬資料庫的建立。對與需要對多個節點上的資料庫進行綜合篩選,則要對各個節點上的資料庫進行復制,合並各個復制形成一個應用邏輯層,從而建立一個虛擬數據平台。
(3)數據服務層:即資料庫伺服器層,其中包含系統的數據處理邏輯,位於不同的操作系統平台上,不同資料庫平台(異構資料庫),具體完成數據的存儲、數據的完整性約束。也可以直接處理來自應用服務層的數據請求和訪問,將處理結果返回給邏輯數據層或根據邏輯數據層通過提交的請求,返回數據信息和數據處理邏輯方法。
(三)數據建設標准
1.評價數據標准
系統資料庫中的數據格式、大小、類型遵從國家及行業標准,參考的標准如表4-23。
表4-23 資料庫設計參考標准
續表
系統中數據的格式及單位參考《常規油氣資源評價實施方案》、《煤層氣資源評價實施方案》、《油砂資源評價實施方案》、《油頁岩資源評價實施方案》及數據字典。
2.圖形圖件標准
對於地質研究來說,地質類圖件是比較重要的。各種地質評價圖形遵循以下標准(表4-24)。
表4-24 系統圖形遵循的相關標准
系統對圖形的要求為必須為帶有地理坐標意義的、滿足上述標准體系要求的矢量圖形,且採用統一的地理底圖。圖形格式採用:MapGIS圖形交換格式、GeoInfo圖形格式、ArcInfo圖形交換格式、MapInfo圖形交換格式和GeoMap圖形交換格式。
圖件的比例尺要求:
全國性圖件:1∶400萬或1:600萬
大區圖件:1:200萬
盆地圖件:1:40萬或1:50萬
評價單元圖件:1:10萬或1:20萬
圖件的內容要求符合《常規油氣資源評價實施方案》、《煤層氣資源評價實施方案》、《油砂資源評價實施方案》和《油頁岩資源評價實施方案》的規定。
(四)數據內容
資料庫中存儲的數據包括常規油氣相關數據、煤層氣相關數據、油砂相關數據和油頁岩相關數據;還有可采系數研究涉及的數據,包括研究所需基礎數據和研究成果數據;以及趨勢預測相關數據。
『拾』 訪問資料庫的方式有哪些啊
在ASP中可以通過三種方式訪問資料庫:
1、IDC(Internet Database Connector)方式;
2、ADO(ActiveX Data Objects)方式;
3、RDS(Remote Data Service)方式。
這三種訪問方式對資料庫的訪問都是由Internet Information Server完成的。通過Web瀏覽器用HTTP協議向IIS(Internet信息伺服器)發送請求,IIS執行對資料庫的訪問,並返回一個HTML格式的文檔響應