MySQL 5第三次學科練習

2013-05-10_151538

這是第三次ㄚ琪自我練習的結果,測試50題,答對42題得84分,錯8題扣8分,總計得分76分,比上次進步3分,我們的目標應該是80分以上,而且連續3次以上的模擬都能達70分,那麼MySQL的認證就可以取得了。

現在讓我們檢討錯的第一題吧。

2013-05-10_151825

這是MySQL 5實力養成暨評量裡的1-34『完成第一正規化的表格最重要的是能滿足哪項條件?』

答案:(A) 每個欄位只能含有一個值

正規化的問題還真是我們的罩門,感覺就是要背起來,不然很難有所準據。有關正規化的資訊已經分享過了,請參閱資料庫正規化,這裡不再贅述。

另外關於完全地功能性相依(Fully Functional Dependency)則是這一題搞不清楚的地方,由於在資料庫正規化的第二正規化提到『

它的規則是要求資料表裡的所有資料都要和該資料表的主鍵有完全相依關係;如果有哪些資料只和主鍵的一部份有關的話,就得把它們獨立出來變成另一個資料表。如果一個資料表的主鍵只有單一一個欄位的話,它就一定符合第二正規化。

一個資料表符合第二正規化若且唯若

  • 它符合第一正規化
  • 所有非主鍵的欄位都一定和主鍵有關』

我們一直沒提到完全地功能性相依這個名詞,雖然有點那個意會,可是對解題沒有幫助,所以引用高雄縣教育網路中心的資料於下:

第二正規化(Second Normal Form)
 條件
 一個表格必須滿意第一正規化的條件,並且非主鍵的欄位都要對主鍵有「完全地功能性相依(Fully Functional Dependency)」關係,才能算是達到第二正規化。
 正規化
 已合乎 1NF 的表格 A
Stu_no City ZIP Subject_no Score
75312 台中市 400 S5302 89
75312 台中市 400 S5345 90
75312 台中市 400 S8005 78
75312 台中市 400 S3581 80
75312 台中市 400 M1201 65
75312 台中市 400 M5251 95
75524 高雄市 800 S5302 88
75302 高雄縣 830 S5302 98
75302 高雄縣 830 S5345 90
75302 高雄縣 830 S3581 84
75302 高雄縣 830 M5251 85
在正規化之後,我們將表格 A 一分為二,並分別命名為 B1 與 B2
B1

Stu_no City ZIP
75312 台中市 400
75524 高雄市 800
75302 高雄縣 830
B2

Stu_no Subject_no Score
75312 S5302 89
75312 S5345 90
75312 S8005 78
75312 S3581 80
75312 M1201 65
75312 M5251 95
75524 S5302 88
75302 S5302 98
75302 S5345 90
75302 S3581 84
75302 M5251 85
 結果探討
 在經過 2NF 之後,先前的「無法單獨新增一筆學生資料」與「無法單獨刪除一筆成績資料」的問題都解決了。我們再看看 B1 與 B2 各欄位和主鍵之間在功能上的相依關係(Functional Dependency):

 在一個表格中,如果某一欄位值可決定其他欄位值;而這些欄位中又存在某一欄位可以決定剩餘欄位的值,稱為「遞移相依性(Transitive Dependency)」。若有此一情況發生,在異動資料時,可能會造成其他資料不一致的現象。
 在 B1 之中便有「遞移相依性」關係存在:B1.Stu_no -> B1.City 且 B1.City -> B1.ZIP 。
 在這樣的架構下,將產生下列問題:

  1. 無法單獨新增一筆縣市資料。因為 Stu_no 是 Primary key,不能為空值(Null);因此,若無任何學生居住的某個縣市,其郵遞區號資料將無法被事先建立。
  2. 無法單獨刪除一筆學生資料。如果我們打算刪除 75524 這筆資料的話,該生所在的高雄市郵遞區號資料也將一併消失。
  3. 仍有需要同步異動的資料。假如台中市的郵遞區號修改了,且住在該地區的學生又不只一位時,那麼我們又得異動多筆紀錄了。

感謝你看到這裡,很快就可以離開了,但最好的獎勵行動就是按一下幫我分享或留言,感恩喔~

點我分享到Facebook

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *