数据建模大数据就业挑战月薪30K
點(diǎn)擊關(guān)注 異步圖書,置頂公眾號
每天與你分享 IT好書 技術(shù)干貨 職場知識
本文大概 10624 字
讀完共需 30 分鐘
Tips 參與文末話題討論,即有機(jī)會獲得異步圖書一本。數(shù)據(jù)建模是對現(xiàn)實(shí)世界各類數(shù)據(jù)進(jìn)行抽象組織、界定數(shù)據(jù)庫需管轄的范圍、確定數(shù)據(jù)的組織形式等直至轉(zhuǎn)化成現(xiàn)實(shí)數(shù)據(jù)庫的過程。而數(shù)據(jù)模型是構(gòu)建應(yīng)用系統(tǒng)的核心,是盡可能精準(zhǔn)地表示業(yè)務(wù)運(yùn)轉(zhuǎn)的概念性框架。
數(shù)據(jù)建模的過程是界定、分析、發(fā)現(xiàn)數(shù)據(jù)需求,再用可視化的形式(“模型”)表示這種數(shù)據(jù)需求的過程。數(shù)據(jù)模型是用于精確表示信息領(lǐng)域溝通的一套符號和文字。任何景觀的模型都會包含某些內(nèi)容(例如地圖就是地理景觀的模型),同時(shí)為了方便理解又排除某些內(nèi)容。
“發(fā)現(xiàn)”是確定業(yè)務(wù)過程或應(yīng)用中業(yè)務(wù)需要什么信息,例如了解到客戶和賬號是個(gè)重要的概念。“分析”是明確需求的過程,例如對客戶和賬戶逐步有了清楚的定義,理解了客戶與他們的賬戶之間的關(guān)系。“界定范圍”涉及與業(yè)務(wù)合作來決定什么對于特定的業(yè)務(wù)階段是最重要的。例如,第一階段是否同時(shí)需要“保存”和“檢查賬號”,還是只要“檢查賬號”就行了。“表示”是指要用清晰明確的語言展現(xiàn)出信息景觀看上去是什么樣的,例如可以用以下數(shù)據(jù)模型表示:
一個(gè)客戶可以有一個(gè)或多個(gè)賬號。
一個(gè)賬號必須由一個(gè)或多個(gè)客戶擁有。
一旦我們將這些需求寫成了數(shù)據(jù)模型文檔,就可以跟應(yīng)用開發(fā)所涉及的業(yè)務(wù)和信息技術(shù)(Information Technology,IT)人員進(jìn)行溝通了,如業(yè)務(wù)用戶、業(yè)務(wù)分析師、數(shù)據(jù)建模人員、數(shù)據(jù)架構(gòu)師、數(shù)據(jù)庫管理員、開發(fā)者、測試人員以及管理人員。
數(shù)據(jù)模型是用于從業(yè)務(wù)到IT,IT內(nèi)部從系統(tǒng)分析員、建模人員、架構(gòu)師到數(shù)據(jù)庫設(shè)計(jì)人員和開發(fā)人員之間溝通的主要媒介。無論要用的數(shù)據(jù)庫技術(shù)是關(guān)系數(shù)據(jù)庫管理系統(tǒng)(Relational Database Management System,RDBMS)(如ORACLE、Teradata),還是像MongoDB或Hadoop這樣的非關(guān)系型數(shù)據(jù)庫(Not Only SQL,NoSQL),都需要有種方式能用來溝通數(shù)據(jù)需求。因此,我們需要數(shù)據(jù)模型。
數(shù)據(jù)模型應(yīng)該是高質(zhì)量的,要能支持目前的需求同時(shí)又要能滿足未來的需要。數(shù)據(jù)模型記分卡是一個(gè)可以用來改進(jìn)數(shù)據(jù)模型質(zhì)量的工具。
許多我正在為他們提供咨詢服務(wù)的客戶都決定將數(shù)據(jù)記分卡應(yīng)用到客戶的數(shù)據(jù)模型中,他們也推薦用數(shù)據(jù)模型記分卡來改進(jìn)設(shè)計(jì)。
大數(shù)據(jù)就業(yè)挑戰(zhàn)月薪30K,本文將簡要介紹數(shù)據(jù)模型的組成,并教你如何看懂?dāng)?shù)據(jù)模型。
1.1 實(shí)體
實(shí)體表示與業(yè)務(wù)有關(guān)的重要且有價(jià)值的事務(wù)的信息集合。每個(gè)實(shí)體由一個(gè)名詞或名詞詞組來表示,一般適用于以下6種問題之一:誰、什么、何時(shí)、哪里、為什么、如何。表1-1是這些實(shí)體類的定義并舉例說明。
表1-1 實(shí)體類的定義
誰 (Who) | 能為企業(yè)帶來好處的個(gè)人或組織。“誰對業(yè)務(wù)很重要?”常常與角色有關(guān),例如客戶或供應(yīng)商 | 員工、病人、演員、嫌疑人、客戶、供應(yīng)商、學(xué)生、旅客、參賽者、作者 |
什么(What) | 對企業(yè)有利的產(chǎn)品或服務(wù)。常常指能使組織保持業(yè)務(wù)運(yùn)轉(zhuǎn)的產(chǎn)出物。“什么是對業(yè)務(wù)至關(guān)重要的?” | 產(chǎn)品、服務(wù)、原材料、貨物清單、課程、歌曲、照片、圖書 |
何時(shí)(When) | 企業(yè)所關(guān)心的日歷或時(shí)間周期。“何時(shí)業(yè)務(wù)在運(yùn)作?” | 時(shí)間、日期、月份、季度、年、學(xué)期、會計(jì)期間、分鐘 |
哪里(Where) | 企業(yè)關(guān)心的位置。位置可以指實(shí)際的地理位置,也可以指虛擬的位置。“業(yè)務(wù)在哪里開展?” | 郵件地址、分布地點(diǎn)、網(wǎng)站的URL及IP地址 |
為什么(Why) | 企業(yè)所關(guān)心的事件或事務(wù)。事件會讓業(yè)務(wù)具有不確定性。“業(yè)務(wù)為什么可以運(yùn)轉(zhuǎn)?” | 訂單、盈利、投訴、取錢、存錢、褒揚(yáng)、問詢、交易、索賠 |
如何 (How) | 將企業(yè)關(guān)心的事件記錄下來。可以用文檔記錄事件,如采購訂單用于記錄一個(gè)訂單事件。這就是”業(yè)務(wù)是如何跟蹤事件的?” | 發(fā)票、合同、協(xié)議、購買訂單、收據(jù)、發(fā)票、裝箱清單、交易確認(rèn)單 |
實(shí)體的實(shí)例是指特定實(shí)體的發(fā)生或?qū)嶓w的值。例如,表單就是一個(gè)實(shí)體,它的表頭的每個(gè)字段表示每個(gè)實(shí)體要記錄的信息。每個(gè)有實(shí)際值的表單行表示一個(gè)實(shí)體實(shí)例。“客戶”實(shí)體可能會有多個(gè)有不同名字的客戶實(shí)例,如Bob、Joe、Jane等。“賬號”實(shí)體有Bob的支票賬戶實(shí)例、Bob的存款賬戶實(shí)例、Joe的傭金賬戶實(shí)例等。
實(shí)體可以從概念層、邏輯層、物理層進(jìn)行描述。概念層是對一個(gè)業(yè)務(wù)過程或應(yīng)用系統(tǒng)定義其范圍和重要術(shù)語。邏輯層是對一個(gè)業(yè)務(wù)過程或應(yīng)用系統(tǒng)的業(yè)務(wù)解決方案進(jìn)行詳細(xì)描述,物理層則是對一個(gè)應(yīng)用系統(tǒng)的技術(shù)解決方案進(jìn)行詳細(xì)描述。
一個(gè)與概念層相關(guān)的實(shí)體一定是對業(yè)務(wù)基本且關(guān)鍵的。至于什么是“基本且關(guān)鍵的”主要因范圍不同而不同。在通用層面,某些概念是大多數(shù)公司都共有的,例如,客戶、產(chǎn)品和員工。稍微收窄這個(gè)范圍,特定的行業(yè)可能會有某個(gè)特定的概念。例如,廣告役,這在廣告行業(yè)是有個(gè)有效的概念,但在其他行業(yè)中卻不適用。在出版行業(yè),作者(Author)、書(Title)和訂單(Order)是概念實(shí)體,如圖1-1矩形框中的名字。
圖1-1 用矩形框中的名字表示概念實(shí)體
邏輯層的實(shí)體比概念層更加詳細(xì)地表示了業(yè)務(wù)。經(jīng)常會用一個(gè)概念實(shí)體表示多個(gè)邏輯實(shí)體。邏輯實(shí)體包含一些特性,我們叫作“屬性”,下一節(jié)會討論。前面的概念實(shí)體可以由3個(gè)邏輯實(shí)體表示,如圖1-2所示。
圖1-2 邏輯實(shí)體
在物理層,實(shí)體與技術(shù)特定的對象有關(guān),例如關(guān)系數(shù)據(jù)庫管理系統(tǒng)(Relational Database Management System,RDBMS)中的數(shù)據(jù)庫表或者非關(guān)系型數(shù)據(jù)庫(Not Only SQL,Nosgl)MongoDB中的集合。物理層與邏輯層相似,但可以包括彌補(bǔ)技術(shù)缺陷所需要的折中方案,一般是與性能或存儲有關(guān)的。
以下是前述邏輯實(shí)體的物理實(shí)體,如圖1-3所示。物理實(shí)體包含數(shù)據(jù)庫特定的信息,例如,屬性的格式和長度(作者的姓氏,即Author Last Name是50個(gè)字符長度),該屬性是否必須有值(作者的稅號標(biāo)識,即Author Tax Identifier不能為空因而必須有值,作者的出生日期,即Author Birth Date是可空的,所以不要求一定有值)。
圖1-3 物理實(shí)體
在關(guān)系數(shù)據(jù)庫管理系統(tǒng)(Relational Database Management System,RDBMS)中,這些物理實(shí)體是數(shù)據(jù)庫表或視圖。在非關(guān)系型數(shù)據(jù)庫(Not Only SQL,NoSQL)中,這些物理實(shí)體根據(jù)所用的技術(shù)不同而不同。例如,在MongoDB這樣的文檔數(shù)據(jù)庫中,這些實(shí)體是集合。常用的術(shù)語“結(jié)構(gòu)”是指數(shù)據(jù)庫組件,無論這種數(shù)據(jù)庫是RDBMS還是NoSQL類型。
1.2 屬性
屬性是用來識別、描述或度量實(shí)體實(shí)例的單個(gè)信息單元。貨運(yùn)單號(Claim Number)屬性標(biāo)識每個(gè)貨運(yùn)單。學(xué)生姓氏(Student Last Name)屬性描述每個(gè)學(xué)生。訂單金額(Gross Sales Amount)屬性度量每筆交易的金額。
像實(shí)體一樣,屬性也可以在概念、邏輯和物理層描述。概念層的屬性必須是對業(yè)務(wù)基本且關(guān)鍵的。通常我們并不從概念層描述屬性,當(dāng)然根據(jù)業(yè)務(wù)需求的不同,也可以作為概念層的屬性。我在一家通訊公司工作時(shí),電話號碼是對業(yè)務(wù)非常重要的屬性,所以多個(gè)概念模型中都有電話號碼屬性。
邏輯模型的屬性表示業(yè)務(wù)特性。每個(gè)屬性顯示出它對業(yè)務(wù)解決方案的貢獻(xiàn),并且獨(dú)立于任何軟硬件技術(shù)。例如,作者的姓氏(Author Last Name)就是一個(gè)屬性,因?yàn)樗兄匾臉I(yè)務(wù)意義,無論這些記錄是保存在紙質(zhì)文件里還是能快速檢索的數(shù)據(jù)庫里。物理模型的屬性代表數(shù)據(jù)庫的一列。作者的姓氏(Author Last Name)屬性可能在關(guān)系數(shù)據(jù)庫的AUTH表里用AUTH_LAST_NM列表示,或者在MongoDB集合LibraryCardCatalog中用AuthorLastName表示。
1.3 域
一個(gè)屬性所有可能賦值的全部集合叫作域。域包括一套可應(yīng)用于不止一個(gè)屬性的驗(yàn)證標(biāo)準(zhǔn)。例如,日期(Date)域含有可給以下這些屬性賦值的所有可能的有效日期。
員工雇用日期
下單日期
交貨日期
課程開始日期
一個(gè)屬性一定不能包含其賦值域以外的值。域值由特定的實(shí)際列表值定義或者由一套規(guī)則定義。例如,員工性別代碼,其值域限制為(男和女),員工雇用日期可能有默認(rèn)的規(guī)則,這個(gè)域值只能是有效的日期。因此,可能會有以下值,如:
2005-02-15
1910-01-25
20150410
2050-03-10
員工雇用日期必須是有效日期,例如不能是2月30號。還可以用附加的規(guī)則來限制屬性的域值。例如,將員工雇用日期域限制為必須早于今天的日期,這樣就能排除類似2050年3月10日這樣的日期。限制員工雇傭日期為YYYYMMDD格式(年、月、日連接),就能排除所有不符合日期格式的值,例如20152410就會違規(guī)。另外一種限制域值的方式是規(guī)定員工雇用日期只能是周一、周二、周三、周四、周五的日期(即只能是工作日)。
有3種基本的域類型。
格式化域:設(shè)定數(shù)據(jù)庫中可用的標(biāo)準(zhǔn)數(shù)據(jù)類型。如Character(30)和date,這些都是格式化域。
列表域:類似于下拉列表,列出幾個(gè)值可供選擇。列表域是格式化域的改良。訂單狀態(tài)代碼的格式化域可能是 Character(10),這個(gè)域可以從列表域可能的值(打開,已運(yùn)送,已關(guān)閉,已退回)中進(jìn)行選擇。
范圍域:規(guī)定該域所允許的值在最小值和最大值之間。例如,訂單交付日期必須在今天和未來的幾個(gè)月之間。與列表域類似,范圍域也是格式化域的改良。
1.4 關(guān)系
實(shí)體間的關(guān)系是指這些實(shí)體的實(shí)例可能以某種有意思的方式相關(guān)。每個(gè)關(guān)系都可以定義規(guī)則,包括何時(shí)相關(guān)以及有多少實(shí)例相關(guān)。關(guān)系可以用兩個(gè)實(shí)體間的一條線來描述。有些建模還可以有兩個(gè)以上的關(guān)系,它們會有不同的描述。如果這兩個(gè)實(shí)體是員工和部門,他們之間的關(guān)系可以描述為“每個(gè)員工必須為一個(gè)部門工作”“每個(gè)部門可以有一個(gè)或多個(gè)員工”。
在兩個(gè)實(shí)體關(guān)系中,基數(shù)能記錄有多少實(shí)例從一個(gè)實(shí)體參與到與另一個(gè)實(shí)體實(shí)例的關(guān)系中,它由出現(xiàn)在關(guān)系線兩端的符號表示。基數(shù)指定一種可強(qiáng)制的數(shù)據(jù)規(guī)則。如果沒有基數(shù),我們最多可以說關(guān)系是兩個(gè)實(shí)體以某種方式通過一個(gè)規(guī)則相互關(guān)聯(lián)。例如,員工和部門有某種關(guān)系,但我們知道的僅限于這點(diǎn)。注意,相同的兩個(gè)實(shí)體可以有不止一種相關(guān)方式;例如每個(gè)部門可以有一個(gè)或多個(gè)員工,但是可能還會有一個(gè)單獨(dú)的關(guān)系記錄著某個(gè)員工管理某個(gè)部門。
關(guān)于基數(shù),我們可以選擇0、1或多(m)的組合。多(m)表示任何大于0的數(shù)。0或1可以記錄一個(gè)實(shí)體實(shí)例在一個(gè)關(guān)系中是否是必需的。1或多(m)可以表示有多少個(gè)特定的實(shí)例參與這個(gè)關(guān)系。
因?yàn)槲覀兊膱D標(biāo)僅有3種基數(shù)符號,所以無法指定一個(gè)準(zhǔn)確的數(shù)字[1](除非通過文檔),如“一輛車有4個(gè)輪胎”。我們只能說“一輛車可以有多個(gè)輪胎”,以作者和書為例,每種基數(shù)符號如圖1-4所示。
圖1-4 基數(shù)的符號表示
這個(gè)例子中的業(yè)務(wù)規(guī)則是:
每個(gè)作者(Author)可以寫一本或多本書(Title)。
每本書(Title)必須只能由一個(gè)作者(Author)寫。
短豎線表示1(看上去像個(gè)1,是吧),圓圈表示0(看上去也像個(gè)0),0表示可選,但并不排除值1,所以在上面的例子中,一個(gè)作者(Author)只能寫一本書(Title)。三角形中間有一根線意思是多個(gè)(m)。有人把m符號叫作魚尾紋(crow’s foot)。
關(guān)系線上通常有標(biāo)簽用來說明關(guān)系和關(guān)系所表示的規(guī)則。數(shù)據(jù)模型是一種通信工具,如果你還記得實(shí)體是個(gè)名詞,關(guān)系標(biāo)簽就是一個(gè)現(xiàn)在時(shí)態(tài)動詞。因此,讓我們讀下面這句話。
每個(gè)作者可以寫一本或多本書。
每個(gè)關(guān)系都有一個(gè)父實(shí)體和一個(gè)子實(shí)體。父實(shí)體出現(xiàn)在關(guān)系的1那邊,子實(shí)體出現(xiàn)在關(guān)系的多(m)那邊。這個(gè)例子中,父實(shí)體是作者(Author),子實(shí)體是書(Title)。當(dāng)我讀一個(gè)關(guān)系的時(shí)候,我會從關(guān)系1那邊的實(shí)體(父實(shí)體)開始。“每個(gè)作者可以寫一本或多本書。”然后再從關(guān)系中多的那端讀“每本書必須由一個(gè)作者寫。”
在讀關(guān)系的時(shí)候,我也總是使用“每個(gè)”從父實(shí)體那邊開始。使用“每個(gè)”這個(gè)單詞的原因是你想要指定一個(gè)實(shí)體平均有多少個(gè)實(shí)例與另一個(gè)實(shí)體的實(shí)例相關(guān)。
有兩種類型的關(guān)系:依賴型(identifying)和不依賴型(non-identifying)。依賴型(identifying)關(guān)系用實(shí)線表示,意思是m一側(cè)的實(shí)體(子)總是1一側(cè)的實(shí)體(父)的依賴型實(shí)體。虛線的意思是m一側(cè)的實(shí)體(子)不依賴于1一側(cè)的實(shí)體(父)。圖1-5是這兩種類型的關(guān)系。
圖1-5 兩種類型的關(guān)系
不依賴型實(shí)體以尖角矩形表示。依賴型實(shí)體以圓角矩形表示,如“書”在依賴型關(guān)系中的例子。不依賴型的實(shí)體是實(shí)體的每個(gè)實(shí)例都只用它自己的屬性。例如在不依賴型關(guān)系中“書”的例子,可以由ISBN(國際標(biāo)準(zhǔn)書號)找到,ISBN是屬于“書”的一個(gè)屬性。依賴型實(shí)體只能通過使用至少一個(gè)不同實(shí)體的屬性找到,如依賴型關(guān)系中的書和作者的稅號。我們可以改變基數(shù)試試,現(xiàn)在允許一本書可以由多個(gè)作者寫,如圖1-6所示。
圖1-6 一本書可以由多個(gè)作者寫
與前面一對多的例子相比,這是一個(gè)多對多關(guān)系的例子。這里的業(yè)務(wù)規(guī)則是:
每個(gè)作者可以寫一本或多本書;
每本書必須由一個(gè)或多個(gè)作者寫。
“寫”在這兩個(gè)例子中,都可以當(dāng)成關(guān)系標(biāo)簽。有時(shí)候,反向標(biāo)簽也會出現(xiàn)在關(guān)系線中,例如由X寫。我傾向于只顯示一個(gè)關(guān)系標(biāo)簽以減少模型中的混亂,同時(shí)也由于大多數(shù)情況我們能用相同的單詞結(jié)構(gòu)做反向標(biāo)簽:寫,由X寫。
有 3 種層級的粒度(概念、邏輯和物理)可應(yīng)用于實(shí)體和屬性,也可用于連接實(shí)體的關(guān)系。概念關(guān)系是高層規(guī)則或連接概念的檢索路徑。邏輯關(guān)系是詳細(xì)的業(yè)務(wù)規(guī)則或邏輯實(shí)體間的強(qiáng)制規(guī)則的檢索路徑。物理關(guān)系則是詳細(xì)的技術(shù)依賴規(guī)則或有關(guān)系連接的物理結(jié)構(gòu)間的檢索路徑。這些物理關(guān)系可能最終會變成關(guān)系數(shù)據(jù)庫管理系統(tǒng)中的數(shù)據(jù)庫約束,或文檔數(shù)據(jù)庫(如MongoDB)中的參照關(guān)系。
1.5 鍵
如果數(shù)據(jù)量很大,如何才能快速找到你要找的數(shù)據(jù)呢?這就是為什么需要鍵了。鍵可以用來創(chuàng)建強(qiáng)制規(guī)則,還能高效地檢索數(shù)據(jù)的一個(gè)或多個(gè)屬性,此外可以用來從一個(gè)實(shí)體檢索另一個(gè)實(shí)體。這一節(jié)解釋了候選鍵(主鍵、替代鍵)、代理鍵、外鍵和第二鍵。
候選鍵(主鍵、替代鍵)
候選鍵是一個(gè)或多個(gè)能唯一識別一個(gè)實(shí)體實(shí)例的屬性。例如,給每本書分配一個(gè)國際標(biāo)準(zhǔn)書號(International Standard Book Number,ISBN)。ISBN唯一地識別每本書,因此可以作為書的候選鍵。當(dāng)把本書的ISBM編號“9781634620826”輸入到多種搜索引擎或數(shù)據(jù)庫系統(tǒng)時(shí),結(jié)果就返回了本書的實(shí)體實(shí)例《數(shù)據(jù)模型記分卡》(你可以試試)。稅號可以是一些國家的組織機(jī)構(gòu)候選鍵,如美國。賬號代碼可以是賬號實(shí)體的候選鍵。車輛標(biāo)識號(Vehicle Identification Number,VIN)可以識別一輛車。有時(shí)候只用一個(gè)屬性就能識別一個(gè)實(shí)體實(shí)例,例如用ISBN識別書名。有時(shí)候卻需要多個(gè)屬性來唯一識別一個(gè)實(shí)體實(shí)例。例如:必須通過促銷類型代碼和促銷開始日期一起來唯一識別一個(gè)促銷。當(dāng)多個(gè)屬性組成一個(gè)鍵時(shí),我們用術(shù)語“組合鍵”表示這種鍵。因此,促銷類型代碼和促銷開始日期一起構(gòu)成促銷的組合候選鍵。候選鍵有以下4個(gè)主要的特征。
唯一的。一個(gè)候選鍵一定不能識別出多于一個(gè)實(shí)體實(shí)例(一個(gè)真實(shí)世界的物品)。
強(qiáng)制的。候選鍵不能為空,每個(gè)實(shí)體實(shí)例必須由一個(gè)候選鍵標(biāo)識。所以,候選鍵的所有不同值的數(shù)目總是等于全部不同實(shí)體的數(shù)目。例如用ISBN作為書的候選鍵,如果有500個(gè)書的實(shí)例,那么就有500個(gè)唯一的ISBN。
不變的。實(shí)體實(shí)例上的候選鍵應(yīng)該永遠(yuǎn)不變。
最短的。候選鍵應(yīng)該只包含那些可以唯一識別的實(shí)體實(shí)例的屬性。如果有4個(gè)屬性列出來作為一個(gè)實(shí)體的組合候選鍵,但只有3個(gè)是標(biāo)識唯一性所必需的,那么就只需要由這3個(gè)屬性組成候選鍵。
例如,每個(gè)學(xué)生可以學(xué)習(xí)一門或多門課程,每門課程可以有一個(gè)或多個(gè)學(xué)生。表1-2~表1-4是兩個(gè)實(shí)體的一些簡單實(shí)例。
表1-2 學(xué)生表
SM385932 | Steve | Martin | 1/25/1958 |
EM584926 | Eddie | Murphy | 3/15/1971 |
HW742615 | Henry | Winkler | 2/14/1984 |
MM481526 | Mickey | Mouse | 5/10/1982 |
DD857111 | Donald | Duck | 5/10/1982 |
MM573483 | Minnie | Mouse | 4/1/1986 |
LR731511 | Lone | Ranger | 10/21/1949 |
EM876253 | Eddie | Murphy | 7/1/1992 |
表1-3 出勤表
5/10/2015 |
6/10/2015 |
7/10/2015 |
表1-4 課程表
數(shù)據(jù)建模基礎(chǔ) | 數(shù)據(jù)建模101 | 一門介紹性課程,介紹數(shù)據(jù)建模的基本概念和原則 |
數(shù)據(jù)建模進(jìn)階 | 數(shù)據(jù)建模301 | 一門技術(shù)類的進(jìn)階課程,如高級范式和不規(guī)則層次結(jié)構(gòu) |
網(wǎng)球基礎(chǔ) | 網(wǎng)球 | 教網(wǎng)球初學(xué)者學(xué)習(xí)這個(gè)游戲的關(guān)鍵方面 |
雜技 | 學(xué)習(xí)如何能同時(shí)保持讓3個(gè)球在空中 |
根據(jù)我們對候選鍵的定義(候選鍵的特征是唯一的、穩(wěn)定的和最小的),應(yīng)該選擇什么字段作為這些實(shí)體的候選鍵呢?
對于學(xué)生實(shí)體,學(xué)生編號看上去是個(gè)有效的候選鍵。有 8 個(gè)學(xué)生和 8個(gè)唯一的學(xué)生編號值。不像學(xué)生名和學(xué)生姓氏有重復(fù)值,如名字 Eddie Murphy就有重復(fù)。而學(xué)生編號 Student Number 是唯一的。出生日期也有重復(fù)值,如5/10/1982,Mickey Mouse和Donald Duck的出生日期都有這個(gè)值。學(xué)生名、學(xué)生姓氏和出生日期這3個(gè)字段的組合也像一個(gè)有效的組合候選鍵,但請注意我們不推薦使用這樣的鍵,因?yàn)檫@在某些系統(tǒng)中可能會有問題。
出勤實(shí)體,現(xiàn)在缺少了候選鍵。在這個(gè)簡單的數(shù)據(jù)表中盡管出勤日期是唯一的,我們可能需要知道在特定的日期里哪個(gè)學(xué)生上了哪門課程,所以這個(gè)出勤實(shí)體的定義是不完全的。
課程實(shí)體,初看似乎任何屬性都是唯一的,都可以做候選鍵。然而,雜技這門課程沒有課程簡稱,因此,鑒于課程簡稱可以為空所以不能當(dāng)做候選鍵。此外,候選鍵的另一個(gè)特征是不變性。根據(jù)我的教學(xué)經(jīng)驗(yàn),描述可能會變。因此,課程描述也需要從候選鍵中排除,只有課程全稱才是候選鍵的最好選擇。
盡管一個(gè)實(shí)體可能有多個(gè)候選鍵,但對于一個(gè)實(shí)體我們也只能選擇一個(gè)候選鍵做主鍵。主鍵是從候選鍵中首選的能唯一標(biāo)識實(shí)體的候選鍵。替代鍵是候選的,盡管也有唯一性、穩(wěn)定性和最小的特點(diǎn),卻不能作為主鍵,盡管替代鍵也可以用來查找特定的實(shí)體實(shí)例。
在課程實(shí)體中只有一個(gè)候選鍵,所以課程全稱就變成主鍵。而學(xué)生實(shí)體需要做個(gè)選擇,因?yàn)樗袃蓚€(gè)候選鍵。應(yīng)該用哪個(gè)候選鍵作主鍵呢?
選擇哪個(gè)候選鍵作為主鍵,需要考慮簡潔和私密性。簡潔意味著如果有幾個(gè)候選鍵,要選那個(gè)屬性最少和長度最短的。而私密性,有可能候選鍵中的一個(gè)或多個(gè)屬性含有敏感數(shù)據(jù),查看這樣的數(shù)據(jù)會受限。需要避免實(shí)體主鍵中含有敏感數(shù)據(jù),因?yàn)橹麈I可能繁衍成外鍵,因此會將這個(gè)敏感數(shù)據(jù)傳播到整個(gè)數(shù)據(jù)庫范圍。
在我們的例子中如果考慮簡潔性和安全性,我會選擇學(xué)生編號,而不是學(xué)生名、學(xué)生姓氏和出生日期。因?yàn)榍罢吒啙嵡液懈俚拿舾行畔ⅰ?/p>
這是我們的主鍵和替代鍵的數(shù)據(jù)模型,如圖1-7所示。
圖1-7 主鍵和替代鍵的數(shù)據(jù)模型
主鍵屬性在矩形框中的橫線之上。你會注意到有兩個(gè)數(shù)字跟在鍵的縮寫名“AK”之后,第一個(gè)數(shù)是替代鍵的一組數(shù)字,第二個(gè)數(shù)表示替代鍵中的屬性順序。所以學(xué)生實(shí)體屬性的替代鍵有3個(gè)屬性。
學(xué)生名、學(xué)生姓氏和出生日期。這也是將要?jiǎng)?chuàng)建的替代鍵索引的順序,因?yàn)閷W(xué)生名在冒號之后有個(gè)“1”,學(xué)生姓氏是“2”,出生日期是“3”。
出勤實(shí)體的主鍵是學(xué)生編號和課程全稱,這兩個(gè)字段看上去可以組成一個(gè)有效的主鍵。注意出勤實(shí)體的兩個(gè)主鍵屬性跟著一個(gè)“FK”,這是外鍵,后面很快會講到。
所以,簡單地說,一個(gè)候選鍵由一個(gè)或多個(gè)屬性組成,能唯一地識別一個(gè)實(shí)體實(shí)例。可以選擇能最好地識別實(shí)體中每個(gè)記錄的候選鍵作主鍵,其他的候選鍵則作為替代鍵。由多個(gè)屬性組成的鍵叫作組合鍵。在物理層,候選鍵常常轉(zhuǎn)換成唯一索引。
1.6 代理鍵
代理鍵是表的唯一標(biāo)識符,常用來計(jì)數(shù),通常具有固定長度,一般由系統(tǒng)自動生成,沒有含義。所以代理鍵沒有任何業(yè)務(wù)含義。(換句話說,不能看到一個(gè)月份標(biāo)識符為1,就認(rèn)為它代表月份實(shí)體的實(shí)例值一月)。代理鍵應(yīng)該對業(yè)務(wù)是不可見的,但應(yīng)該保留在后臺以允許更高效的檢索,也方便應(yīng)用之間的集成。
代理鍵也是高效的。你已經(jīng)見過主鍵可能是多個(gè)實(shí)體屬性的組合。相對于必須指定3~4個(gè)(或5~6個(gè))屬性來定位你要查找的一條記錄,使用單個(gè)代理鍵更高效。代理鍵有利于集成,集成的目的是為了創(chuàng)建一個(gè)唯一一致的數(shù)據(jù)版本。像數(shù)據(jù)倉庫這樣的應(yīng)用常常要保存不止一個(gè)應(yīng)用或系統(tǒng)的數(shù)據(jù)。一個(gè)實(shí)體實(shí)例在每個(gè)源系統(tǒng)中都有不同的標(biāo)識,這些實(shí)體實(shí)例的相關(guān)性從公共的標(biāo)識符看起來不太明顯,這時(shí)用代理鍵可以記錄同一個(gè)實(shí)體實(shí)例的信息之間的相互關(guān)系。
使用代理鍵時(shí),總是先確定自然鍵。自然鍵是能唯一識別實(shí)體的方式,這是業(yè)務(wù)要考慮的,然后將自然鍵定義為替代鍵。例如,如表1-5所示,假定一個(gè)代理鍵是比課程全稱更高效的主鍵,我們可以為課程實(shí)體創(chuàng)建課程編號代理鍵,在自然鍵課程全稱上定義一個(gè)替代鍵,如圖1-8所示課程的值。
圖1-8 在自然鍵課程全稱上定義一個(gè)替代鍵
表1-5 課程實(shí)體中的課程
1 | 數(shù)據(jù)建模基礎(chǔ) | 數(shù)據(jù)建模101 | 一門介紹性課程,介紹數(shù)據(jù)建模的基本概念和原則 |
2 | 數(shù)據(jù)建模進(jìn)階 | 數(shù)據(jù)建模301 | 一門技術(shù)類的進(jìn)階課程,如高級范式和不規(guī)則層次結(jié)構(gòu) |
3 | 網(wǎng)球基礎(chǔ) | 網(wǎng)球 | 教網(wǎng)球初學(xué)者學(xué)習(xí)這個(gè)游戲的關(guān)鍵 |
4 | 雜技 | 學(xué)習(xí)如何能同時(shí)保持讓3個(gè)球在空中 |
1.7 外鍵
在實(shí)體的“1”那側(cè)的關(guān)系我們叫作父實(shí)體,在“多(m)”那側(cè)的關(guān)系叫作子實(shí)體。當(dāng)我們創(chuàng)建一個(gè)從父實(shí)體到子實(shí)體的關(guān)系時(shí),父實(shí)體的主鍵就被復(fù)制為子實(shí)體的外鍵。外鍵是一個(gè)或多個(gè)屬性,提供到另外一個(gè)實(shí)體的鏈接(也有種遞歸關(guān)系的情況,同一個(gè)實(shí)體的兩個(gè)實(shí)例是相關(guān)的,一個(gè)鏈接連到同一個(gè)實(shí)體)。在物理層面,外鍵允許關(guān)系數(shù)據(jù)庫管理系統(tǒng)從一個(gè)表到另外一個(gè)表進(jìn)行檢索。例如,如果我們需要知道一個(gè)有賬號的客戶,我們就想把客戶編號放在賬號實(shí)體中。賬號實(shí)體中的客戶編號就是客戶實(shí)體的主鍵。使用外鍵返回到賬號表可以讓數(shù)據(jù)庫管理系統(tǒng)從特定的賬戶檢索或者從賬號到客戶進(jìn)行檢索,再或者找到每個(gè)有賬號的客戶。類似地,數(shù)據(jù)庫可以從特定的客戶到賬號檢索以找到某個(gè)客戶的所有賬號。當(dāng)兩個(gè)實(shí)體間的關(guān)系確定了之后,數(shù)據(jù)庫建模工具就自動地創(chuàng)建了外鍵。
在學(xué)生/課程模型中,出勤實(shí)體中有兩個(gè)外鍵,學(xué)生編號外鍵指向?qū)W生實(shí)體中特定的學(xué)生,課程編號外鍵指向課程實(shí)體中特定的課程,如表 1-6所示。
表1-6 課程編號外鍵指向課程實(shí)體中特定的課程
SM385932 | 1 | 5/10/2015 |
EM584926 | 1 | 5/10/2015 |
EM584926 | 2 | 6/10/2015 |
MM481526 | 2 | 6/10/2015 |
MM573483 | 2 | 6/10/2015 |
LR731511 | 3 | 7/10/2015 |
通過查看這些值,回憶起表1-6中的樣例數(shù)據(jù),我們了解到Steve Martin和Eddie Murphy兩人在2015年10月5號都聽了數(shù)據(jù)建模基礎(chǔ)這門課。Eddie Murphy還和Mickey Mouse、Minnie Mouse一起聽了2015年10月6日的高級數(shù)據(jù)建模這門課。Lone Ranger在2015年10月7日上的是網(wǎng)球基礎(chǔ)(跟往常一樣,還是他一個(gè)人)。
另外,注意出勤表(Attendance)當(dāng)前的主鍵是假定一個(gè)學(xué)生只能參加一門課程一次。如果業(yè)務(wù)規(guī)則說明一個(gè)學(xué)生能參加一門課程一次或多次,我們就需要修改出勤表的主鍵,增加出勤日期(Attendance Date)字段。
1.8 次鍵
有時(shí)候需要從表中快速檢索數(shù)據(jù)來回答業(yè)務(wù)的問題或滿足響應(yīng)時(shí)間的要求。次鍵是需要頻繁訪問和快速檢索的一個(gè)或多個(gè)屬性(如果有多個(gè)屬性,就叫作組合次鍵)。次鍵也就是眾所周知的非唯一索引或反向條目(inversion entry,IE)。次鍵不必唯一、穩(wěn)定,也不必非空。例如,我們可以給學(xué)生表(Student)增加學(xué)生姓氏(Student Last Name)字段作為從鍵,以允許無論何時(shí)需要查詢學(xué)生姓氏(Student Last Name)都能快速檢索,如圖1-9所示。
圖1-9 給學(xué)生表(Student)增加學(xué)生姓氏(Student Last Name)字段作為從鍵
學(xué)生姓氏(Student Last Name)不唯一,因?yàn)榭赡苡袃蓚€(gè)人都叫Murphys;它是不穩(wěn)定的,會隨著時(shí)間變更;盡管很少發(fā)生,但也可能會有我們不知道某人名字的時(shí)候,所以,它可能為空。
1.9 子類型
子類型允許將公用屬性、相似的關(guān)系或相關(guān)的實(shí)體分組。某些概念非常相似或者為了展示一些例子往往可以用子類型。在出版行業(yè),一個(gè)作者可能會寫多部紙質(zhì)版(PrintVersion)的書和多本電子版圖書(eBooks),如圖1-10所示。
圖1-10 一個(gè)作者可以寫多部紙質(zhì)版和多部電子版圖書的模型
每個(gè)作者(Author)可以寫一本或多本紙質(zhì)版(PrintVersion)的書。
每個(gè)紙質(zhì)版(PrintVersion)的書必須由一個(gè)作者(Author)寫。
每個(gè)作者(Author)可以寫一本或多本電子書(eBook)。
每本電子書(eBooks)必須由一個(gè)作者(Author)寫。
接下來,讓我們來介紹子類型,如圖1-11所示。
圖1-11 子類型
每個(gè)作者(Author)可以寫一本或多本書(Title)。
每本書(Title)必須由一個(gè)作者(Author)寫。
每本書(Title)可以是紙質(zhì)版(PrintVersion)或電子版(eBook)。
每個(gè)紙質(zhì)版(PrintVersion)的書都有一個(gè)書名(Title)。
每個(gè)電子書(eBook)有一個(gè)書名(Title)。
子類型關(guān)系隱含了一個(gè)規(guī)則,即超類型的所有關(guān)系和屬性也應(yīng)用到每個(gè)子類型。因此,從作者(Author)到電子書(eBook)有一種隱性的關(guān)系,從作者(Author)到紙質(zhì)版(PrintVersion)也是如此。titleName、subtitleName和titleRetailPrice屬于紙質(zhì)版(PrintVersion),也屬于電子書(eBook)。注意每個(gè)子類型的主鍵是到超類型的外鍵,所以它們有相同的屬性。在這個(gè)例子中,titleISBN是一本書的標(biāo)識符。
子類型不僅減少了數(shù)據(jù)模型上的冗余,也能透過表面上唯一的和獨(dú)立的概念從而更容易溝通它們的相似性。
在某些情況下,一個(gè)子類型可以有多個(gè)子類型集合;例如,一個(gè)人可能是一個(gè)孩子、青少年或成年人,獨(dú)立于這些分類,一個(gè)人還可能是男性或女性。
在某些情況下,超類型可以沒有任何子類型也能存在,而在另一些情況下,卻不可以。每個(gè)超類型必須有一個(gè)子類型實(shí)例。
例如,一個(gè)人可能是一個(gè)司機(jī),或者不是;無論哪種情況他仍然是一個(gè)人。但一個(gè)銀行賬號就必須總是某種特定子類型的賬號。
[1] 注意:如果使用統(tǒng)一建模語言(Unified Modeling Language,UML)中的類圖,就可以指定準(zhǔn)確的基數(shù)。
本文摘自《數(shù)據(jù)模型記分卡》
《數(shù)據(jù)模型計(jì)分卡》
【美】Steve Hoberman(霍伯曼)
點(diǎn)擊封面購買紙書
作為一本經(jīng)典大師級著作,本書非常適合對數(shù)據(jù)建模感興趣的讀者以及從事數(shù)據(jù)庫等相關(guān)工作的專業(yè)人士參考閱讀。通過閱讀本書,讀者將對記分卡這一經(jīng)典理論有更加全面、深入的理解。
本書介紹了Steve Hoberman的經(jīng)典理論——數(shù)據(jù)模型計(jì)分卡。全書分為3各部分,共計(jì)16章內(nèi)容。第一部分介紹了數(shù)據(jù)建模及驗(yàn)證,包括數(shù)據(jù)建模、數(shù)據(jù)模型質(zhì)量、數(shù)據(jù)模型計(jì)分卡概述等;第二部分介紹了數(shù)據(jù)模型計(jì)分卡理論,通過10個(gè)重要理論來介紹相關(guān)的知識要點(diǎn);第三部分介紹了如何使用計(jì)分卡驗(yàn)證數(shù)據(jù)模型。
今日話題就業(yè)調(diào)查:你的行業(yè)平均年薪大概是多少?年齡+年薪形式?截止時(shí)間3月12日17時(shí),留言+轉(zhuǎn)發(fā)本活動到朋友圈,小編將選出1名讀者贈送異步新書一本。
延伸推薦
2018年2月新書
2018年1月重磅新書
小學(xué)生開始學(xué)Python,最接近AI的編程語言:安利一波Python書單
政策升溫:大家都在學(xué)大數(shù)據(jù),一大波好書推薦
一本基于Python語言的Selenium自動化測試書
8本新書,送出一本你喜歡的
AI經(jīng)典書單| 入門人工智能該讀哪些書?
點(diǎn)擊關(guān)鍵詞新書:
Python|機(jī)器學(xué)習(xí)|Kotlin|Java|移動開發(fā)|機(jī)器人|有獎(jiǎng)活動|Web前端|書單長按二維碼,可以關(guān)注我們喲每天與你分享IT好文。 在“異步圖書”后臺回復(fù)“關(guān)注”,即可免費(fèi)獲得2000門在線視頻課程;推薦朋友關(guān)注根據(jù)提示獲取贈書鏈接,免費(fèi)得異步圖書一本。趕緊來參加哦!
掃一掃上方二維碼,回復(fù)“關(guān)注”參與活動!
點(diǎn)擊下方閱讀原文,查看更多
總結(jié)
以上是生活随笔為你收集整理的数据建模大数据就业挑战月薪30K的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 暴风TV请来中国人工智能first la
- 下一篇: 2017-2018-1 20155229