官术网_书友最值得收藏!

1.4 數(shù)據(jù)庫設(shè)計

1.4.1 關(guān)系數(shù)據(jù)庫設(shè)計原則

SQL Server是典型的關(guān)系數(shù)據(jù)庫管理系統(tǒng)。關(guān)系數(shù)據(jù)庫的設(shè)計是為了生成一組關(guān)系模式,使人們既不需存儲不必要的冗余信息,又方便獲取信息。數(shù)據(jù)庫設(shè)計的方法是首先建立 E-R 模型,然后將E-R模型轉(zhuǎn)換為關(guān)系模型,最后對關(guān)系模型進(jìn)行規(guī)范化處理。

本節(jié)以一個簡化的銷售數(shù)據(jù)庫為實例,講解了數(shù)據(jù)庫的設(shè)計和規(guī)范化過程,目的是使讀者了解這一設(shè)計過程。讀者可以在學(xué)習(xí)之后再對該數(shù)據(jù)庫進(jìn)行適當(dāng)?shù)臄U(kuò)充和完善。

1.4.2 關(guān)系規(guī)范化

1.建立E-R模型

E-R(Entity-Relationship,實體-聯(lián)系)模型是用E-R圖來表示的,它是企業(yè)運(yùn)營方式的信息化描述。企業(yè)規(guī)則的變化直接影響著E-R圖的結(jié)構(gòu)和實體間的聯(lián)系。E-R圖直觀易懂,是系統(tǒng)開發(fā)人員和企業(yè)客戶之間很好的溝通媒介。E-R圖有3個要素。

(1)實體。實體指客觀存在并可相互區(qū)分的事物,可以是人、物,也可以是某些概念或事物與事物之間的聯(lián)系,例如員工、商品、銷售等實體。在E-R圖中使用矩形框表示,框內(nèi)寫上實體名。

(2)屬性。屬性指實體具有的特征。例如,員工實體的屬性有編號、姓名、性別、部門、電話、地址等;銷售實體的屬性有銷售編號、商品編號、數(shù)量、售出時間等。在 E-R 圖中使用橢圓框表示,框內(nèi)寫上屬性名,并用無向邊與其實體相連。

(3)聯(lián)系。聯(lián)系指實體之間的相互關(guān)聯(lián),實體間的聯(lián)系可以分為一對一、一對多、多對多3種類型。例如,員工實體和銷售實體之間的聯(lián)系是“員工進(jìn)貨”,這是一對多的聯(lián)系,即一個員工可以有多次銷售記錄,一次銷售記錄只可以由一個員工完成。聯(lián)系在 E-R 圖中使用用菱形框表示,并以適當(dāng)?shù)暮x命名,名字寫在菱形框中,用無向連線將參加聯(lián)系的實體矩形框分別與菱形框相連,并在連線上標(biāo)明聯(lián)系的類型,即1-1、1-N或N-M。

銷售數(shù)據(jù)庫的E-R圖表示如圖1.1所示。

圖1.1 銷售數(shù)據(jù)庫的E-R圖

2.E-R圖轉(zhuǎn)換為關(guān)系模型

在關(guān)系數(shù)據(jù)庫中,關(guān)系模型就是用二維表格來表示實體及實體之間聯(lián)系的模型。將 E-R 圖轉(zhuǎn)換為關(guān)系模型的方法是:將一個實體或一個聯(lián)系轉(zhuǎn)換為一個表,實體的屬性以及聯(lián)系的屬性就是表中的列,實體標(biāo)識符就是表的主關(guān)鍵字。

將圖1.1所示的銷售數(shù)據(jù)庫的E-R圖轉(zhuǎn)換為關(guān)系模型,則有以下3個表。

(1)用Employees表表示員工實體,該表有編號、姓名、性別、部門、電話、地址等列。編號是該表的主鍵,能唯一地標(biāo)識表中的每一行。

(2)用 Goods 表表示員工進(jìn)貨聯(lián)系,該表有商品編號、商品名稱、生產(chǎn)廠商、進(jìn)貨價、零售價、數(shù)量、進(jìn)貨時間、進(jìn)貨員工編號等列。商品編號是該表的主鍵,能唯一地標(biāo)識表中的每一行。

(3)用Sell表表示商品銷售表實體,該表有銷售編號、商品編號、商品名稱、生產(chǎn)廠商、數(shù)量、售出時間、售貨員工編號等列。銷售編號是該表的主鍵,能唯一地標(biāo)識表中的每一行。

3.關(guān)系模型的規(guī)范化

規(guī)范化的目的是使表的結(jié)構(gòu)更加合理,消除存儲異常,減少數(shù)據(jù)冗余,便于插入、刪除和更新數(shù)據(jù),提高存儲效率。關(guān)系數(shù)據(jù)庫中可以使用3個規(guī)范化模式(范式)來對關(guān)系模型進(jìn)行規(guī)范化處理。3個范式如表1.1所示。

表1.1 規(guī)范化模式

下面對銷售數(shù)據(jù)庫關(guān)系模型中建立的3個表進(jìn)行規(guī)范化處理。

(1)是否滿足第一范式。Employees 表中的所有屬性都是不可再分割的數(shù)據(jù)項。例如,不能將員工的編號和姓名兩個屬性放在同一列中顯示,也不能將編號分割為“編”和“號”兩個列。Goods表和Sell表也都滿足第一范式的要求。

(2)在滿足第一范式的前提下,是否滿足第二范式。在Employees表中,每一行只表示一個員工的信息,通過主鍵編號可以唯一地確定一個員工的姓名、性別、部門、電話或地址等非主屬性,即Employees表的所有非主屬性都完全函數(shù)依賴于主鍵,所以Employees表滿足第二范式的要求。同樣分析Goods表和Sell表,也都滿足第二范式的要求。

注意,銷售數(shù)據(jù)庫中各個表的主鍵都只由一個屬性構(gòu)成,分析起來比較簡單。如果一個表的主鍵由兩個屬性構(gòu)成,則要判斷每一個非主屬性是完全函數(shù)依賴還是部分依賴于主鍵,如果是部分依賴,就要刪除產(chǎn)生部分依賴的非主屬性。例如,假設(shè)學(xué)生成績表的屬性為課程編號、學(xué)號、成績、考試時間,其中主鍵是“課程編號,學(xué)號”,而考試時間只依賴于主鍵中的“課程編號”這一部分,所以考試時間屬性是部分依賴于主鍵,應(yīng)該在此表中刪除。

(3)在滿足第二范式的前提下,是否滿足第三范式。在Sell表中,商品編號依賴于銷售編號,而商品名稱則依賴于商品編號,所以商品名稱傳遞依賴于銷售編號。Sell表不滿足第三范式的要求,應(yīng)該刪除商品名稱屬性,消除傳遞依賴關(guān)系。同樣分析Employees表和Goods表,也都滿足第三范式的要求。

主站蜘蛛池模板: 西盟| 内黄县| 雷州市| 云南省| 延津县| 三原县| 丰城市| 大城县| 抚州市| 宝坻区| 正蓝旗| 潍坊市| 赤水市| 额济纳旗| 佛坪县| 武川县| 台州市| 广东省| 项城市| 达州市| 渭南市| 建水县| 台湾省| 栖霞市| 新化县| 嵊泗县| 报价| 疏附县| 田林县| 长葛市| 明水县| 克山县| 永靖县| 佳木斯市| 福海县| 民乐县| 岑溪市| 霍山县| 康乐县| 四平市| 桂平市|