Week 5: 資料庫正規化基本概念 (TXBKP3-5)
安裝appserv-win32-2.5.10.exe
完成後在網址處輸入127.0.0.1
跑出"粉紅色"頁面
點選網頁第一排藍色網址
之後由課本3-5業開始輸入
在"建立新資料庫"處
輸入"testdatabase"
下方點選"utf8 unicode ci"
建立!
後
在頁面左邊點選新增的資料庫-testdatabase
點選頁面上方的"資料庫:testdatabase"
進入輸入資料
欄位依序是:name,birthdat,sea,address,tel
型態依序是:tinytext,date,char,tinytext,char,varchar
長度/集合只有:sex是1,tel是10
欄位null:只有name選取"not null"其餘選取"null"
輸入完成後點選"儲存"
若要修改以新增之欄位
可點選"鉛筆",刪除點選"紅叉叉"也可新增資料欄
完成後輸入資料:
臉選頁面,表上方之"新增"接著輸入朋友資料
完成後可點選"預覽"檢視
最後步驟
回到畫面左邊,點選"主目錄"方格
點選"輸出"->在書中點選新增之資料夾=testdatabase
記得在頁面下方點選"下載儲存格"
接著"執行"(同課本P3-17)
---------------------
from teacher's blog
正規化是在資料庫中組織資料的程序。其中包括建立資料表,以及在這些資料表之間根據規則建立關聯性,這些規則的設計目的是:透過刪除重複性和不一致的相依性,保護資料並讓資料庫更有彈性。
From : http://support.microsoft.com/kb/283878/zh-tw
另參考: http://www.csie.mcu.edu.tw/~yklee/Courses/Access/Chapter12.pdf
正規化是在資料庫中組織資料的程序。其中包括建立資料表,以及在這些資料表之間根據規則建立關聯性,這些規則的設計目的是:透過刪除重複性和不一致的相依性,保護資料並讓資料庫更有彈性。
重複的資料會浪費磁碟空間,並產生維護方面的問題。如果必須變更現有資料,並且該資料的位置超過一個以上,就必須在所有位置上以完全相同的方式進行變更。如果資料只儲存於 [客戶] 資料表中,而不儲存於資料庫中任何其他位置,變更客戶地址就會更容易執行。
何謂「不一致的相依性」?使用者在 [客戶] 資料表中查找特定客戶的地址,確實是直覺反應,可是在 [客戶] 資料表中查找拜訪該客戶之員工的薪資,就沒有什麼道理了。員工的薪資與該名員工相關,也就是所謂相依,因此應該移到 [員工] 資料表中。不一致的相依性會讓資料難以存取,因為查找資料的路徑可能會遺失或中斷。
資料庫正規化有一些規則。每條規則都稱為「正規形式」。如果遵守第一條規則,資料庫就稱為屬於「第一正規形式」。如果遵守前三條規則,資料庫就被視為屬於「第三正規形式」。雖然可能會有其他層級的正規形式,但第三正規形式被視為大部分應用程式所需的最高階正規形式。
雖然有許多正式規則與規格,但真實情況不一定永遠完全都相同。一般而言,正規化需要其他資料表,有些客戶也會嫌麻煩。如果您決定違反正規化前三個原則中的其中一個原則,請確定您的應用程式能夠掌握所有可能發生的問題,例如重複的資料與不一致的相依性。
下列說明包括範例。
- 刪除各個資料表中的重複群組。
- 為每一組關聯的資料建立不同的資料表。
- 使用主索引鍵識別每一組關聯的資料。
當您增加第三個廠商時,會發生什麼狀況?增加欄位並不能解決問題,增加欄位需要修改程式與資料表,而且無法順利納入數目不斷變動的廠商。您應該採取另外一種作法,就是將所有廠商資料另外放置在不同的資料表中 (稱為 [廠商]),然後使用項目編號索引鍵,將存貨連結至廠商;或使用廠商代碼索引鍵將廠商連結至存貨。 <h3>第二正規形式</h3>
- 為可套用於多筆記錄的多組值建立不同的資料表。
- 使用外部索引鍵,讓這些資料表產生關聯。
- 刪除不依賴索引鍵的欄位。
例如,在 [員工招募] 資料表中,會包含某位求職者的學院名稱與地址。但是您需要完整的學院清單,以整批寄送郵件。如果學院資訊儲存在 [求職者] 資料表中,就無法列出不含目前求職者的學院清單。因此,您應該要另外建立 [學院] 資料表,然後再使用學院代碼索引鍵連結至 [求職者] 資料表。
例外狀況:既要遵守第三正規形式,又要符合理論,實際上並不是永遠都行得通。如果您有 [客戶] 資料表,並且想要刪除所有可能的欄位間相依性,則必須分別為城市、郵遞區號、銷售人員、客戶類別,以及其他可能會在多筆記錄中重複的因素,建立不同的資料表。理論上,正規化值得追求。但是太多小型資料表可能會降低效能,或超過可開啟的檔案與記憶體容量。
比較可行的方法是只針對變更頻繁的資料運用第三正規形式。如果保留某些相依的欄位,請將應用程式設計為要求使用者在欄位變更時,驗證所有相關聯的欄位。 <h3>其他正規化形式</h3> 第四正規形式,也稱為「Boyce Codd 正規形式」(BCNF);而第五正規形式雖然存在,但實際設計時則很少考慮此形式。漠視這些規則的結果可能無法設計出最完美的資料庫,但不會影響資料庫功能。 <h3>正規化範例資料表</h3> 下列步驟示範將虛構學生資料表正規化的程序。
- 未正規化的資料表:
摺疊此表格學號 導師 導師辦公室 課程 1 課程 2 課程 3 1022 Jones 412 101-07 143-01 159-02 4123 Smith 216 201-01 211-02 214-01 - 第一正規形式:沒有重複的群組
資料表應該只有兩個維度。因為一個學生會上數種課程,所以課程應該另列資料表。因此,上述資料中的欄位 [課程 1]、[課程 2] 和 [課程 3] 即是設計問題所在。
試算表經常使用第三維度,但是資料表不應該使用第三維度。另一個解決此問題的方式是使用一對多關聯性,不要將一邊與多邊放在相同的資料表中。而是應該藉由刪除重複的群組 (課程 #),以第一正規形式建立另一個資料表,如下所示:
摺疊此表格學號 導師 導師辦公室 課程 # 1022 Jones 412 101-07 1022 Jones 412 143-01 1022 Jones 412 159-02 4123 Smith 216 201-01 4123 Smith 216 211-02 4123 Smith 216 214-01 - 第二正規形式:刪除重複的資料
請注意上述資料表中,每個 [學號] 值都會配對多個 [課程 #] 值。由於 [課程 #] 在運用時並不會依賴 [學號] (主索引鍵),因此這個關係並非第二正規形式。
下列兩個資料表將示範第二正規形式:
學生:
摺疊此表格學號 導師 導師辦公室 1022 Jones 412 4123 Smith 216
註冊課程:
摺疊此表格學號 課程 # 1022 101-07 1022 143-01 1022 159-02 4123 201-01 4123 211-02 4123 214-01 - 第三正規形式:刪除不依賴索引鍵的資料
最後一個範例中,[導師辦公室] (導師的辦公室編號) 在運用時會依賴 [導師] 屬性。而解決的方法,就是將該屬性從 [學生] 資料表移至 [教職員] 資料表,如下所示:
學生:
摺疊此表格學號 導師 1022 Jones 4123 Smith
教職員:
摺疊此表格名稱 辦公室 部門 Jones 412 42 Smith 216 42
回此頁最上方

