2016-02-01 43 views
0

我經歷了很多網站,以瞭解規範化,但它似乎我必須背誦規則。一週或更長時間後,我忘記了它,似乎每件事對我來說都是新事物。如何輕鬆瞭解規範化 - 數據庫

有沒有更好的方法來理解前三種正常形式。我需要一些簡單實用的例子來理解並始終記住它。

現在我知道,

1st Normal Form - Remove Repeating groups (should be Atomic). 
2nd Normal Form - Remove partial Dependency. 
3rd Normal Form - Remove transitive Dependency. 
+1

對我來說,規範化是「存儲數據一次,如果需要訪問它,就使用連接」。 –

+0

是的,但不同的正常形式呢。我正努力回答客戶提出的問題。(您在數據庫中實現的最大標準格式是什麼)。 – StackUser

+0

你需要逐一看看你的桌子。恕我直言第四和第五級別表格很少被客戶需要,所以我會尋找違反第二或第三範式的表格。如果發現任何問題,可能是一個很好的機會來改善你的數據庫結構。[這是一個相當簡單的指南](http://www.bkent.net/Doc/simple5.htm) – mikeyq6

回答

0

這是一個很好的解釋on Dream in Code

爲例子,嘗試記憶中最常見的違規:

  1. 姓氏和名字中單場
  2. 隨着訂單該項目
  3. 存儲的存儲物品的名稱和價格地址與客戶記錄
+0

謝謝尼爾,你分享的文件看起來很簡單,我理解。給我舉一個例子來說明你的第三點(存儲客戶記錄的地址)。 – StackUser

+0

這個想法將以一種方式存儲數據,即表中的所有數據都以相同的「速率」更改。換句話說,我可以在不更改姓名和生日的情況下更改我的地址,因此我將這些信息分解成單獨的表格。 –

0

第一個正式表格應該清楚。 您有原子值並在您的表中創建冗餘。這意味着:您當前的主鍵不再是唯一的。

2NF意味着你應該消除冗餘數據。屬性需要與您的主鍵功能相關,而不是其他非素數屬性。如果它們不依賴於你的主鍵,那麼你的表不在第二個NF中。

3NF有點難度。我剛剛讀了關於它的另一個定義。所以通常你有:你的屬性不能與你的主鍵傳遞相關。 轉換意味着你的屬性不應該通過其他屬性引用你的主鍵。讓我們來看一個例子:

| CourseNr | Course Name   | ProfNr| ProfName | 
--------------------------------------------------------- 
10   | Analysis   | 90 | A   | 
12   | Math    | 90 | A   | 
16   | Databases   | 65 | D   | 
17   | Literature   | 68 | F   | 
--------------------------------------------------------- 

但現在你必須從ProfName到CourseName傳遞依賴,因爲你的ProfName取決於「過」 ProfNr到CourseNr。你的教授的名字不是你的桌子所必需的,你有冗餘。現在您可以將其提取到:

| ProfNr | ProfName | 
--------------------- 
| 90  | A  | 
| 65  | D  | 
| 68  | F  | 
--------------------- 

現在您可以刪除第一個表中的ProfName行。您的冗餘已被消除,您可以通過ProfNr鏈接您的教授。

而且你的第一個表看起來像現在這樣:

| CourseNr | Course Name   | ProfNr | 
---------------------------------------------- 
10   | Analysis   | 90  | 
12   | Math    | 90  | 
16   | Databases   | 65  | 
17   | Literature   | 68  | 
---------------------------------------------- 

對我說:我一直一個簡單的例子在我的腦海第三NF,因爲它是我的NF我有問題。

+0

謝謝祖瑪拉塔,但它很難理解像傳遞,部分和完全依賴的技術術語 – StackUser

+0

嗯,我明白了。對於傳遞依賴關係:你可以看到這就像一個關係。爲了防止傳遞這個詞,使用關係式:ProfName本身並不與您的CourseNr相關,但您與它有關係,因爲ProfName與ProfNr相關,ProfNr則與CourseNr相關。所以你ProfName與你的CourseNr有關,「超過」這個ProfNr。而這種關係是不存在的過渡。這對你有幫助嗎? – Zumarta