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