99999久久久久久亚洲,欧美人与禽猛交狂配,高清日韩av在线影院,一个人在线高清免费观看,啦啦啦在线视频免费观看www

熱線電話:13121318867

登錄
首頁精彩閱讀數(shù)據(jù)模型的探討與分析
數(shù)據(jù)模型的探討與分析
2017-11-09
收藏

數(shù)據(jù)模型的探討與分析

在工作中,關(guān)于概念模型、邏輯模型和物理模型三個數(shù)據(jù)模型的探討中,發(fā)現(xiàn)大家都有自己的見解,但是卻沒有一個人能真正的說清楚這三個模型的涵義與差異。

雖說由于這三個模型在軟件開發(fā)的過程中,由于其功能與作用的差異,結(jié)合項目規(guī)模等實際情況,不一定會全部使用以節(jié)省項目時間(有時候直接設(shè)計物理模型),但我認為不應(yīng)該被冠以“大家對這個概念的理解不同”不同之名而歪曲數(shù)據(jù)模型的定義。事實上,這三個模型的概念是清晰的、標(biāo)準(zhǔn)化的。

1.2約定

本文中討論的概念模型、邏輯模型和物理模型,主要是針對數(shù)據(jù)模型而言,也就是概念數(shù)據(jù)模型、邏輯數(shù)據(jù)模型和物理數(shù)據(jù)模型,而不是系統(tǒng)分析與設(shè)計中泛義的概念模型、邏輯模型和物理模型。

2數(shù)據(jù)模型的定義與分析

2.1概念模型

2.1.1定義

概念模型,是面向數(shù)據(jù)庫用戶的真實世界的模型,主要用來描述真實世界中的概念化結(jié)構(gòu),它使數(shù)據(jù)庫的設(shè)計人員在設(shè)計的初始階段,擺脫計算機系統(tǒng)及DBMS的具體技術(shù)問題,集中精力分析數(shù)據(jù)以及數(shù)據(jù)之間的聯(lián)系等,與具體的數(shù)據(jù)管理系統(tǒng)(Database Management System,簡稱DBMS)無關(guān)。概念數(shù)據(jù)模型必須換成邏輯數(shù)據(jù)模型,才能在DBMS中實現(xiàn)?!俣劝倏?

概念數(shù)據(jù)模型是最終用戶對數(shù)據(jù)存儲的看法,反映了最終用戶綜合性的信息需求,它以數(shù)據(jù)類的方式描述企業(yè)級的數(shù)據(jù)需求,數(shù)據(jù)類代表了在業(yè)務(wù)環(huán)境中自然聚集成的幾個主要類別數(shù)據(jù)?!狫erome's BI BLOG

我簡單化歸納一下:概念模型,就是利用自然語言對真實世界的業(yè)務(wù)數(shù)據(jù)的抽象化描述,是面向終端用戶的數(shù)據(jù)架構(gòu)。

2.1.2作用

概念數(shù)據(jù)模型的目標(biāo)是統(tǒng)一業(yè)務(wù)概念,作為業(yè)務(wù)人員和技術(shù)人員之間溝通的橋梁,確定不同實體之間的最高層次的關(guān)系。

2.1.3實例分析

下面舉兩個例子來說。

例一:

先進行一番業(yè)務(wù)描述:我們的項目計劃,一般包括年計劃和月計劃,年計劃可分解為月計劃。

我們來理解一下這句業(yè)務(wù)上的描述,可以把它分解為兩部分:“計劃包括年計劃和月計劃”和“年計劃可分解為月計劃”。我們從業(yè)務(wù)層面上,可以抽象出兩個數(shù)據(jù)對象:年計劃和月計劃。

再用概念模型E-R圖表示如下:

概念數(shù)據(jù)模型一:

概念數(shù)據(jù)模型二:

概念數(shù)據(jù)模型一是不完整的概念模型,概念數(shù)據(jù)模型二就是完整的概念模型。

原因:從概念數(shù)據(jù)模型一里面無法判斷其中有多少隱藏的信息,當(dāng)然你可以在另一個地方描述存在年計劃或月計劃這種業(yè)務(wù)情景,但是在這里你沒有描述出來,所以至少在這里它是不完整的?我想問:此時不說,更待何時?

例二:

對于概念模型有一種典型的情況。例如,下面是一組關(guān)于財務(wù)審計系統(tǒng)中的概念數(shù)據(jù)模型:

姑且勿論這個概念模型是否正確,至少它是粒度很粗很不完整的。

對于“財務(wù)數(shù)據(jù)”來說,它并不能做為一個實體,而是其中包含了多個實體(包括賬套,憑證,科目等相關(guān)實體),把它們(財務(wù)數(shù)據(jù)、審計數(shù)據(jù)與結(jié)果數(shù)據(jù))定義為數(shù)據(jù)域(財務(wù)數(shù)據(jù)域、審計數(shù)據(jù)域與結(jié)果數(shù)據(jù)域)也許更加準(zhǔn)確,而不是把它定義為一個數(shù)據(jù)(實體)。

“財務(wù)數(shù)據(jù)”域完整的概念模型,應(yīng)該如下圖:

(這里我假設(shè)這個概念模型里的實體是完整的,實際的財務(wù)系統(tǒng)當(dāng)然不止這三個實體。)

這里也許有個疑問:這沒問題啊,先系統(tǒng)性,再結(jié)構(gòu)化嘛。

在此,我也真的很糾結(jié),想想還是先不對這一句話解釋太多,我們先進入概念模型的設(shè)計原則的討論。完了之后,希望大家能找到“先系統(tǒng)性,再結(jié)構(gòu)化”這句話的真諦。

2.1.4設(shè)計原則

我們先來引用一下數(shù)據(jù)庫設(shè)計范式里面第三范式的描述:第三范式(3NF)要求一個數(shù)據(jù)庫表中不包含已在其它表中已包含的非主關(guān)鍵字信息。

在系統(tǒng)分析中對于數(shù)據(jù)架構(gòu)的分析,一般原則是以數(shù)據(jù)實體為基本元素,即每個實體不可再分解為止。這也正符合數(shù)據(jù)庫設(shè)計三范式里面第三范式的定義。

如果在分析階段數(shù)據(jù)對象沒有細化到最小粒度的數(shù)據(jù)實體,那么相當(dāng)于把系統(tǒng)分析的工作留給了下一階段的設(shè)計人員,從某種角度上來講,這是不符合系統(tǒng)分析與設(shè)計的原則的。因為系統(tǒng)設(shè)計人員的工作是根據(jù)分析結(jié)果進行設(shè)計,而不是還要進行系統(tǒng)分析。

一:分析階段要清楚問題的所有內(nèi)容,即系統(tǒng)做什么。也就是:What to do.

二:設(shè)計階段的設(shè)計工作是根據(jù)系統(tǒng)分析的結(jié)果而進行的,不完整的系統(tǒng)分析結(jié)果無法得到一個完整的系統(tǒng)設(shè)計結(jié)果。I don't know what to do, I don't know how to do.

對于結(jié)構(gòu)化的分析我們一般的原則是:

一、使用一個總體結(jié)構(gòu)圖來描述各個數(shù)據(jù)域之間的關(guān)系,然后對數(shù)據(jù)域里面的所有數(shù)據(jù)實體進行結(jié)構(gòu)化的分析與設(shè)計。

二、對于同一個數(shù)據(jù)域的結(jié)構(gòu)化層次最多不超過三層結(jié)構(gòu),最好不超過兩層;對于不同數(shù)據(jù)域由于系統(tǒng)規(guī)模較大,如果在同一個篇幅里面無法完全描述出來,則可以切片分章節(jié)對不同的數(shù)據(jù)域進行結(jié)構(gòu)化的描述。

2.1.5小結(jié)

概念模型設(shè)計階段,主要處于系統(tǒng)分析的階段,屬性可以不完全描述,但也可以描述一些主要的屬性。如果你在E-R圖上不給出屬性,可以選擇一個專門的表格來描述。另一方面,同一個實體的詳細信息,在一個地方描述就好了,不要每一個涉及該實體的地方都描述一番。因為如果實體有變化的時候,我想有些實體會在幾百上千個點上,你也不會每一個地方都去維護一次。

下面引用Jerome's BI BLOG里面的一句,這一句話很重要,也是理解概念模型與邏輯模型之間的區(qū)別的關(guān)鍵。

概念數(shù)據(jù)模型的內(nèi)容包括重要的實體及實體之間的關(guān)系。在概念數(shù)據(jù)模型中不包括實體的屬性,也不用定義實體的主鍵。這是概念數(shù)據(jù)模型和邏輯數(shù)據(jù)模型的主要區(qū)別?!狫erome's BI BLOG

2.2邏輯模型

2.2.1定義

邏輯模型,是用戶從數(shù)據(jù)庫所看到的模型,是具體的DBMS所支持的數(shù)據(jù)模型,如網(wǎng)狀數(shù)據(jù)模型(Network Data Model)、層次數(shù)據(jù)模型(Hierarchical Data Model)等等。此模型既要面向用戶,又要面向系統(tǒng),主要用于數(shù)據(jù)庫管理系統(tǒng)(DBMS)的實現(xiàn)?!俣劝倏?

2.2.2作用

邏輯模型是概念模型從真實世界向計算機世界的轉(zhuǎn)換,加入了系統(tǒng)設(shè)計的相關(guān)內(nèi)容。

邏輯數(shù)據(jù)建模不僅會影響數(shù)據(jù)庫設(shè)計的方向,還間接影響最終數(shù)據(jù)庫的性能和管理。如果在實現(xiàn)邏輯數(shù)據(jù)模型時投入得足夠多,那么在物理數(shù)據(jù)模型設(shè)計時就可以有許多可供選擇的方法。

2.2.3實例分析

例如:接著上面“計劃表”的設(shè)計,“計劃表”的邏輯結(jié)構(gòu),如下圖所示。

其中:

1.計劃標(biāo)識:這是由于系統(tǒng)設(shè)計的需要而加進來的,與業(yè)務(wù)無關(guān)的屬性。

2.計劃類型:0:年計劃;1:月計劃;2:季度計劃。(這里使用整型表示,當(dāng)然可以是字符、字符串或其他自定義類型,這完全是設(shè)計上的事,一般不要在系統(tǒng)分析階段啰嗦這些,客戶不關(guān)心的事兒。)

雖然計劃在業(yè)務(wù)概念上來講,存在年計劃、月計劃,甚至于季度計劃,但是在計算機世界中,計劃的類型除了在概念上不一樣之外,其他屬性都是一樣的,那么邏輯模型設(shè)計的時候可以把計劃數(shù)據(jù)定義為一個實體,而使用其中的一個字段來標(biāo)識某一份計劃是年計劃、月計劃,還是季度計劃。

2.2.4設(shè)計原則

邏輯數(shù)據(jù)模型反映的是系統(tǒng)分析設(shè)計人員對數(shù)據(jù)存儲的觀點,是對概念數(shù)據(jù)模型進一步的分解和細化。邏輯數(shù)據(jù)模型是根據(jù)業(yè)務(wù)規(guī)則確定的,關(guān)于業(yè)務(wù)對象、業(yè)務(wù)對象的數(shù)據(jù)項及業(yè)務(wù)對象之間關(guān)系的基本藍圖。

邏輯數(shù)據(jù)模型的內(nèi)容包括所有的實體和關(guān)系,確定每個實體的屬性,定義每個實體的主鍵,指定實體的外鍵,需要進行范式化處理。

例如,在“計劃表”邏輯模型中可能加入了由于系統(tǒng)設(shè)計需要的一些字段(屬性),這些字段可能是在業(yè)務(wù)概念上不存在或不需要的。

2.2.5小結(jié)

邏輯數(shù)據(jù)模型的目標(biāo)是盡可能詳細的描述數(shù)據(jù),但并不考慮數(shù)據(jù)在物理上如何來實現(xiàn)?!@一句話很重要,也是理解邏輯模型與物理模型之間區(qū)別性的關(guān)鍵。

2.3物理模型

2.3.1定義

物理模型,是面向計算機物理表示的模型,描述了數(shù)據(jù)在儲存介質(zhì)上的組織結(jié)構(gòu),它不但與具體的DBMS有關(guān),而且還與操作系統(tǒng)和硬件有關(guān)。每一種邏輯數(shù)據(jù)模型在實現(xiàn)時都有起對應(yīng)的物理數(shù)據(jù)模型。DBMS為了保證其獨立性與可移植性,大部分物理數(shù)據(jù)模型的實現(xiàn)工作由系統(tǒng)自動完成,而設(shè)計者只設(shè)計索引、聚集等特殊結(jié)構(gòu)。 ——百度百科

2.3.2作用

物理數(shù)據(jù)模型的目標(biāo)是指定如何用具體的數(shù)據(jù)庫模式來實現(xiàn)邏輯數(shù)據(jù)模型,以及真正的保存數(shù)據(jù)。

2.3.3實例分析

例如:對于計劃表,基于SQL Server數(shù)據(jù)庫管理系統(tǒng)為存儲介質(zhì)的物理模型結(jié)構(gòu)。如下圖所示:

字段對照表:

數(shù)據(jù)表名:Plan(計劃表)

當(dāng)基于Oracle數(shù)據(jù)庫模式的時候,這個物理模型則是不一樣的。

例如:字符串,在Oracle上為varchar2,在Sql Server上為varchar等。

2.3.4設(shè)計原則

物理數(shù)據(jù)模型是在邏輯數(shù)據(jù)模型的基礎(chǔ)上,考慮各種具體的技術(shù)實現(xiàn)因素,進行數(shù)據(jù)庫體系結(jié)構(gòu)設(shè)計,真正實現(xiàn)數(shù)據(jù)在數(shù)據(jù)庫中的存儲。

物理數(shù)據(jù)模型的內(nèi)容包括確定所有的表和列,定義外鍵用于確定表之間的關(guān)系,基于用戶的需求可能進行范式化等內(nèi)容。在物理實現(xiàn)上的考慮,可能會導(dǎo)致物理數(shù)據(jù)模型和邏輯數(shù)據(jù)模型有較大的不同。

2.3.5小結(jié)

物理模型跟邏輯模型的區(qū)別就是,邏輯模型并不指出特定的數(shù)據(jù)存儲,僅限于系統(tǒng)邏輯上的描述。物理模型是邏輯模型在具體存儲介質(zhì)上的表現(xiàn),直接與具體的數(shù)據(jù)庫管理系統(tǒng)或存儲介質(zhì)相關(guān)的數(shù)據(jù)模型。例如:Oracle、SQL Server、XML File或文件文件等。

物理模型給出了在數(shù)據(jù)庫系統(tǒng)的字段名稱,與具體數(shù)據(jù)庫管理系統(tǒng)相關(guān)的數(shù)據(jù)類型的定義。而邏輯模型與具體的數(shù)據(jù)庫管理系統(tǒng)或存儲介質(zhì)無關(guān),僅為使用計算機系統(tǒng)概念中的一種邏輯結(jié)構(gòu)。

2.4總結(jié)

概念模型是對真實世界的一種概念結(jié)構(gòu)的描述;

邏輯模型是計算機系統(tǒng)上一種邏輯結(jié)構(gòu)的描述;

物理模型則是與具體的計算機物理介質(zhì)直接關(guān)聯(lián)的一種結(jié)構(gòu)化的表達。

總的來說,我的理解是:概念模型、邏輯模型和物理模型是系統(tǒng)分析與設(shè)計中同一類型工具中三個不同層面的工具,一般應(yīng)用于對同一個對象面向不同層面的用戶而做不同的描述。

數(shù)據(jù)分析咨詢請掃描二維碼

若不方便掃碼,搜微信號:CDAshujufenxi

數(shù)據(jù)分析師資訊
更多

OK
客服在線
立即咨詢
客服在線
立即咨詢
') } function initGt() { var handler = function (captchaObj) { captchaObj.appendTo('#captcha'); captchaObj.onReady(function () { $("#wait").hide(); }).onSuccess(function(){ $('.getcheckcode').removeClass('dis'); $('.getcheckcode').trigger('click'); }); window.captchaObj = captchaObj; }; $('#captcha').show(); $.ajax({ url: "/login/gtstart?t=" + (new Date()).getTime(), // 加隨機數(shù)防止緩存 type: "get", dataType: "json", success: function (data) { $('#text').hide(); $('#wait').show(); // 調(diào)用 initGeetest 進行初始化 // 參數(shù)1:配置參數(shù) // 參數(shù)2:回調(diào),回調(diào)的第一個參數(shù)驗證碼對象,之后可以使用它調(diào)用相應(yīng)的接口 initGeetest({ // 以下 4 個配置參數(shù)為必須,不能缺少 gt: data.gt, challenge: data.challenge, offline: !data.success, // 表示用戶后臺檢測極驗服務(wù)器是否宕機 new_captcha: data.new_captcha, // 用于宕機時表示是新驗證碼的宕機 product: "float", // 產(chǎn)品形式,包括:float,popup width: "280px", https: true // 更多配置參數(shù)說明請參見:http://docs.geetest.com/install/client/web-front/ }, handler); } }); } function codeCutdown() { if(_wait == 0){ //倒計時完成 $(".getcheckcode").removeClass('dis').html("重新獲取"); }else{ $(".getcheckcode").addClass('dis').html("重新獲取("+_wait+"s)"); _wait--; setTimeout(function () { codeCutdown(); },1000); } } function inputValidate(ele,telInput) { var oInput = ele; var inputVal = oInput.val(); var oType = ele.attr('data-type'); var oEtag = $('#etag').val(); var oErr = oInput.closest('.form_box').next('.err_txt'); var empTxt = '請輸入'+oInput.attr('placeholder')+'!'; var errTxt = '請輸入正確的'+oInput.attr('placeholder')+'!'; var pattern; if(inputVal==""){ if(!telInput){ errFun(oErr,empTxt); } return false; }else { switch (oType){ case 'login_mobile': pattern = /^1[3456789]\d{9}$/; if(inputVal.length==11) { $.ajax({ url: '/login/checkmobile', type: "post", dataType: "json", data: { mobile: inputVal, etag: oEtag, page_ur: window.location.href, page_referer: document.referrer }, success: function (data) { } }); } break; case 'login_yzm': pattern = /^\d{6}$/; break; } if(oType=='login_mobile'){ } if(!!validateFun(pattern,inputVal)){ errFun(oErr,'') if(telInput){ $('.getcheckcode').removeClass('dis'); } }else { if(!telInput) { errFun(oErr, errTxt); }else { $('.getcheckcode').addClass('dis'); } return false; } } return true; } function errFun(obj,msg) { obj.html(msg); if(msg==''){ $('.login_submit').removeClass('dis'); }else { $('.login_submit').addClass('dis'); } } function validateFun(pat,val) { return pat.test(val); }