WordPress一鍵安裝安全東莞百度seo推廣公司
文章目錄
- 前言
- 1.范式
- 1.1.第一范式
- 1.1.1 定義
- 1.1.2.例子
- 1.2.第二范式
- 1.2.1 定義
- 1.2.2 例子
- 1.2.3.不滿足第二范式可能會(huì)出現(xiàn)的問題
- 1.3.第三范式
- 1.3.1 定義
- 2.3.2 示例
- 2. 設(shè)計(jì)過程
- 3. 實(shí)體-關(guān)系圖
- 3.1 E-R圖的基本組成
- 3.2 關(guān)系的類型
- 3.2.1 一對(duì)一關(guān)系(1:1)
- 3.2.2 ?對(duì)多關(guān)系(1:N)
- 3.2.3 多對(duì)多關(guān)系(M:N)
前言
上一篇博客中,我們學(xué)習(xí)增刪查改等基本操作,在工作中,每種表之間都是存在關(guān)聯(lián)的,而不是相互獨(dú)立的,因此這一篇中,我們來學(xué)習(xí)數(shù)據(jù)庫設(shè)計(jì)和聯(lián)合查詢
1.范式
數(shù)據(jù)庫的范式是?組規(guī)則。在設(shè)計(jì)關(guān)系數(shù)據(jù)庫時(shí),遵從不同的規(guī)范要求,設(shè)計(jì)出合理的關(guān)系型數(shù)
據(jù)庫,這些不同的規(guī)范要求被稱為不同的范式。
關(guān)系數(shù)據(jù)庫有六種范式:第?范式(1NF)、第?范式(2NF)、第三范式(3NF)、巴斯-科德
范式(BCNF)、第四范式(4NF)和第五范式(5NF,又稱完美范式),越高的范式數(shù)據(jù)庫冗余越
小。然而,普遍認(rèn)為范式越高雖然對(duì)數(shù)據(jù)關(guān)系有更好的約束性,但也可能導(dǎo)致數(shù)據(jù)庫IO更繁忙,因此
在實(shí)際應(yīng)用中,數(shù)據(jù)庫設(shè)計(jì)通常只需滿足第三范式即可。
1.1.第一范式
1.1.1 定義
? 數(shù)據(jù)庫表的每?列都是不可分割的原子數(shù)據(jù)項(xiàng),而不能是集合,數(shù)組,對(duì)象等非原子數(shù)據(jù)。
? 在關(guān)系型數(shù)據(jù)庫的設(shè)計(jì)中,滿足第一范式是對(duì)關(guān)系模式的基本要求。不滿足第一范式的數(shù)據(jù)庫就不
能被稱為關(guān)系數(shù)據(jù)庫,
1.1.2.例子
定義一個(gè)學(xué)生表,包括學(xué)生信息和學(xué)校信息。
但是我們發(fā)現(xiàn)上面的學(xué)校,學(xué)校也是一個(gè)對(duì)象,他也可以繼續(xù)再分,因此這樣分是不滿足第一范式的。
因此在定義表的時(shí)候,對(duì)照到數(shù)據(jù)中的數(shù)據(jù)類型,每一個(gè)字段都可以用一個(gè)數(shù)據(jù)類型表示,那么當(dāng)前的數(shù)據(jù)類型就滿足第一范式
1.2.第二范式
1.2.1 定義
在滿足第一范式的基礎(chǔ)上,不存在非關(guān)鍵字段對(duì)任意候選鍵的部分函數(shù)依賴。存在于表中定義了復(fù)合主鍵的情況下。
候選鍵:可以唯?標(biāo)識(shí)一行數(shù)據(jù)的列或列的組合,可以從候選鍵中選?個(gè)或多個(gè)當(dāng)做表的主鍵
1.2.2 例子
學(xué)生可以選修課程,課程有對(duì)應(yīng)的學(xué)分,學(xué)生考試后每門課程會(huì)產(chǎn)生相應(yīng)的成績(jī)。
首先先舉一個(gè)反例,那就是所有的內(nèi)容都寫在一個(gè)表中。
- 這張表中使用學(xué)號(hào)+課程名定義復(fù)合主鍵來唯一標(biāo)識(shí)一個(gè)學(xué)生某門課程的成績(jī),這也是這張表的主要作用
- 學(xué)生是通過學(xué)號(hào)來確定的,學(xué)生的姓名、年齡和性別和課程沒有關(guān)系,即 學(xué)生的信息只依賴學(xué)號(hào),不依賴課程名;學(xué)分是通過課程來確定的,課程的學(xué)分與學(xué)生沒有關(guān)系,即學(xué)分只依賴課程名,不依賴學(xué)生
- 對(duì)于使用復(fù)合主鍵的表,如果??數(shù)據(jù)中的有些列只與復(fù)合主鍵中的?個(gè)或其中幾個(gè)列有關(guān)系,那么就說他存在部分函數(shù)依賴,也就不滿足第?范式。
1.2.3.不滿足第二范式可能會(huì)出現(xiàn)的問題
- 數(shù)據(jù)冗余
學(xué)生的姓名、年齡、性別和課程的學(xué)分在每行記錄中重復(fù)出現(xiàn),造成了大量的數(shù)據(jù)冗余。 - 更新異常
如果要調(diào)整MySQL的學(xué)分,那么就需要更新表中所有關(guān)于MySQL的記錄,?旦執(zhí)行中斷導(dǎo)致某些記錄更新成功,某些數(shù)據(jù)更新失敗,就會(huì)造成表中同?門課程出現(xiàn)不同學(xué)分的情況,出現(xiàn)數(shù)據(jù)不?致問題。 - 插?異常
?前這樣的設(shè)計(jì),成績(jī)與每?門課和學(xué)生都有對(duì)應(yīng)關(guān)系,也就是說只有學(xué)?參加選修課程考試取得了成績(jī)才能生成?條記錄。當(dāng)有一門新課還沒有學(xué)生參加考試取得成績(jī)之前,那么這門新課在數(shù)據(jù)庫中是不存在的,因?yàn)槌煽?jī)?yōu)榭諘r(shí)記錄沒有意義。 - 刪除異常
把畢業(yè)學(xué)生的考試數(shù)據(jù)全都刪除,此時(shí)課程和學(xué)分的信息也會(huì)被刪除掉,有可能導(dǎo)致?段時(shí)間內(nèi),數(shù)據(jù)庫里沒有某門課程和學(xué)分的信息
1.3.第三范式
1.3.1 定義
在滿足第二范式的基礎(chǔ)上,不存在非關(guān)鍵字段,對(duì)任?候選鍵的傳遞依賴。
2.3.2 示例
要求學(xué)生表中記錄學(xué)生所屬的學(xué)院,在滿足第二范式的基礎(chǔ)上對(duì)學(xué)生表做出修改。
我們先舉一個(gè)反例
- 因?yàn)槭且枋鰧W(xué)生信息,并且在表中定義了Id為主鍵,Id可以明確的標(biāo)識(shí)每條學(xué)生信息
- 在這個(gè)表結(jié)構(gòu)中,可以看出學(xué)生的學(xué)號(hào)、姓名、年齡、性別與主鍵Id強(qiáng)相關(guān);學(xué)院電話、學(xué)院地址與學(xué)院強(qiáng)相關(guān);在?個(gè)表中出現(xiàn)了兩個(gè)強(qiáng)相關(guān)的關(guān)系,而且這兩個(gè)強(qiáng)相關(guān)關(guān)系又存在傳遞現(xiàn)象,即通過學(xué)生Id可以找到學(xué)生記錄,學(xué)?記錄中包含學(xué)院名,每個(gè)學(xué)院又有自己的電話和地址。
- 這種傳遞現(xiàn)象稱為傳遞依賴,所以當(dāng)前的表不滿足第三范式
按照下面圖寫的,就符合第三范式
2. 設(shè)計(jì)過程
- 從現(xiàn)實(shí)業(yè)務(wù)中抽象得到概念類
概念類是從現(xiàn)實(shí)世界中抽象出來的,在需求分析階段就需要確定下來
類對(duì)應(yīng)了數(shù)據(jù)庫設(shè)計(jì)中的實(shí)體,實(shí)體對(duì)應(yīng)了數(shù)據(jù)庫中的表
類中的屬性對(duì)應(yīng)實(shí)體中的屬性,實(shí)體的屬性對(duì)應(yīng)了表中的列 - 確定實(shí)體與實(shí)體之間的關(guān)系,并畫出E-R畫,方便項(xiàng)目參與?員理解與溝通
- 根據(jù)E-R圖完成SQL語句的編號(hào)并創(chuàng)建數(shù)據(jù)庫
3. 實(shí)體-關(guān)系圖
實(shí)體-關(guān)系圖(Entity-Relationship Diagram)簡(jiǎn)稱E-R圖,也稱作實(shí)體聯(lián)系模型、實(shí)體關(guān)系模型,是?種用于描述數(shù)據(jù)模型的概念圖,主要用于數(shù)據(jù)庫設(shè)計(jì)階段。
3.1 E-R圖的基本組成
E-R圖包含了以下三種基本成分:
? 實(shí)體:即數(shù)據(jù)對(duì)象,用矩形框表,比如用戶、學(xué)生、班級(jí)等。
? 屬性:實(shí)體的特性,用橢圓形或圓角矩形表示,如學(xué)生的姓名、年齡等。
? 關(guān)系:實(shí)體之間的聯(lián)系,用菱形框表示,并標(biāo)明關(guān)系的類型,并用直線將相關(guān)實(shí)體與關(guān)系連接起來。
3.2 關(guān)系的類型
3.2.1 一對(duì)一關(guān)系(1:1)
- 一個(gè)用戶實(shí)體包含的屬性有:用戶昵稱,真實(shí)姓名,手機(jī)號(hào),郵箱地址,性別,學(xué)校
- 一個(gè)賬戶實(shí)體包含的屬性有:登錄用戶名,密碼
- 用戶實(shí)體與賬戶實(shí)體是一對(duì)一的關(guān)系,用E-R圖表如下:
*
3.2.2 ?對(duì)多關(guān)系(1:N)
? ?個(gè)學(xué)生實(shí)體包含的屬性有:真實(shí)姓名,學(xué)號(hào),年齡,性別,入學(xué)時(shí)間
? ?個(gè)班級(jí)實(shí)體包含的屬性有:班級(jí)名,學(xué)生人數(shù)
? ?個(gè)班級(jí)中有多個(gè)學(xué)生,所以班級(jí)實(shí)體與學(xué)生實(shí)體是一對(duì)多的關(guān)系,反過來說學(xué)生實(shí)體與班級(jí)實(shí)體是多對(duì)一,用E-R圖表示如下:
3.2.3 多對(duì)多關(guān)系(M:N)
- ?個(gè)學(xué)生實(shí)體包含的屬性有:真實(shí)姓名,學(xué)號(hào),年齡,性別、入學(xué)時(shí)間
- ?個(gè)課程實(shí)體包含的屬性有:課程名
- ?個(gè)學(xué)生可以選修改多門課程,一門課程也可以被多名學(xué)生選修改,所以學(xué)生與課程之間是多對(duì)多關(guān)系,用E-R圖表示如下:
- 對(duì)于多對(duì)多關(guān)系,可以使用中間表進(jìn)行記錄,比如?個(gè)學(xué)生參加了某?門課程的考試得到了相應(yīng)的成績(jī),用E-R圖表示如下: