7

這個問題顯然是一個家庭作業問題。我無法理解我的教授,也不知道他在選舉期間說了些什麼。我需要一步一步的指示,將下表首先歸一化爲1NF,然後是2NF,然後是3NF。將表格歸一化爲第三範式

enter image description here

我感謝所有幫助和指導。

+3

[1NF](http://en.wikipedia.org/wiki/First_normal_form),[2NF](http://en.wikipedia.org/wiki/Second_normal_form),[3NF](http://en.wikipedia.org/wiki/Third_normal_form) – Kermit 2013-03-07 15:27:34

回答

18

好吧,我希望我能記得所有的人都正確,讓我們開始...

規則

爲了使它們非常短(而不是非常精確,只是給你的就是它的第一個想法全部關於):

  • NF1:表格單元格不得包含多個值。
  • NF2:NF1以及所有非主鍵列必須依賴於所有主鍵列。
  • NF3:NF2加上非主鍵列可能不相互依賴。

說明書

  • NF1:查找包含一個以上的值表單元格,把那些到單獨的列。
  • NF2:根據少於所有的主鍵列來查找列,並將它們放入另一個只包含真正依賴的主鍵列的表中。
  • NF3:除取決於主鍵之外,還查找依賴於其他非主鍵列的列。將依賴列放入另一個表中。

實例

NF1

列 「state」 具有像 「WA,華盛頓」 的值。 NF1被違反,因爲這是兩個值,縮寫和名稱。

解決方案:要完成NF1,請創建兩列STATE_ABBREVIATIONSTATE_NAME

NF2

想象一下,你已經有了這些4列的表格,表達車型的國際名稱:

  • COUNTRY_ID(數字,主鍵)
  • CAR_MODEL_ID(數字,主鍵)
  • COUNTRY_NAME(VARCHAR)
  • CAR_MODEL_NAME(VARCHAR)

該表可以有這兩個數據行:

  • 行1:COUNTRY_ID = 1,CAR_MODEL_ID = 5,COUNTRY_NAME = USA,CAR_MODEL_NAME =福克斯
  • 第2列:COUNTRY_ID = 2,CAR_MODEL_ID = 5,COUNTRY_NAME =德國,CAR_MODEL_NAME =馬球

,上面寫着模式「福克斯」被稱爲美國「福克斯」,但同樣的車型在德國被稱爲「波羅」(不記得是否這實際上真正)。

NF2被違反,因爲國名不取決於車型ID和國家ID,而只取決於國家ID。

解決方案:要履行NF2,請將COUNTRY_NAME轉換爲單獨的表「COUNTRY」,其中列COUNTRY_ID(主鍵)和COUNTRY_NAME。要獲得包含國家/地區名稱的結果集,您需要使用JOIN連接兩個表。

NF3

說你有這些列的表格,表達國家的氣候條件:

  • STATE_ID(VARCHAR,主鍵)
  • CLIME_ID(外鍵,ID的氣候帶,如「沙漠」,「熱帶雨林」等)
  • IS_MOSTLY_DRY(布爾)

NF3被違反,因爲IS_MOSTLY_DRY只取決於CLIME_ID(至少我們假設),但不取決於STATE_ID(主鍵)。

解決方法:爲了實現NF3,將列MOSTLY_DRY放入氣候區表中。


以下是關於此次演習給予實際的表的一些想法:

我申請上述NF規則,而不去挑戰主鍵列。但他們實際上沒有道理,我們稍後會看到。

  • NF1沒有違反,每個單元格只有一個值。
  • NF2違反了EMP_NM和所有電話號碼,因爲所有這些列都不依賴於完整的主鍵。它們都依賴於EMP_ID(PK),但不依賴於DEPT_CD(PK)。我認爲當員工移動到另一個部門時,電話號碼保持不變。
  • NF2也被DEPT_NM違反,因爲DEPT_NM不依賴於完整的主鍵。它取決於DEPT_CD,但不取決於EMP_ID。
  • NF2也受到所有技能列的侵犯,因爲它們不是部門 - 但僅限員工特定。
  • NF3違反了SKILL_NM,因爲技能名稱僅取決於技能代碼,它甚至不是複合主鍵的一部分。
  • SKILL_YRS違反NF3,因爲它取決於主鍵成員(EMP_ID)和非主鍵成員(SKILL_CD)。所以它部分依賴於非主鍵屬性。

所以,如果您刪除所有違反NF2或NF3的列,只剩下主鍵(EMP_ID和DEPT_CD)。剩下的部分違反了給定的業務規則:這種結構將允許員工同時在多個部門工作。

讓我們從遠處查看它。您的數據模型是關於員工,部門,技能以及這些實體之間的關係。如果你規範化,你最終會得到一張僱員表(包含DEPT_CD作爲外鍵),一個用於部門,一個用於技能,另一個用於員工和技能之間的關係,持有「技能年「爲EMP_ID和SKILL_CD的每個元組(我的老師會稱後者爲」關聯實體「)。

+0

好的,我看到了編輯Walter Mitty的觀點。當一列依賴於主鍵列和其他列時,NF3被違反是正確的。但是,如果一列根本不依賴主鍵,NF3也會受到侵犯,不是嗎?所以我建議NF3:「根據任何非主鍵列查找列」。你同意嗎? – user1992821 2013-03-08 16:34:01

+0

非常詳細,我覺得非常有用!謝謝 – 2013-07-30 14:28:37

1

另一個過於簡單的答案即將到來。

在3NF關係表中,每個非鍵值都由鍵,整個鍵以及除鍵外的所有值來決定(所以幫助我Codd;))。

1NF:關鍵。這意味着如果您指定鍵值和命名列,那麼在行和列的交點處最多隻有一個值。多值,就像用逗號分隔的一系列值一樣,是不允許的,因爲只有一個鍵和一個列名才能直接獲取值。

2NF:整個鍵。如果不是密鑰的一部分的列由密鑰列的正確子集確定,則2NF被違反。

3NF:沒什麼,只是關鍵。如果一列由某些非關鍵字列確定,那麼3NF被違反。

2

看着你的表中的前兩行,
看着這列被標記爲「PK」,在表中,
並假設「PK」代表「主鍵」,
看着值是出現在這兩行中的那兩列,
我會建議你的教授從數據庫教學中走出來,不要回來,直到他得到本人正確的主題教育。

這個練習不能被認真對待,因爲問題陳述本身包含無可救藥的矛盾信息。

(注意,作爲一種結果,根本不是一個「好」或「右」的回答這個問題的任何這樣的事情!)只有

0

3NF滿足,如果它是在第二範式和沒有任何傳遞依賴性,所有非關鍵屬性都應該依賴於主鍵。

傳遞依賴: R =(A,B,C)。 A-> B AND B-> C THEN A-> C