發(fā)布于:2021-01-27 10:03:09
0
3038
0
什么是標(biāo)準(zhǔn)化?
規(guī)范化是一種數(shù)據(jù)庫(kù)設(shè)計(jì)技術(shù),可減少數(shù)據(jù)冗余,消除插入、更新和刪除異常等不需要的特征。規(guī)范化規(guī)則將較大的表劃分為較小的表,并使用關(guān)系將它們鏈接起來。SQL規(guī)范化的目的是消除冗余(重復(fù))數(shù)據(jù),保證數(shù)據(jù)的邏輯存儲(chǔ)。
關(guān)系模型的發(fā)明者Edgar Codd通過引入第一范式提出了數(shù)據(jù)規(guī)范化理論,并繼續(xù)用第二范式和第三范式擴(kuò)展了該理論。后來,他加入了雷蒙德F博伊斯,發(fā)展了博伊斯Codd范式理論。
數(shù)據(jù)庫(kù)范式
這里是一個(gè)范式列表
1NF(第一范式)
2NF(第二范式)
3NF(第三范式)
BCNF(Boyce Codd范式)
4NF(第四范式)
5NF(第五范式)
6NF(第六范式)
sqlserver中的數(shù)據(jù)規(guī)范化理論仍在進(jìn)一步發(fā)展中。例如,甚至對(duì)6th范式也有討論,但在大多數(shù)實(shí)際應(yīng)用中,3rd范式的歸一化效果最好。SQL規(guī)范化理論的發(fā)展如下所示:
數(shù)據(jù)庫(kù)規(guī)范化示例
可以通過案例研究很容易理解。假設(shè),一個(gè)視頻庫(kù)維護(hù)著一個(gè)出租電影的數(shù)據(jù)庫(kù)。在數(shù)據(jù)庫(kù)中沒有任何規(guī)范化,所有信息都存儲(chǔ)在一個(gè)表中,如下所示。讓我們了解數(shù)據(jù)庫(kù)中的表規(guī)范化示例:
這里您可以看到列有多個(gè)值。現(xiàn)在讓我們進(jìn)入第一范式:
1NF(第一范式)規(guī)則
每個(gè)表單元格應(yīng)包含一個(gè)值。
每個(gè)記錄都必須是唯一的。
1NF示例
在繼續(xù)之前,讓我們先了解幾件事。
什么是鑰匙?
key是用于唯一標(biāo)識(shí)表中記錄的值。鍵可以是單列,也可以是多列的組合
注:表中不用于唯一標(biāo)識(shí)記錄的列稱為非鍵列。
什么是主鍵?
primary是用于唯一標(biāo)識(shí)數(shù)據(jù)庫(kù)記錄的單列值。
它具有以下屬性
主鍵不能為NULL。
主鍵值必須是唯一的。
主鍵值應(yīng)很少更改。
插入新記錄時(shí)必須為主鍵指定值。
什么是復(fù)合鍵?
復(fù)合鍵是由多列組成的主鍵,用于唯一標(biāo)識(shí)記錄。
在我們的數(shù)據(jù)庫(kù)里,我們有兩個(gè)叫羅伯特·菲爾的人,但他們住在不同的地方。
因此,我們需要全名和地址來唯一地標(biāo)識(shí)記錄。這是一個(gè)復(fù)合鍵。
讓我們進(jìn)入第二范式2NF
2NF(第二范式)規(guī)則
規(guī)則1-在1NF中。
規(guī)則2-單列主鍵。
很明顯,除非我們對(duì)上面的表進(jìn)行分區(qū),否則我們無法將我們的簡(jiǎn)單數(shù)據(jù)庫(kù)變成2nd規(guī)范化形式。
我們把1NF表分為兩個(gè)表,即。表1和表2。表1包含成員信息。表2包含了關(guān)于電影租賃的信息。
我們引入了一個(gè)名為Membershipu id的新列,它是表1的主鍵。在表1中,可以使用成員身份id唯一地標(biāo)識(shí)記錄。
數(shù)據(jù)庫(kù)-外鍵
在表2中,Membership_ID是外鍵。
外鍵引用另一個(gè)表的主鍵!它有助于連接您的表。
外鍵可以具有與其主鍵不同的名稱。
它確保一個(gè)表中的行在另一表中具有對(duì)應(yīng)的行。
與主鍵不同,它們不必唯一。大多數(shù)時(shí)候他們不是。
即使主鍵不能,外鍵也可以為空 。
為什么需要外鍵?
假設(shè),新手在表B中插入一條記錄,例如:
只能將存在于父表中唯一鍵中的值插入到外鍵中。這有助于參照完整性。
通過將表2中的成員身份id聲明為表1中成員身份id的外鍵,可以克服上述問題。
現(xiàn)在,如果有人試圖在父表中不存在的成員身份id字段中插入一個(gè)值,將顯示一個(gè)錯(cuò)誤!
什么是傳遞函數(shù)依賴關(guān)系?
可傳遞函數(shù)依賴關(guān)系是指在更改非鍵列時(shí),可能會(huì)導(dǎo)致其他任何非鍵列發(fā)生更改。
考慮一下表1。更改非鍵列的全名可能會(huì)更改稱呼語(yǔ)。
讓我們進(jìn)入3NF
3NF(第三范式)規(guī)則
規(guī)則1-在2NF中
規(guī)則2-沒有傳遞函數(shù)依賴關(guān)系
要將2NF表移到3NF,我們需要再次劃分表。
3NF示例
下面是SQL數(shù)據(jù)庫(kù)中的3NF示例:
我們?cè)俅蝿澐至吮?,并?chuàng)建了一個(gè)存儲(chǔ)稱呼語(yǔ)的新表。
沒有可傳遞的函數(shù)依賴關(guān)系,因此我們的表在3NF中。
在表3中稱呼語(yǔ)ID是主鍵,在表1中,稱呼ID對(duì)于表3中的主鍵是陌生的。
現(xiàn)在我們的小例子處于一個(gè)不能進(jìn)一步分解以獲得更高規(guī)范化形式的級(jí)別。事實(shí)上,它已經(jīng)以更高的規(guī)范化形式出現(xiàn)了。在復(fù)雜的數(shù)據(jù)庫(kù)中,通常需要為進(jìn)入下一級(jí)規(guī)范化數(shù)據(jù)而分別努力。
BCNF(Boyce Codd范式)
即使一個(gè)數(shù)據(jù)庫(kù)是3rd正態(tài)形式,如果它有多個(gè)候選鍵,仍然會(huì)導(dǎo)致異常。
有時(shí)BCNF也被稱為3.5范式。
4NF(第四范式)規(guī)則
如果沒有數(shù)據(jù)庫(kù)表實(shí)例包含描述相關(guān)實(shí)體的兩個(gè)或多個(gè)獨(dú)立的多值數(shù)據(jù),則它是4th范式。
5NF(第五范式)規(guī)則
一個(gè)表只有在4NF下才是5th范式,并且不能分解成任何數(shù)量的較小的表而不丟失數(shù)據(jù)。
6NF(第六范式)規(guī)則
提出的第六范式(6NF)尚未標(biāo)準(zhǔn)化,但已有一段時(shí)間被數(shù)據(jù)庫(kù)專家討論。希望在不久的將來,我們能對(duì)6th范式有一個(gè)明確的標(biāo)準(zhǔn)化定義。
這就是SQL規(guī)范化的全部?jī)?nèi)容?。?!
摘要
數(shù)據(jù)庫(kù)設(shè)計(jì)對(duì)于滿足企業(yè)系統(tǒng)數(shù)據(jù)需求的數(shù)據(jù)庫(kù)管理系統(tǒng)的成功實(shí)施至關(guān)重要。
DBMS中的規(guī)范化過程有助于產(chǎn)生經(jīng)濟(jì)高效且具有更好安全模型的數(shù)據(jù)庫(kù)系統(tǒng)。
功能依賴性是一個(gè)非常重要的問題規(guī)范化數(shù)據(jù)處理的一個(gè)組成部分。
大多數(shù)數(shù)據(jù)庫(kù)系統(tǒng)都是規(guī)范化的數(shù)據(jù)庫(kù),直到第三種規(guī)范化形式。
主鍵唯一標(biāo)識(shí)的是表中的記錄,不能為空。
外鍵有助于連接表并引用主鍵 。
作者介紹
熱門博客推薦