日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

为了彻底搞清楚数据库 E-R 模型设计,我肝了这篇万字长文

發(fā)布時(shí)間:2023/12/20 数据库 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 为了彻底搞清楚数据库 E-R 模型设计,我肝了这篇万字长文 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

文章簡(jiǎn)介

本文主要描述了關(guān)系型數(shù)據(jù)庫(kù)設(shè)計(jì)的各個(gè)階段及重要概念,并重點(diǎn)介紹了 概念設(shè)計(jì)邏輯設(shè)計(jì) 兩大核心階段,著重強(qiáng)調(diào)了 E-R 模型的構(gòu)造 步驟,除此之外還補(bǔ)充了 關(guān)系模式的規(guī)范化 及如何 求解關(guān)系模式的候選碼 等重要知識(shí)點(diǎn)。


1 數(shù)據(jù)庫(kù)設(shè)計(jì)概述

1.1 何為數(shù)據(jù)庫(kù)設(shè)計(jì)?

數(shù)據(jù)庫(kù)設(shè)計(jì)是指對(duì)于一個(gè)給定的應(yīng)用環(huán)境,構(gòu)造最優(yōu)的數(shù)據(jù)庫(kù)模式,建立數(shù)據(jù)庫(kù)及其應(yīng)用系統(tǒng),使之能夠有效地存儲(chǔ)數(shù)據(jù),滿足各種用戶的應(yīng)用需求(信息要求和處理要求)。

數(shù)據(jù)庫(kù)是信息系統(tǒng)的核心和基礎(chǔ),它把信息系統(tǒng)中大量的數(shù)據(jù)按一定的模型組織起來,并提供存儲(chǔ)、維護(hù)、檢索數(shù)據(jù)的功能,最終使信息系統(tǒng)可以方便、及時(shí)、準(zhǔn)確地從數(shù)據(jù)庫(kù)中獲得所需的信息。即數(shù)據(jù)庫(kù)的設(shè)計(jì)目標(biāo)是:為用戶和各種應(yīng)用系統(tǒng)提供一個(gè)信息基礎(chǔ)設(shè)施和高效率的運(yùn)行環(huán)境,這里的高效率代表的是冗余少、易維護(hù)和便于使用。

數(shù)據(jù)庫(kù)設(shè)計(jì)大致可分為如下幾個(gè)階段:

需求分析 → 概念設(shè)計(jì) → 邏輯設(shè)計(jì) → 物理設(shè)計(jì) → 數(shù)據(jù)庫(kù)實(shí)現(xiàn) → 運(yùn)行與維護(hù)階段

總而言之,數(shù)據(jù)庫(kù)設(shè)計(jì)是一個(gè)不斷迭代和逐步求精的過程。而在這個(gè)過程中,重中之重的階段為概念設(shè)計(jì)邏輯設(shè)計(jì),且本文也是圍繞這兩個(gè)階段著重展開敘述的。


1.2 必須要明確的幾個(gè)概念

本文主要討論分析的數(shù)據(jù)庫(kù)設(shè)計(jì)為關(guān)系型數(shù)據(jù)庫(kù),在正式開始了解數(shù)據(jù)庫(kù)設(shè)計(jì)階段之前先來明確幾個(gè)關(guān)系型數(shù)據(jù)庫(kù)的重要概念。

關(guān)系 :關(guān)系型數(shù)據(jù)庫(kù)關(guān)系的數(shù)據(jù)結(jié)構(gòu)就是一張二維表,通俗的講,二維表名稱就是關(guān)系名。

屬性 :二維表中的列稱為屬性(字段),每個(gè)屬性都有一個(gè)屬性名。

值域 :二維表中屬性的取值范圍稱為值域,每個(gè)屬性都有一個(gè)值域。

關(guān)系模式 :二維表的結(jié)構(gòu)稱為關(guān)系模式。設(shè)關(guān)系名為 R,其屬性為 A1,A2,…,An,則關(guān)系模式可以表示為:R(A1,A2,…,An),一個(gè)具體的例子:職工(職工號(hào),姓名,性別,部門)。

候選碼 :如果一個(gè)屬性集的值能唯一標(biāo)識(shí)一個(gè)關(guān)系的元組而又不含多余的屬性,則稱該屬性集為候選碼。在一個(gè)關(guān)系上可以有多個(gè)候選碼。

主屬性 :包含在任一候選碼中的屬性。

非主屬性 :不包含在任一候選碼中的屬性。

主鍵 :有時(shí)一個(gè)關(guān)系有多個(gè)候選碼,可以選擇其中一個(gè)作為主鍵。每個(gè)關(guān)系有且只有一個(gè)主鍵。

外鍵 :如果關(guān)系模式 R 中的屬性 K 是其他關(guān)系模式的主鍵,那么 K 在關(guān)系模式 R 中稱為外鍵。

2 需求分析

需求分析階段就是分析用戶的需要與要求,它是設(shè)計(jì)數(shù)據(jù)庫(kù)的起點(diǎn),需求分析的結(jié)果能否準(zhǔn)確地反映用戶的實(shí)際要求,將直接影響到后面各個(gè)階段的設(shè)計(jì),并影響到設(shè)計(jì)結(jié)果是否合理和實(shí)用。

需求分析的主要任務(wù)就是要通過詳細(xì)調(diào)查現(xiàn)實(shí)世界中要處理的對(duì)象,來充分了解明確用戶的各種需求,最終確定系統(tǒng)的功能,并且必須充分考慮系統(tǒng)在今后可能的擴(kuò)充和改變,不能僅僅按當(dāng)前應(yīng)用需求來設(shè)計(jì)數(shù)據(jù)庫(kù)。

需求分析階段的最終產(chǎn)物是要有明確的系統(tǒng)需求分析報(bào)告,一般會(huì)包括數(shù)據(jù)流圖、功能模塊圖、數(shù)據(jù)字典等內(nèi)容,并且它是指導(dǎo)開展數(shù)據(jù)庫(kù)設(shè)計(jì)后續(xù)階段活動(dòng)的重要依據(jù)。

由于本文主要介紹數(shù)據(jù)庫(kù)的 E-R 模型設(shè)計(jì),所以關(guān)于需求分析的相關(guān)內(nèi)容就不再展開敘述。

3 概念設(shè)計(jì)

3.1 現(xiàn)實(shí)世界向機(jī)器世界的過渡

概念設(shè)計(jì)是設(shè)計(jì)形成一個(gè)獨(dú)立于 DBMS 的概念數(shù)據(jù)模型,用來表述數(shù)據(jù)與數(shù)據(jù)之間的聯(lián)系,它直接面向現(xiàn)實(shí)世界,因而很容易被用戶所理解,方便用于數(shù)據(jù)庫(kù)設(shè)計(jì)者與用戶的交流。該階段先設(shè)計(jì)與用戶具體應(yīng)用相關(guān)的數(shù)據(jù)結(jié)構(gòu)——用戶視圖,然后再不斷對(duì)視圖進(jìn)行集成修改,最終得到一個(gè)能正確、完整地反應(yīng)該單位數(shù)據(jù)及聯(lián)系并滿足各種處理要求的數(shù)據(jù)模型,之后再把概念模型轉(zhuǎn)換成具體機(jī)器上 DBMS 支持的數(shù)據(jù)模型。

概念結(jié)構(gòu)設(shè)計(jì)的特點(diǎn):

  • 能真實(shí)、充分地反映現(xiàn)實(shí)世界;
  • 易于理解;
  • 易于更改;
  • 易于向關(guān)系、網(wǎng)狀、層次等各種數(shù)據(jù)模型轉(zhuǎn)換。

概念設(shè)計(jì)的階段的主要描述工具就是 E-R 模型(Entity-Relationship Model)。


3.2 E-R 模型

經(jīng)過上文可知 E-R 模型是概念設(shè)計(jì)階段的主要描述工具,起到『承上啟下』的一種過渡作用,其重要性不言而喻,所以現(xiàn)在我們先來了解一下 E-R 模型中的幾個(gè)重要概念。

3.2.1 實(shí)體和屬性

實(shí)體是 E-R 模型的基本對(duì)象,是對(duì)現(xiàn)實(shí)世界中各種事物的抽象。它可以是物理存在的事物,例如人、汽車等;也可以是抽象的概念,例如學(xué)校、部門等。

屬性是不可分割的數(shù)據(jù)單位,用于描述實(shí)體所具有的特征,例如教師實(shí)體具有姓名、性別、地址等屬性。

能夠唯一表示實(shí)體的屬性集稱為碼。

在 E-R 模型中,實(shí)體一般是長(zhǎng)方形來體現(xiàn),而屬性則是橢圓形,如果屬性是主碼(主鍵),則在屬性名稱下用畫下劃線來表示。如下圖所示。

這張圖描述了一個(gè)教師的實(shí)體對(duì)象以及它擁有的姓名、性別等屬性,是對(duì)現(xiàn)實(shí)世界信息的直觀描述。

某些屬性還可以劃分具有獨(dú)立意義的子屬性,那這類屬性就稱為復(fù)合屬性。例如人的姓名可劃分為“姓”和“名”;地址屬性可以劃分為郵政編碼、省名、市名、區(qū)名和街道這些子屬性,而街道又可劃分為街道名和門牌號(hào),其層次結(jié)構(gòu)如下:

復(fù)合屬性的用途有兩個(gè):

  • 準(zhǔn)確模擬現(xiàn)實(shí)世界的復(fù)合信息結(jié)構(gòu);
  • 當(dāng)用戶需要把復(fù)合屬性作為一個(gè)整體使用又需要單獨(dú)使用各子屬性時(shí),屬性的復(fù)合結(jié)構(gòu)就顯得十分重要。

例如發(fā)郵件時(shí)稱呼對(duì)方可能只需要復(fù)合屬性“姓名”中的“姓”就足夠了。

屬性按照取值的個(gè)數(shù)還可以分為單值屬性多值屬性。單值屬性是指此屬性對(duì)于同一個(gè)實(shí)體只能取一個(gè)值,大多數(shù)的屬性都屬于單值屬性,例如同一個(gè)人只能具有一個(gè)年齡和一種性別。但是在某些情況下,實(shí)體的屬性可能取多個(gè)值,這時(shí)候的屬性就稱為多值屬性,例如人的聯(lián)系方式信息就是一個(gè)多值的,有的人有 1 個(gè)電話,有的人有 2 個(gè)或者 3 個(gè)等等,或者可以分為移動(dòng)電話聯(lián)系方式、固定電話聯(lián)系方式和郵件聯(lián)系方式等。

注意:多值屬性的描述與單值屬性不一致,它采用雙線橢圓表示,并且在實(shí)際開發(fā)過程中,如果有多值屬性出現(xiàn),一般要將其另歸為實(shí)體或聯(lián)系。

實(shí)體屬性之間可能具有某種聯(lián)系,例如人的年齡屬性和出生日期有一種相互依賴關(guān)系,根據(jù)出生日期可以推導(dǎo)出人的年齡,我們就稱年齡為導(dǎo)出屬性或派生屬性。導(dǎo)出屬性不僅可以從另外的屬性中導(dǎo)出,也可以從相關(guān)的實(shí)體導(dǎo)出。例如一個(gè)公司實(shí)體的員工數(shù)量屬性的值可以通過累計(jì)該公司所有員工數(shù)得到。

還有一種屬性稱為可選屬性,即并不是所有的屬性都必須有值,有些屬性的可以沒有值,這就是可選屬性,在橢圓的文字后用“(O)”來表示。

3.2.2 實(shí)體型和鍵

同一類實(shí)體構(gòu)成實(shí)體類或?qū)嶓w集,實(shí)體類的特征用實(shí)體型來表示,實(shí)體型本質(zhì)上是一個(gè)具有相同屬性的實(shí)體集合,由一個(gè)實(shí)體型名字和一組屬性來定義,用于描述一組實(shí)體的公共結(jié)構(gòu),該實(shí)體集合中的任一實(shí)體稱為該實(shí)體型的一個(gè)實(shí)例。

例如,一個(gè)公司有上千名員工,需要在數(shù)據(jù)庫(kù)中存儲(chǔ)每個(gè)員工的信息,而這些員工的信息又都是類似的,如姓名、年齡等是這些員工相同的屬性,只不過對(duì)于不同的員工其具體的屬性值不同而已,此時(shí)我們就可以把這些類似的實(shí)體抽象為一個(gè)實(shí)體型,如:員工(員工編號(hào)、姓名、部門、性別、年齡、職稱)。

由此看來,實(shí)體型這一概念也就是上文我們所提到的關(guān)系模式,只是換了個(gè)馬甲而已,實(shí)體型名字也就是關(guān)系模式名字。

為了區(qū)別實(shí)體型中的不同實(shí)體,又引入了“”的概念,它要求對(duì)于不同的實(shí)體,“鍵”的值必須不同,例如不同的員工必須要有一個(gè)不同的“員工號(hào)”來作為區(qū)別。一個(gè)實(shí)體型可以有多個(gè)鍵,例如“人”的姓名和生日屬性是一個(gè)鍵,而身份證號(hào)屬性是另一個(gè)鍵。

實(shí)體型的每個(gè)簡(jiǎn)單屬性都具有一個(gè)可能的取值范圍,稱為值域,例如“人”的年齡值域可以為 1-150 的整數(shù)范圍。

3.2.3 實(shí)體間的聯(lián)系

(1)聯(lián)系的種類

現(xiàn)實(shí)世界中,事物內(nèi)部或事物之間總是有聯(lián)系的,聯(lián)系反映了實(shí)體內(nèi)部或?qū)嶓w之間的關(guān)系。

聯(lián)系的度數(shù)指的是一個(gè)聯(lián)系所涉及的實(shí)體數(shù)。比如:單實(shí)體聯(lián)系兩實(shí)體聯(lián)系多實(shí)體聯(lián)系

比較常見的為兩實(shí)體聯(lián)系,兩個(gè)實(shí)體之間可能存在以下聯(lián)系:

  • 一對(duì)一聯(lián)系(1 : 1),例如部門和負(fù)責(zé)人之間的聯(lián)系,一個(gè)部門有一個(gè)負(fù)責(zé)人,一個(gè)負(fù)責(zé)人負(fù)責(zé)一個(gè)部門;
  • 一對(duì)多聯(lián)系(1 : n),例如部門和員工之間的聯(lián)系,一個(gè)部門有多個(gè)員工,而每個(gè)員工只屬于一個(gè)部門;
  • 多對(duì)多聯(lián)系(m : n),例如項(xiàng)目和員工之間的聯(lián)系,一個(gè)項(xiàng)目可以需要多個(gè)員工參加,而一個(gè)員工也可以參加多個(gè)項(xiàng)目。

聯(lián)系一般使用菱形來進(jìn)行描述,上面的這幾種聯(lián)系可用如下 E-R 圖來表示。

單實(shí)體聯(lián)系也可分為一對(duì)一、一對(duì)多、多對(duì)多聯(lián)系,如員工和員工之間的“領(lǐng)導(dǎo)”關(guān)系就是一對(duì)多聯(lián)系,員工與員工之間的配偶關(guān)系是一種一對(duì)一聯(lián)系。

一般地,兩個(gè)以上的實(shí)體之間也存在一對(duì)一、一對(duì)多和多對(duì)多的聯(lián)系。例如學(xué)生選課系統(tǒng)中有三個(gè)實(shí)體:學(xué)生、教師、課程,此時(shí)它們之間的聯(lián)系如下:

它表示一個(gè)教師可以教授多門課程,一個(gè)課程可以被多個(gè)教師教授;一個(gè)學(xué)生可以選擇多門課程,一門課程可被多個(gè)學(xué)生選擇,學(xué)生在選課的同時(shí)選擇教師。

(2)聯(lián)系的存在性

除了上面聯(lián)系的種類之外,還要考慮一個(gè)實(shí)體在一個(gè)聯(lián)系中的存在性。存在性在轉(zhuǎn)換成邏輯模式后表現(xiàn)為某個(gè)屬性是否可以為空值,空值為不明確的值,在 DBMS 中用 NULL 表示。

一般的,聯(lián)系有如下幾種存在性:

  • 強(qiáng)制存在:在連線上劃“1”,表示最小的基數(shù)為1。如果聯(lián)系一端的實(shí)體的實(shí)例對(duì)于該聯(lián)系的其他實(shí)體的實(shí)例必須存在,則稱該實(shí)體為強(qiáng)制的。
  • 可選存在:連線上劃“0”,表示最小基數(shù)為0。如果聯(lián)系一端的實(shí)體的實(shí)例對(duì)于該聯(lián)系的其他實(shí)體的實(shí)例不要求一定存在,則稱該實(shí)體為可選的。
  • 未知存在:連線上不劃“1”或“0”,表示目前不知道是強(qiáng)制還是可選的。

例如上述員工參加項(xiàng)目的 E-R 圖,可以補(bǔ)充完善其聯(lián)系的存在性:

它表示一個(gè)項(xiàng)目至少要有一個(gè)員工參加(強(qiáng)制性的),而一個(gè)員工可能不參加任何一個(gè)項(xiàng)目(可選的)。

3.2.4 高級(jí) E-R 構(gòu)造

高級(jí) E-R 構(gòu)造指的是對(duì) E-R 模型的擴(kuò)充,簡(jiǎn)稱 EER 模型(extend-ER),EER 模型包括了 E-R 模型的所有概念,此外,它還包括泛化層次、匯集層次和弱實(shí)體等概念。

(1)泛化層次

泛化層次涉及到子類、超類、泛化和特化等概念,讓我們先來了解一下。

子類和超類

在很多應(yīng)用中,一個(gè)實(shí)體型的實(shí)體需要進(jìn)一步劃分為多個(gè)子集合,并要明確表示出來。例如,實(shí)體型教師的成員實(shí)體可以分為教授、副教授、講師和助教 4 個(gè)實(shí)體集合,這些集合都是教師實(shí)體集合的子集合(可定義為子實(shí)體型),稱之為實(shí)體型教師的子類,而實(shí)體型教師稱為這些子實(shí)體型的超類。

子類與超類之間的關(guān)系稱為 IS-A 關(guān)系,子類的成員必須是超類的成員,否則不能在數(shù)據(jù)庫(kù)中出現(xiàn),但是超類的某些成員可以不屬于任何子類。

這一概念和 Java 繼承關(guān)系中的子類與父類概念是很類似的。

泛化(歸納)

泛化也稱為歸納,它是將幾個(gè)實(shí)體中的某些公共屬性概括出來,提升為一個(gè)高一層次的超類,而原先的實(shí)體類則變?yōu)樽宇?#xff0c;子類除了它自己的屬性以外還繼承超類的屬性。

泛化層次可分為互斥泛化層次和重疊泛化層次兩種。互斥泛化層次是指子類之間是互斥的,即一個(gè)實(shí)例不可能出現(xiàn)在兩個(gè)以上的子類中,互斥泛化層次在泛化層次圖中的圓圈中寫入字母 D(Disjoint); 重疊泛化層次在泛化層次圖中的圓圈中寫入字母 O(Overlapping)。

例如,實(shí)體型飛機(jī)、火車和汽車可以泛化出超類運(yùn)輸工具,圖中的雙線表示運(yùn)輸工具實(shí)體型的每個(gè)實(shí)體必須屬于一個(gè)子類,即表示子類完全包含了超類,超類中的每一個(gè)實(shí)例,子類中都有該實(shí)例,這種情形稱為完全性限制。

特化(演繹)

特化是泛化的逆過程,它也稱為演繹,是根據(jù)超類而演繹出子類的過程。例如,實(shí)體型教師可以演繹形成子類教授、副教授、教師和助教,這個(gè)過程是按照教師職稱對(duì)教師實(shí)體的分類,它還可以使用不同的分類規(guī)則進(jìn)行多種演繹。例如,可以按照教師的專業(yè)對(duì)教師實(shí)體進(jìn)行演繹,得到文科教師、理科教師和外語教師等等。

(2)匯集層次

匯集(Aggregation)是另一種重要的信息抽象手段,描述了整體和部分之間的聯(lián)系,即實(shí)體之間“…是…的一部分(is part of)”的聯(lián)系,或者“……是由……組成的”。

匯集層次中沒有繼承,所以也不以超類、子類來稱呼相關(guān)的實(shí)體,而是稱為父實(shí)體和成份實(shí)體。

匯集的概念類似于面向?qū)ο蟾拍钪械木酆详P(guān)系。例如,一個(gè)教室由房間、門窗、電腦、投影儀等等組合而成,它們之間沒有繼承關(guān)系。

(3)弱實(shí)體

在實(shí)際領(lǐng)域中經(jīng)常存在這樣一些實(shí)體型,它們沒有自己的鍵(即所有屬性都不足以形成主鍵),這種實(shí)體型的實(shí)體不能獨(dú)立存在,必須要依賴于一個(gè)強(qiáng)實(shí)體,則稱這種實(shí)體型為弱實(shí)體型。在 E-R 圖中用雙線框表示弱實(shí)體。

弱實(shí)體型的不同實(shí)體的屬性值可能完全相同,難以區(qū)別,所以它才需要與一般的實(shí)體型進(jìn)行關(guān)聯(lián),目的就是用來區(qū)分不同的弱實(shí)體。

如在人事管理系統(tǒng)中,職工家屬的信息就是以職工的存在為前提的,家屬實(shí)體是弱實(shí)體,子女與職工的聯(lián)系是一種依賴聯(lián)系。又如,學(xué)生家長(zhǎng)是一種弱實(shí)體,因?yàn)橹挥袑W(xué)生實(shí)體存在,家長(zhǎng)實(shí)體才會(huì)存在。

上圖就表示了家屬實(shí)體是弱實(shí)體,不能單獨(dú)存在必須依賴與職工實(shí)體,這里的標(biāo)示的依賴信息為存在依賴(E)和標(biāo)識(shí)依賴(ID):

存在依賴:若某個(gè)實(shí)體 X 的存在依賴于另外一個(gè)實(shí)體 Y 的存在而存在,則稱 X 存在依賴于 Y。這是一種特殊的聯(lián)系,用 E 表示,并用箭頭表示方向,其中 X 稱為弱實(shí)體,用雙框表示,稱 Y 為 X 的父實(shí)體。

標(biāo)識(shí)依賴:如果一個(gè)實(shí)體不能用它自己的屬性來唯一標(biāo)識(shí),即沒有自己的主鍵,而只能用與其他實(shí)體的聯(lián)系來標(biāo)識(shí),則稱該實(shí)體標(biāo)識(shí)依賴于其他實(shí)體。這也是一種特殊的聯(lián)系,用 ID 表示,并用箭頭表示方向。


3.3 概念設(shè)計(jì)方法與步驟

在了解了 E-R 模型的相關(guān)概念之后,我們就需要了解一下概念設(shè)計(jì)中的幾種常用設(shè)計(jì)方法和策略,總體策略和方法可以歸納為 4 種。

(1)自頂向下:首先定義全局概念結(jié)構(gòu)的框架,然后逐步細(xì)化。

(2)自底向上:首先定義各局部應(yīng)用的概念結(jié)構(gòu),然后將它們集成起來,最終得到全局概念結(jié)構(gòu)。

(3)逐步擴(kuò)張:首先定義最重要的核心概念結(jié)構(gòu),然后向外擴(kuò)充,以滾雪球的方式逐步生成其他概念結(jié)構(gòu),直至總體概念結(jié)構(gòu)。

(4)混合策略:將應(yīng)用劃分為相對(duì)獨(dú)立的不同功能,針對(duì)每一種功能設(shè)計(jì)相應(yīng)的局部 E-R 模型,最終通過歸納合并,消去冗余和不一致,形成全局 E-R 模型。

最常用的策略是自底向上法,即先進(jìn)行自頂向下的需求分析,再進(jìn)行自底向上的概念設(shè)計(jì),如下圖所示。

正如上圖所示,一般我們會(huì)根據(jù)需求中的一個(gè)獨(dú)立的小模塊進(jìn)行概念模式的設(shè)計(jì),然后再對(duì)這些局部視圖進(jìn)行集成,最終匯總成一個(gè)符合需求分析要求的全局概念模式。

自底向上概念結(jié)構(gòu)設(shè)計(jì)步驟:

  • 抽象數(shù)據(jù)并設(shè)計(jì)局部視圖;
  • 集成局部視圖,得到全局概念結(jié)構(gòu)。

  • 3.4 局部 E-R 模型設(shè)計(jì)

    按照上述的概念設(shè)計(jì)策略,一般情況下我們會(huì)先按照需求模塊進(jìn)行局部 E-R 模型的構(gòu)建,然后在集成匯總為全局 E-R 模型。

    局部 E-R 模型設(shè)計(jì)首先要確定局部 E-R 圖描述的范圍,一般要遵循獨(dú)立性原則和規(guī)模適度原則。

    獨(dú)立性原則指的是劃分在一個(gè)范圍內(nèi)的應(yīng)用功能具有獨(dú)立性與完整性,與其他范圍內(nèi)的應(yīng)用有最少的聯(lián)系。規(guī)模適度原則是指局部 E-R 圖規(guī)模應(yīng)適度,一般以 6 個(gè)左右的實(shí)體為宜。

    建立 E-R 模型的步驟:區(qū)分實(shí)體和屬性 → 找出匯集層次 → 找出泛化層次 → 找出弱實(shí)體 → 定義聯(lián)系

    (1)區(qū)分實(shí)體和屬性

    實(shí)體要有描述信息。如果一個(gè)對(duì)象有多個(gè)描述信息,則應(yīng)考慮將其作為實(shí)體;但如果一個(gè)對(duì)象只有一個(gè)描述信息,則應(yīng)考慮將其作為屬性。

    如果某些非標(biāo)識(shí)屬性有多個(gè)值與實(shí)體對(duì)應(yīng),即屬性的多個(gè)值與標(biāo)識(shí)屬性的一個(gè)值對(duì)應(yīng),則稱其為多值屬性。將多值屬性歸為另一個(gè)實(shí)體

    將屬性歸到它最直接描述的實(shí)體中。例如屬性“辦公樓名”應(yīng)歸到實(shí)體部門中,而不是歸到實(shí)體職工中。

    (2)找出匯集層次

    對(duì)基本實(shí)體進(jìn)行分析,如有某個(gè)實(shí)體是由其他實(shí)體組成,則將它們構(gòu)造成一個(gè)匯集層次,通常的做法是將已有的實(shí)體匯集出一個(gè)新實(shí)體。

    (3)找出泛化層次

    一旦完成了基本實(shí)體的劃分,就可以用泛化和特化(兩者都要用)來構(gòu)造類層次,如果基本實(shí)體有了變化,則要重新考慮有關(guān)的泛化層次和新產(chǎn)生的泛化層次。要做好泛化和特化的工作,經(jīng)驗(yàn)起著重要的作用。

    (4)找出弱實(shí)體

    對(duì)于弱實(shí)體,建議在建立泛化層次后再考慮,比如說一個(gè)公司的職工家屬相對(duì)于公司就是一種弱實(shí)體存在。

    (5)定義聯(lián)系

    上述工作完成之后就可以來定義實(shí)體之間的聯(lián)系了。當(dāng)然泛化層次、匯集層次等也是特殊類型的聯(lián)系,只是做泛化、匯集等分析時(shí)通常會(huì)產(chǎn)生新實(shí)體,而普通的聯(lián)系是指實(shí)體之間發(fā)生作用,不會(huì)產(chǎn)生新實(shí)體也不會(huì)減少實(shí)體。這就是為什么要到最后才考慮聯(lián)系的原因。應(yīng)該說定義聯(lián)系是ER模型的關(guān)鍵,大部分的信息關(guān)聯(lián)都是由聯(lián)系表述出來的。

    注意:聯(lián)系應(yīng)該是最后分析定義的階段,在區(qū)分實(shí)體和屬性的時(shí)候不要過早考慮聯(lián)系。

    實(shí)體之間有多個(gè)聯(lián)系是可能的,但不要表示相同的概念,否則將會(huì)出現(xiàn)聯(lián)系的冗余。冗余聯(lián)系是指表示相同概念的多個(gè)聯(lián)系,從 E-R 圖生成關(guān)系模式時(shí),冗余聯(lián)系會(huì)導(dǎo)致生成的關(guān)系模式不規(guī)范,有過多的冗余。

    此外,多個(gè)實(shí)體之間存在聯(lián)系也是可能的,這就是多實(shí)體聯(lián)系,例如上文的學(xué)生選課就是一個(gè)多實(shí)體聯(lián)系的實(shí)例。

    (6)建立 E-R 模型注意的幾點(diǎn)原則

    在創(chuàng)建 E-R 模型的過程中,一般我們要遵守以下幾點(diǎn)原則:

    • 屬性是不可分割的;
    • 每個(gè)實(shí)體有唯一的標(biāo)識(shí),而聯(lián)系沒有標(biāo)識(shí),一般聯(lián)系的標(biāo)識(shí)依賴于相關(guān)實(shí)體的標(biāo)識(shí);
    • 每個(gè)子類有唯一的超類,子類本身不定義標(biāo)識(shí),而從超類中繼承標(biāo)識(shí);
    • 不允許弱實(shí)體作為子類,但可作為超類;
    • 實(shí)體名、聯(lián)系名和屬性名在一個(gè) E-R 圖(局部或全局)中應(yīng)唯一;
    • 相同實(shí)體之間的多個(gè)聯(lián)系應(yīng)是可區(qū)別的。

    3.5 E-R 模型的集成

    由于局部 E-R 模型反映的只是局部子功能對(duì)應(yīng)的數(shù)據(jù)視圖,且局部 E-R 圖之間可能存在不一致之處,還不能作為邏輯設(shè)計(jì)的依據(jù),此時(shí)可以進(jìn)行 E-R 模型的集成,去掉不一致和重復(fù)的地方,最終合并為全局視圖。

    局部 E-R 模型的集成方法有如下兩種:

    • 多元集成法:一次性將多個(gè)局部 E-R 圖合并為一個(gè)全局 E-R 圖;
    • 二元集成法:用累加的方式一次集成兩個(gè)局部 E-R 圖。

    在實(shí)際應(yīng)用中一般根據(jù)系統(tǒng)的復(fù)雜程度選擇集成的方法,并可以混合選擇使用。無論采用哪種集成方法,每次集成都分為兩個(gè)階段:

  • 合并:消除局部 E-R 圖之間的不一致,生成初步 E-R 圖;
  • 優(yōu)化:消除(或減少)數(shù)據(jù)冗余,生成全局 E-R 圖。
  • 視圖集成最好由一個(gè)人完成,或始終在一個(gè)人主持下完成,否則不但舊的問題解決不了,新的問題也會(huì)不斷產(chǎn)生。

    下面就這兩個(gè)階段的內(nèi)容進(jìn)行展開敘述。

    3.5.1 合并

    由于各個(gè)局部應(yīng)用所面臨的問題不同,且通常是由不同的設(shè)計(jì)人員進(jìn)行局部 E-R 圖的設(shè)計(jì),這就導(dǎo)致各個(gè)局部 E-R 圖之間必定存在許多不一致的地方,即存在沖突。合理地消除沖突,形成一個(gè)能為全系統(tǒng)中所有用戶共同理解和接受的統(tǒng)一的概念模型,成為合并局部 E-R 模型的主要工作。

    沖突主要分為三類:屬性沖突命名沖突結(jié)構(gòu)沖突

    (1)屬性沖突

    ① 屬性域沖突,即屬性值的類型、取值范圍不一致。例如,員工的工號(hào)是使用數(shù)值型還是字符型。

    ② 屬性取值沖突。例如,學(xué)生的成績(jī)有的以百分制計(jì),有的以五分制計(jì)。

    這類沖突是由于用戶在業(yè)務(wù)上的約定而引起,必須由用戶協(xié)商解決。

    (2)命名沖突

    命名沖突可能發(fā)生在實(shí)體、屬性和聯(lián)系上,常見的為屬性沖突。

    ① 同名異義:不同意義的對(duì)象在不同的局部應(yīng)用中具有相同的名字。例如,“單位”既可以表示人員所在部門,也可以作為長(zhǎng)度、重量等度量的屬性。

    ② 異名同義:同一意義的對(duì)象在不同的局部應(yīng)用中具有不同的名字。例如學(xué)校的“系別”與“學(xué)院”實(shí)際上是同一實(shí)體。

    這類沖突通常可以采取行政手段進(jìn)行協(xié)商解決。

    (3)結(jié)構(gòu)沖突

    ① 同一對(duì)象在不同局部應(yīng)用中具有不同的身份。例如局部模型A中的某實(shí)體在另一局部模型 B 中被設(shè)計(jì)為屬性,這就造成了結(jié)構(gòu)上的沖突。

    解決方法:將實(shí)體轉(zhuǎn)化為屬性或?qū)傩赞D(zhuǎn)化為實(shí)體,保持結(jié)構(gòu)的統(tǒng)一。

    ② 同一對(duì)象在不同局部應(yīng)用中的屬性組成不完全相同。例如,對(duì)同一類“員工”這一對(duì)象,在局部模型 A 中其屬性為工號(hào)、姓名、性別、年齡4個(gè)屬性,而在另一局部模型 B 中的屬性為工號(hào)、姓名、所在部門 3 個(gè)屬性組成。

    解決方法:對(duì)實(shí)體的屬性取其在不同局部應(yīng)用中的并集,并適當(dāng)設(shè)計(jì)好屬性的次序。

    ③ 相同實(shí)體之間的聯(lián)系在不同局部模型中不一致。例如,在局部應(yīng)用 A 中實(shí)體 E1 和 E2 是一對(duì)多聯(lián)系,而在局部應(yīng)用 B 中卻是多對(duì)多聯(lián)系。

    解決方法:根據(jù)應(yīng)用語義對(duì)實(shí)體聯(lián)系的類型進(jìn)行綜合或調(diào)整。

    3.5.2 優(yōu)化

    數(shù)據(jù)冗余和聯(lián)系冗余是 E-R 模型的主要冗余問題,能被其他數(shù)據(jù)推導(dǎo)(派生)出來的數(shù)據(jù)就是冗余數(shù)據(jù),能被其他聯(lián)系推導(dǎo)(派生)出來的聯(lián)系就是冗余聯(lián)系。例如,員工實(shí)體同時(shí)具有“出生年月”和“年齡”屬性,“年齡”可以從“出生年月”中推導(dǎo)出來,因此是冗余數(shù)據(jù)。

    冗余的存在容易破壞數(shù)據(jù)的完整性,造成數(shù)據(jù)庫(kù)的維護(hù)困難,應(yīng)予以消除。可以利用多種方法來消除冗余,在關(guān)系型數(shù)據(jù)庫(kù)中更常用規(guī)范化理論來進(jìn)行分析。


    4 邏輯設(shè)計(jì)

    概念設(shè)計(jì)階段得到的 E-R 模型是針對(duì)用戶的概念模型,它獨(dú)立于具體的 DBMS,而邏輯設(shè)計(jì)階段的主要任務(wù)就是將其轉(zhuǎn)化為具體 DBMS 所支持的數(shù)據(jù)模型。

    這里以關(guān)系型數(shù)據(jù)庫(kù)模型進(jìn)行討論,其邏輯結(jié)構(gòu)設(shè)計(jì)階段主要分為:將 E-R 圖轉(zhuǎn)化為關(guān)系數(shù)據(jù)模型、關(guān)系模式的規(guī)范化和優(yōu)化。

    4.1 將 E-R 圖轉(zhuǎn)化為關(guān)系數(shù)據(jù)模型

    數(shù)據(jù)關(guān)系模型是一組關(guān)系模式的集合,將 E-R 圖轉(zhuǎn)化為關(guān)系數(shù)據(jù)模型實(shí)際上是要將實(shí)體、屬性和聯(lián)系轉(zhuǎn)化為關(guān)系模式。一般有如下轉(zhuǎn)化原則。

    (1)轉(zhuǎn)化實(shí)體

    一個(gè)實(shí)體轉(zhuǎn)化為一個(gè)關(guān)系模式,實(shí)體屬性就是關(guān)系屬性,實(shí)體的碼(主鍵)就是關(guān)系的碼。

    例如,一個(gè)職工的關(guān)系模式為“職工(職工號(hào)、姓名、性別、年齡、職稱、部門)”。

    (2)轉(zhuǎn)化弱實(shí)體

    如果存在弱實(shí)體,則一個(gè)弱實(shí)體轉(zhuǎn)化為一個(gè)關(guān)系模式,并以其依賴的強(qiáng)實(shí)體的碼作為該關(guān)系的碼。

    例如,職工的家屬是弱實(shí)體,則可轉(zhuǎn)化成關(guān)系模式:家屬(職工號(hào),家屬名,家屬關(guān)系)。

    (3)轉(zhuǎn)化匯集層次

    對(duì)于匯集層次,將基數(shù)為1的成份實(shí)體的鍵加入到其父實(shí)體中作為外部鍵,將父實(shí)體的鍵加入到基數(shù)為M的成份實(shí)體中,作為其外部鍵。

    (4)轉(zhuǎn)化泛化層次

    對(duì)于泛化層次,將每個(gè)超類的鍵作為其子類的鍵和外部鍵。

    (5)轉(zhuǎn)化多值屬性

    如果存在多值屬性,則多值屬性要轉(zhuǎn)化成一個(gè)獨(dú)立的關(guān)系,并以其實(shí)體的碼作為該關(guān)系的碼。

    例如,職工的聯(lián)系方式是個(gè)多值屬性,那么可以轉(zhuǎn)化成“職工聯(lián)系方式(職工號(hào),聯(lián)系方式)”。

    (6)轉(zhuǎn)化聯(lián)系

    一個(gè) 1:1 聯(lián)系 可以轉(zhuǎn)化為一個(gè)獨(dú)立的關(guān)系模式,但更常用的是把聯(lián)系與任意一端對(duì)應(yīng)的關(guān)系模式合并。

    如果轉(zhuǎn)化為一個(gè)獨(dú)立的關(guān)系模式,則與該聯(lián)系相連的各實(shí)體的碼以及聯(lián)系本身的屬性均轉(zhuǎn)化為關(guān)系的屬性,每個(gè)實(shí)體的碼均是該關(guān)系的候選碼。

    如果把聯(lián)系與一端實(shí)體的關(guān)系模式合并,具體選擇哪一端需要根據(jù)應(yīng)用環(huán)境確定,但應(yīng)以盡量減少連接操作為目標(biāo)。

    例如,一個(gè)負(fù)責(zé)人管理一個(gè)部門:

    一個(gè) 1:n 聯(lián)系 可以轉(zhuǎn)化為一個(gè)獨(dú)立的關(guān)系模式,但更常用的是把聯(lián)系與 n 端對(duì)應(yīng)的關(guān)系模式合并。

    如果轉(zhuǎn)化為一個(gè)獨(dú)立關(guān)系模式,則與該聯(lián)系相連的各實(shí)體的碼以及聯(lián)系本身的屬性均轉(zhuǎn)化為關(guān)系的屬性,而關(guān)系的碼為 n 端實(shí)體的碼。

    在實(shí)際應(yīng)用中比較常用的轉(zhuǎn)化方式是把聯(lián)系與 n 端實(shí)體的關(guān)系模式合并。例如,對(duì)于一個(gè)部門由多個(gè)員工組成:

    可以轉(zhuǎn)化為關(guān)系模式:部門(部門號(hào),部門名稱)、員工(工號(hào),姓名,性別,部門號(hào))。

    一個(gè) m:n 聯(lián)系 轉(zhuǎn)化為一個(gè)獨(dú)立的關(guān)系模式,與該聯(lián)系相連的各實(shí)體的碼以及聯(lián)系本身的屬性均轉(zhuǎn)換為關(guān)系的屬性,關(guān)系的碼為各實(shí)體碼的組合。

    例如學(xué)生選課操作:

    選課聯(lián)系可以轉(zhuǎn)化為模式:選課(學(xué)號(hào),課程號(hào),課程成績(jī)),其中的課程成績(jī)是聯(lián)系中帶的屬性。


    4.2 關(guān)系模式的規(guī)范化

    通常情況下,數(shù)據(jù)庫(kù)邏輯設(shè)計(jì)的結(jié)果(關(guān)系模式)并不唯一,為了進(jìn)一步減少關(guān)系模式中的存在的異常、提高應(yīng)用系統(tǒng)的性能,規(guī)范化理論是重要理論基礎(chǔ)和有力工具。

    4.2.1 搞清楚什么是函數(shù)依賴

    在進(jìn)行下面內(nèi)容之前,我們先來看如下 3 種函數(shù)依賴的概念。我們假設(shè):R(U) 是屬性集 U 上的一個(gè)關(guān)系模式,X、Y 是 U 的子集。

    函數(shù)依賴:用 X→Y 表示,稱為“X 決定 Y”或者稱為“Y 函數(shù)依賴于 X”。例如:{工號(hào)} → {職工姓名}。

    完全函數(shù)依賴:如果“Y 函數(shù)依賴于 X”,且對(duì)于 X 的任一真子集 X’,都不能決定 Y,那么稱“Y 完全函數(shù)依賴于 X”。例如:(學(xué)號(hào),課程號(hào),成績(jī))關(guān)系模式中,存在函數(shù)依賴 {學(xué)號(hào),課程號(hào)} → 成績(jī),并且 {學(xué)號(hào),課程號(hào)} 的任意真子集,都不能決定成績(jī),所以這個(gè)函數(shù)依賴即為完全函數(shù)依賴。

    傳遞函數(shù)依賴:如果X→Z,Z→Y,且 Z 不包含 X,那么稱“Y 傳遞函數(shù)依賴于 X”。假設(shè)有關(guān)系模式:(學(xué)號(hào),學(xué)生姓名,班級(jí),班主任),由學(xué)號(hào)可以得到學(xué)生所在班級(jí),而又班級(jí)又可得到班主任,反之則不成立,所以此模式中存在傳遞函數(shù)依賴:{學(xué)號(hào)} → {班主任}。

    4.2.2 學(xué)會(huì)求解候選碼

    如果要對(duì)關(guān)系模式進(jìn)行規(guī)范化處理,那么我們首先必須要明確什么是候選碼、主屬性、非主屬性等概念。又因?yàn)楦鶕?jù)定義,屬于候選碼的屬性就是主屬性,不屬于候選碼的屬性就是非主屬性,所以最重要的一點(diǎn)就是學(xué)會(huì)求解關(guān)系模式中的候選碼

    設(shè)有關(guān)系模式 R<U, F>,U 是組成該關(guān)系的屬性名的集合,F 是屬性間函數(shù)依賴關(guān)系的集合。

    現(xiàn)在假設(shè)有:R<U, F>,且 U = {A, B, C , D , E}; F = {A→B , AC→D , CD→E , E→C},來求解此關(guān)系模式的候選碼。

    由上述信息可得出:UL = {A}, UR = {B}, UB ={C, D, E}。

    其中 UL 表示僅在函數(shù)依賴集 F 中各依賴關(guān)系式左邊出現(xiàn)的屬性的集合,若 UL 非空,則 UL 中的任一屬性必定包含在關(guān)系模式 R 的候選碼中;UR 表示僅在函數(shù)依賴集 F 中各依賴關(guān)系式右邊出現(xiàn)的屬性的集合,若 UR 非空,則 UR 中的任一屬性必定不包含在關(guān)系模式 R 的任一個(gè)候選碼中;UB = U -UL - UR ,它表示在依賴關(guān)系式左右兩邊都出現(xiàn)的屬性的集合。

    結(jié)合本例,A 屬性只出現(xiàn)在依賴關(guān)系的左側(cè),所以它一定包含在候選碼中,而 B 屬性只出現(xiàn)在依賴關(guān)系的右側(cè),所以它一定不包含在候選碼中,其余的為左右兩側(cè)都有出現(xiàn),所以它們可能包含在候選碼中也可能不包含在候選碼中。所以我們還要繼續(xù)如下步驟。

    如果 UL+ = U,即 UL 的閉包是該關(guān)系模式的整個(gè)屬性集合,那么 UL 就為關(guān)系模式 R 唯一的候選碼,而如果 UL+ ≠ U,那就要將 UL 依次與 UB 中的屬性組合進(jìn)行閉包求解了。

    我們還是依照本例,UL = {A},則 UL+ = {A, B},即由屬性 A 并根據(jù) F 中的依賴關(guān)系只能推導(dǎo)出來屬性 B(因?yàn)?F 中存在 A→B),所以此閉包結(jié)果為 {A, B} ≠ U(閉包運(yùn)算其實(shí)就是由當(dāng)前元素可以推導(dǎo)出的元素總集合),所以此時(shí)還需要 UL 中的元素與 UB 中的元素依次組合再繼續(xù)求解,如下:

    (AC)+ = {A, B, C, D, E} = U,所以 AC 為此關(guān)系模式的一個(gè)候選碼,從而 ACD,ACE,ACDE 都不為候選碼(為什么求解出來了 AC 后,就確定后面這幾個(gè)不是候選碼了?這還要死摳候選碼的定義,見 1.2 內(nèi)容)

    (AD)+ = {A,B,D} ≠ U,所以 AD 不為候選碼;

    (AE)+ = {ABCDE} = U,所以 AE 為候選碼,從而 ADE 不為候選碼。

    算法結(jié)束,所以當(dāng)前關(guān)系模式的候選碼為 AC 和 AE,那么主屬性就為 A、C、E,非主屬性為 B、D。

    求解到了候選碼、主屬性和非主屬性,就可以利用下面規(guī)范化理論的步驟,消除非主屬性對(duì)碼的不同函數(shù)依賴(主要是拆分模式),以此來達(dá)到不同的范式層次。

    4.2.3 規(guī)范化理論

    通常把關(guān)系數(shù)據(jù)庫(kù)的規(guī)范化過程中為不同程度的規(guī)范化要求設(shè)立的不同標(biāo)準(zhǔn)稱為范式。根據(jù)關(guān)系模式滿足的不同性質(zhì)和規(guī)范化的程度,把關(guān)系模式分為 1NF(第一范式)、2NF、3NF、BCNF、4NF 和 5NF,它們是層層遞進(jìn)的關(guān)系,通常把模式 R 的第 n 范式簡(jiǎn)記為:R∈nNF。

    經(jīng)過上述函數(shù)依賴概念的了解以及學(xué)會(huì)候選碼的求解之后,我們就可以根據(jù)范式的定義來對(duì)模式進(jìn)行規(guī)范化處理:

    第一范式 :如果關(guān)系模式 R 的所有屬性均為簡(jiǎn)單屬性,即每個(gè)屬性都是不可再分(原子性)的,則稱R屬于第一范式,記作 R∈1NF。

    第二范式 :如果關(guān)系模式 R∈1NF,且每個(gè)非主屬性都完全函數(shù)依賴于 R 的碼,則稱 R 屬于第二范式,記作 R∈2NF。

    第三范式 :如果關(guān)系模式 R∈2NF,且每個(gè)非主屬性都不傳遞函數(shù)依賴于 R 的候選碼,則稱 R 屬于第三范式,記作 R 屬于 3NF。

    BC 范式 :如果關(guān)系模式 R∈1NF,且對(duì)于所有的函數(shù)依賴 X→Y(Y ? X),決定因素 X 都包含了 R 的一個(gè)候選碼,則稱 R 屬于 BC 范式,記作 R∈BCNF。

    如上幾種范式的遞進(jìn)過程如下圖所示。


    4.3 關(guān)系模式的優(yōu)化

    為了提高數(shù)據(jù)庫(kù)應(yīng)用系統(tǒng)的性能,需要對(duì)關(guān)系模式進(jìn)行修改、調(diào)整,通常采用合并與分解兩種方法。

    (1)合并

    合并多個(gè)關(guān)系模式的主要是減小連接操作而提高查詢效率。它一般的應(yīng)用場(chǎng)景為多個(gè)關(guān)系模式具有相同的主鍵,并且這些關(guān)系模式主要處理多關(guān)系的查詢操作。

    (2)分解

    為了提高數(shù)據(jù)操作效率和存儲(chǔ)空間的利用率,可以對(duì)關(guān)系模式進(jìn)行水平分解和垂直分解。

    水平分解:把關(guān)系模式按照分類查詢的條件分解成幾個(gè)關(guān)系模式,這樣可以減少應(yīng)用系統(tǒng)每次查詢需要訪問的記錄數(shù),從而提高效率。

    例如,某大學(xué)學(xué)生數(shù)據(jù)庫(kù)存在關(guān)系模式:學(xué)生(學(xué)號(hào),姓名,年齡,籍貫),但是事實(shí)情況是多數(shù)查詢一次僅涉及其中一類學(xué)生,則可以把學(xué)生按類別進(jìn)行水平分割:本科生(…);碩士生(…);博士生(…)。

    垂直分解:把關(guān)系模式R的屬性分解為若干子集合,形成若干子關(guān)系模式。

    例如,職工情況的關(guān)系模式:職工(職工編號(hào),姓名,性別,年齡,職務(wù),工資,工齡,住址,電話),但事實(shí)情況是經(jīng)常查詢前六項(xiàng),較少使用后三項(xiàng),則可以把此關(guān)系模式垂直分解:職工信息1(職工編號(hào),姓名,性別,年齡,職務(wù),工資),職工信息2(職工編號(hào),工齡,住址,電話)。

    同時(shí)存在經(jīng)常查詢和非經(jīng)常查詢的屬性,均可采用垂直分割的方法。其優(yōu)點(diǎn)是減少數(shù)據(jù)傳遞量,提高查詢速度。

    5 物理設(shè)計(jì)

    數(shù)據(jù)庫(kù)在物理設(shè)備上的存儲(chǔ)結(jié)構(gòu)與存取方法稱為數(shù)據(jù)庫(kù)的物理結(jié)構(gòu),它依賴于給定的計(jì)算機(jī)系統(tǒng)。

    數(shù)據(jù)庫(kù)物理設(shè)計(jì)一般包含兩個(gè)步驟:確定數(shù)據(jù)庫(kù)的物理結(jié)構(gòu)(存取方法和存儲(chǔ)結(jié)構(gòu))、對(duì)物理結(jié)構(gòu)進(jìn)行評(píng)價(jià)(時(shí)間和空間效率)。

    (1)確定數(shù)據(jù)庫(kù)物理結(jié)構(gòu)

    ① 確定數(shù)據(jù)的存儲(chǔ)結(jié)構(gòu)和存放位置

    包括確定:

    • 關(guān)系、索引、聚簇、日志、備份等;
    • 考慮因素:存取時(shí)間、存儲(chǔ)空間利用率和維護(hù)代價(jià)。

    根據(jù)應(yīng)用情況將易變部分與穩(wěn)定部分、存取頻率較高部分與存取頻率較低部分分開存放,以提高系統(tǒng)性能。

    ② 設(shè)計(jì)合適的存取路徑;

    ③ 確定系統(tǒng)配置,DBMS產(chǎn)品一般都提供了一些系統(tǒng)配置變量和存儲(chǔ)分配參數(shù)。

    (2) 評(píng)價(jià)物理結(jié)構(gòu)

    ① 評(píng)價(jià)內(nèi)容

    對(duì)數(shù)據(jù)庫(kù)物理設(shè)計(jì)過程中產(chǎn)生的多種方案的時(shí)間效率、空間效率、維護(hù)代價(jià)和各種用戶需求進(jìn)行細(xì)致的評(píng)價(jià),從中選擇一個(gè)較優(yōu)的方案作為數(shù)據(jù)庫(kù)的物理結(jié)構(gòu)。

    ② 評(píng)價(jià)方法

    定量估算各種方案的存儲(chǔ)空間、存取時(shí)間以及維護(hù)代價(jià),對(duì)估算結(jié)果進(jìn)行權(quán)衡、比較,選擇出一個(gè)較優(yōu)的合理的物理結(jié)構(gòu),如果該結(jié)構(gòu)不符合用戶需求,則需要修改設(shè)計(jì)。

    6 數(shù)據(jù)庫(kù)實(shí)現(xiàn)

    數(shù)據(jù)庫(kù)的邏輯和物理結(jié)構(gòu)設(shè)計(jì)好以后,就要在實(shí)際的計(jì)算機(jī)系統(tǒng)中建立數(shù)據(jù)庫(kù)并試運(yùn)行了,這個(gè)階段的主要工作有如下幾點(diǎn)。

  • 建立數(shù)據(jù)庫(kù)結(jié)構(gòu);
  • 裝入數(shù)據(jù);
  • 編制與調(diào)試應(yīng)用程序;
  • 數(shù)據(jù)庫(kù)試運(yùn)行;
  • 整理相關(guān)文檔。
  • 7 數(shù)據(jù)庫(kù)運(yùn)行和維護(hù)

    數(shù)據(jù)庫(kù)經(jīng)過試運(yùn)行后,如果符合系統(tǒng)設(shè)計(jì)的目標(biāo),就可以正式投入運(yùn)行了。在數(shù)據(jù)庫(kù)運(yùn)行過程中,應(yīng)用環(huán)境、數(shù)據(jù)庫(kù)的物理存儲(chǔ)等會(huì)不斷發(fā)生變化,這時(shí)應(yīng)由 DBA 不斷地對(duì)數(shù)據(jù)庫(kù)設(shè)計(jì)進(jìn)行評(píng)價(jià)、調(diào)整、修改,概括起來,數(shù)據(jù)庫(kù)維護(hù)工作包括以下內(nèi)容。

    (1)數(shù)據(jù)庫(kù)的轉(zhuǎn)儲(chǔ)和恢復(fù)

    轉(zhuǎn)儲(chǔ)和恢復(fù)是系統(tǒng)正式運(yùn)行后最重要的維護(hù)工作之一。DBA 要針對(duì)不同的應(yīng)用要求制定不同的轉(zhuǎn)儲(chǔ)計(jì)劃,定期對(duì)數(shù)據(jù)庫(kù)和日志文件進(jìn)行備份。一旦發(fā)生介質(zhì)故障,即利用數(shù)據(jù)庫(kù)備份及日志文件備份,盡快將數(shù)據(jù)庫(kù)恢復(fù)到某種一致性狀態(tài)。

    (2)數(shù)據(jù)庫(kù)的安全性、完整性控制

    DBA 必須根據(jù)用戶的實(shí)際需要授予不同的操作權(quán)限。在數(shù)據(jù)庫(kù)運(yùn)行過程中,由于應(yīng)用環(huán)境的變化,對(duì)安全性的要求也會(huì)發(fā)生變化,DBA 需要根據(jù)實(shí)際情況修改原有的安全性控制。

    由于應(yīng)用環(huán)境的變化,數(shù)據(jù)庫(kù)的完整性約束條件也會(huì)變化,需要 DBA 不斷修正,以滿足用戶要求。

    (3)數(shù)據(jù)庫(kù)性能的監(jiān)督、分析和改進(jìn)

    在數(shù)據(jù)庫(kù)運(yùn)行過程中, DBA 必須監(jiān)督系統(tǒng)運(yùn)行,對(duì)監(jiān)測(cè)數(shù)據(jù)進(jìn)行分析,找出改進(jìn)系統(tǒng)性能的方法。

    利用監(jiān)測(cè)工具獲取系統(tǒng)運(yùn)行過程中一系列性能參數(shù)的值,通過仔細(xì)分析這些數(shù)據(jù),判斷當(dāng)前系統(tǒng)是否處于最佳運(yùn)行狀態(tài),如果不是,則需要通過調(diào)整某些參數(shù)來進(jìn)一步改進(jìn)數(shù)據(jù)庫(kù)性能。

    (4)數(shù)據(jù)庫(kù)的重組織和重構(gòu)造

    重組織的形式分為全部重組織和部分重組織(只對(duì)頻繁增、刪的表進(jìn)行重組織),它指按原設(shè)計(jì)要求重新安排存儲(chǔ)位置、回收垃圾、減少指針鏈等,以提高系統(tǒng)性能,但其不會(huì)修改原設(shè)計(jì)的邏輯和物理結(jié)構(gòu)。

    重構(gòu)造主要指部分重構(gòu)造(若變化太大,重構(gòu)無用),它的主要工作是根據(jù)新環(huán)境調(diào)整數(shù)據(jù)庫(kù)的模式和內(nèi)模式,比如:增加新的數(shù)據(jù)項(xiàng)、改變數(shù)據(jù)項(xiàng)的類型、改變數(shù)據(jù)庫(kù)的容量、增加或刪除索引、修改完整性約束條件。重構(gòu)造的實(shí)質(zhì)是修改數(shù)據(jù)庫(kù)的部分模式和內(nèi)模式。

    8 總結(jié)

    本文主要總結(jié)了數(shù)據(jù)庫(kù)設(shè)計(jì)的階段步驟及關(guān)系型數(shù)據(jù)庫(kù)的部分重要概念,重點(diǎn)總結(jié)論述了概念設(shè)計(jì)和邏輯設(shè)計(jì)兩大核心階段,著重強(qiáng)調(diào)了 E-R 模型的構(gòu)造,除此之外還補(bǔ)充了關(guān)系模式的規(guī)范化及如何求解關(guān)系模式的候選碼等重要知識(shí)點(diǎn)。

    通過本文,首先需要做到的是明確數(shù)據(jù)庫(kù)中相關(guān)術(shù)語或概念的具體含義,比如實(shí)體型、關(guān)系、關(guān)系模式等;其次需要掌握相關(guān)的設(shè)計(jì)策略與理論,比如自底向上分析、規(guī)范化理論等;最終,需要通過不斷的實(shí)操練習(xí),把理論知識(shí)運(yùn)用的實(shí)際應(yīng)用中。


    巨人的肩膀

    1. 雷景生, 葉文珺, 樓越煥. 數(shù)據(jù)庫(kù)原理及應(yīng)用[M]. 北京:清華大學(xué)出版社, 2015.

    2. 張永, 顧國(guó)慶. 關(guān)系模式中候選碼的求解[J], 上海電力大學(xué)學(xué)報(bào), 2002.3, 18(1): 38-40


    作者信息

    大家好,我是 CoderGeshu,一個(gè)熱愛生活的程序員,如果這篇文章對(duì)您有所幫助,別忘了點(diǎn)贊收藏哦 👍👍👍

    另外,歡迎大家點(diǎn)擊關(guān)注👉CoderGeshu,可以第一時(shí)間獲取最新分享喲~

    總結(jié)

    以上是生活随笔為你收集整理的为了彻底搞清楚数据库 E-R 模型设计,我肝了这篇万字长文的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。