表格正規化簡介 講授大綱: 第一正規化 資料表的切割 第二正規化 第三正規化 Boyce/Codd正規化 第四正規化 第五正規化 2018/11/28
第一正規化(1/2) 缺點:各個欄位內的資料數不一致的情形,使資料庫系統很難設計。 表11.1 學生成績資料表 學生姓名 學號 系別 年級 課程名稱 課程代號 開課老師 老師職稱 學分 成績 李景維 M9903 資管系 二 資訊管理 IM01 李天行 教授 4 Null 管理數學 IM02 趙文華 副教授 3 85 吳致賢 B9901 企管系 BM01 BM02 2 統計學 BM03 羅曉梅 平行計算 EE01 王立詳 助理教授 張志中 M0300 一 93 缺點:各個欄位內的資料數不一致的情形,使資料庫系統很難設計。 2018/11/28
第一正規化(2/3) 關聯式資料庫(relational database)要求各個資料表皆須符合第一正規化(first normal form, 簡稱1NF),如下: 第一正規化:每一個欄位只准有一個值。 表11.2每個橫行在資料庫的術語中叫做一個tuple。 表11.2的資料表中各欄位都只有一個值,有時候有些欄位的資料還沒有決定,此時欄位的內容可以什麼資料都沒有,即Null。 對欄位值的規定謂之欄位值真確性(referential integrity):欄位內沒有值時可以Null代之,若有值時,則必須在定義的範圍之內。 關聯式資料庫要求每個資料表都要有一個主鍵(primary key),用來識別每一個tuple。 主鍵可以是資料表中的某一個欄位,也可以由幾個欄位組成。 若主鍵是由幾個欄位組成時,主鍵中不可以有多餘的欄位。 關聯式資料庫對主鍵欄位另外有個要求,即實體真確性(entity integrity):組成主鍵的任何欄位值,都不可以是Null。 2018/11/28
第一正規化(3/3) 表11.2 學生成績資料表 學生姓名 學號 系別 年級 課程名稱 課程代號 開課老師 老師職稱 學分 成績 李景維 M9903 資管系 二 資訊管理 IM01 李天行 教授 4 Null 管理數學 IM02 趙文華 副教授 3 85 吳致賢 B9901 企管系 BM01 BM02 2 統計學 BM03 羅曉梅 平行計算 EE01 王立詳 助理教授 張志中 M0300 一 93 2018/11/28
新增資料的問題 如果李景維想修企管系的統計學,則所有個人資料:學生姓名、學號、系別、年級,雖然資料庫系統中已經有這些資料,但是仍然要重新鍵入一遍,要重複鍵入許多資料。 又如果資管系要新開一門網頁設計的課,也無法加進學生成績資料表中。此資料表的主鍵是由學號及課程代號組成,則加進網頁設計這門課後,主鍵中的學號欄位是Null,就違背了關聯式資料庫entity integrity的規定,即主鍵中有未決定的值。 表11.3 新增資料的問題 學生姓名 學號 系別 年級 課程名稱 課程代號 開課老師 老師職稱 學分 成績 李景維 M9903 資管系 二 資訊管理 IM01 李天行 教授 4 Null 管理數學 IM02 趙文華 副教授 3 85 ? 網頁設計 IM03 王有禮 2018/11/28
刪除資料的問題 如果吳致賢及張志中都退選了統計學這門課,則這兩位學生選修這門課的資料會從資料表中刪除,而統計學這門課的課程代號、開課老師、學分數也都跟著被刪除了。 所以表11.2的設計會造成資料庫中資料不完整的問題。 表11.5 刪除資料的問題 學生姓名 學號 系別 年級 課程名稱 課程代號 開課老師 老師職稱 學分 成績 李景維 M9903 資管系 二 資訊管理 IM01 李天行 教授 4 Null 管理數學 IM02 趙文華 副教授 3 85 吳致賢 M9901 企管系 BM01 BM02 2 平行計算 EE01 王立詳 助理教授 張志中 M0300 一 93 2018/11/28
修改資料的問題 如果趙文華教授因故不能來上課,而請王有禮教授上管理數學,請羅曉梅教授上資訊管理,則資料庫中所有相關資料都要修正過。如果有50位學生修管理數學,有80位學生修資訊管理,則這130個tuples都要修正,頗浪費時間。 2018/11/28
資料表的切割 表11.6 課程資料表 課程名稱 課程代號 開課老師 老師職稱 學分 資訊管理 IM01 李天行 教授 4 管理數學 IM02 趙文華 副教授 3 BM01 BM02 2 統計學 BM03 羅曉梅 平行計算 EE01 王立詳 助理教授 表11.8 成績資料表 學號 課程代號 成績 M9903 IM01 Null IM02 85 B9901 BM01 BM02 BM03 EE01 M0300 93 表11.7 學生資料表 學生姓名 學號 系別 年級 李景維 M9903 資管系 二 吳致賢 B9901 企管系 張志中 M0300 一 2018/11/28
只有一個資料表(1/3) 解決了只有一個資料表的新增問題 三個資料表來設計學生成績資料,避免了資料重複的問題。如果要新增學生陳道航的資料,雖然他還沒有選課,仍然可以將他的基本資料加進學生資料表中。 表11.9 學生資料表 學生姓名 學號 系別 年級 李景維 M9903 資管系 二 吳致賢 B9901 企管系 張志中 M0300 一 陳道航 I9107 工管系 2018/11/28
只有一個資料表(2/3) 解決了只有一個資料表的刪除問題 在表11.5中,因為吳致賢和張志中都退選了統計學這門課,統計學這門課的基本資料,也跟著被刪除了,在資料表中再也找不到這門課的基本資料。但是在分割的資料表中,只要刪除表11.8中的第5個和第9個tuples,成為表11.10,就不會有吳致賢和張志中修統計學的資料,而統計學這門課的基本資料仍然好好的在表11.6中。 表11.10 成績資料表 學號 課程代號 成績 M9903 IM01 Null IM02 85 B9901 BM01 BM02 EE01 B0300 93 2018/11/28
只有一個資料表(3/3) 解決了只有一個資料表的修改問題 在表11.2中,趙文華教授因故不能來上課,而請王有禮教授上管理數學,請羅曉梅教授上資訊管理。因為修改資料表時,牽扯到許多tuples,很浪費處理的時間。如果有單獨的課程資料表,這件工作會變得很輕鬆。只要在表11.6課程資料表中,將課程代號為IM02的管理數學老師換成王有禮,課程代號為BM01的資訊管理老師換成羅曉梅,只要修改兩筆資料就完成了,如表11.6中箭頭所示。相對於前面修改130筆資料,不是輕鬆愉快? 2018/11/28
三個資料表的查詢問題 三個資料表的查詢問題 在只有一個資料表的設計中,查詢是個很簡單的問題。例如在表11.2中要查詢吳致賢選修哪幾門課,只要將表中滿足"學號=B9901"的tuples印出,即可得到吳致賢選修的課,如表11.11。 表11.11 資料表的查詢 吳致賢 B9901 企管系 二 資訊管理 BM01 趙文華 副教授 4 Null 管理數學 BM02 李天行 教授 2 統計學 BM03 羅曉梅 3 平行計算 EE01 王立詳 助理教授 當資料分成三個資料表時,資料庫系統提供了一個合成(join)的運算, 可以利用三個資料表組合出所要的資料表,各種組合的方法將在第十二章中介紹。 2018/11/28
圖11.1 表11.2各個attribute之間的功能相依關係 第二正規化 第二正規化: 資料表要滿足第一正規化,而且所有欄位都完全功能相依於主鍵。 功能相依(functionally dependence): 由attribute X的值可以決定一個唯一的attribute Y的值,簡寫成X→Y。 完全功能相依(full functional dependence): 如果attribute Y功能相依attribute X,但是並不功能相依於attribute X的任何子集,則稱attribute Y完全功能相依於attribute X。 表11.2各個attribute之間的功能相依關係,可以用圖11.1表示。 學號 課程代號 學生姓名 年級 系別 課程名稱 開課老師 老師職稱 學分 成績 圖11.1 表11.2各個attribute之間的功能相依關係 2018/11/28
第二正規化 學生姓名、系別、年級這三個attributes除了功能相依於(學號,課程代號) 表11.2各欄位的關係 學號 課程代號 學生姓名 年級 系別 課程名稱 開課老師 老師職稱 學分 成績 圖11.2 非完全功能相依的attributes 學生姓名、系別、年級這三個attributes除了功能相依於(學號,課程代號) 這個組成的attribute之外,還功能相依於學號這個attribute, 而“學號”這個attribute是“(學號,課程代號)“這個attribute的子集, 所以表11.2並不滿足完全功能相依的要求。 在表11.2中做新增、刪除、修改時所遇到的問題, 皆源自不是完全功能相依於主鍵這個原因。 2018/11/28
從完全功能相依的角度 從完全功能相依的角度看表11.2新增、刪除、修改的問題 只有一個資料表時新增資料的問題: 由圖11.2可以看出,只有在主鍵(學號,課程代號)中的兩個attributes都有資料後才能輸入資料。只有學生資料或只有課程資料,主鍵都有部分是Null,由於違反entity integrity的規定是不能輸入資料的。 只有一個資料表時刪除資料的問題: 由於主鍵是由(學號,課程代號)組成,刪除學生資料時,學號的值變成了Null,使得主鍵中有部分的attribute的值是Null,所以課程資料也必須一併刪除,以避免違反entity integrity。 只有一個資料表時修改資料的問題: 在表11.2中,由於主鍵包含(學號,課程代號),每一位學生的資料中都有開課老師的資料。所以當某一門課換老師時,所有修該門課的學生資料都必須更改,否則資料庫中的資料就不正確了。 2018/11/28
第二正規化的資料表 學號 學生姓名 年級 系別 課程名稱 開課老師 老師職稱 學分 課程代號 成績 2018/11/28
遞移功能相依(1/2) X→Y,Y→Z的關係稱做遞移功能相依(transitive functional dependence),即Z遞移功能相依於X,在此例為老師職稱遞移功能相依於課程代號。 新增資料的問題: 如果李天行教授要開一門新課,雖然資料庫系統中已經有李天行的老師職稱,但是仍然要輸入老師職稱,因為每個欄位都必須有值。 如果王有禮教授這學期沒有開課,則他的資料是不能存在課程資料表中的。見表11.12,王有禮教授那個tuple主鍵欄(即課程代號)的值還沒有決定,根據entity integrity,即主鍵中有未決定的值時,這種資料是不能存進資料表的。所以在資料庫中找不到沒有開課老師的資料。 課程名稱 課程代號 開課老師 老師職稱 學分 資訊管理 IM01 李天行 教授 4 管理數學 IM02 趙文華 副教授 3 BM01 BM02 2 統計學 BM03 羅曉梅 平行計算 EE01 王立詳 助理教授 ? 王有禮 表11.12 課程資料表 2018/11/28
遞移功能相依(2/2) 刪除資料的問題: 修改資料的問題: 如果羅曉梅教授被借調至政府機構三年,停開所開課程,則在資料庫中,再也找不到羅曉梅教授的資料,如表11.13。 修改資料的問題: 如果趙文華副教授升等為教授,則所有趙文華副教授的老師職稱欄位,都要改成教授,此例中有兩個tuples要修改。 表11.13 課程資料表 課程名稱 課程代號 開課老師 老師職稱 學分 資訊管理 IM01 李天行 教授 4 管理數學 IM02 趙文華 副教授 3 BM01 BM02 2 平行計算 EE01 王立詳 助理教授 2018/11/28
第三正規化(third normal form,簡稱3NF) 第三正規化: 資料表要滿足第二正規化,而且所有欄位都不可遞移功能相依於主鍵。 課程名稱 開課老師 老師職稱 學分 課程代號 圖11.4 消除遞移功能相依 表11.14 課程資料表 表11.15 教師資料表 課程名稱 課程代號 開課老師 學分 老師職稱 資訊管理 IM01 李天行 4 教授 管理數學 IM02 趙文華 3 副教授 BM01 羅曉梅 BM02 2 王立詳 助理教授 統計學 BM03 平行計算 EE01 根據圖11.4表11.6要再切割成兩個表,如表11.14和表11.15所示。 2018/11/28
第三正規化解決的問題 解決了新增資料的問題: 解決了刪除資料的問題: 解決了修改資料的問題: 李天行教授要新開課程,只要加在表11.14中即可,不必重複輸入老師職稱。王有禮教授這學期沒有開課,他的資料仍然可以儲存在表11.15教師資料表中。 解決了刪除資料的問題: 羅曉梅教授被借調至政府機構三年,停開所開課程,則在表11.14中刪除羅曉梅教授所開的課,但是羅曉梅教授的資料仍然在表11.15中。 解決了修改資料的問題: 趙文華副教授升等為教授,則只有表11.15趙文華副教授的老師職稱欄位改成教授即可,只要修改一個tuple。 2018/11/28
Boyce/Codd正規化(1/2) 如果我們設計的學生成績資料表只有四個欄位,包含姓名、學號、課程代號成績,如表11.16,而不是前面所設計的含有十個欄位的資料表。 並假設該校的學生都沒有同名同姓的情形,意即一個學號只對應一個唯一的名字,所以(課程代號,姓名)也可以當作一組主鍵。 在資料庫中一個資料表只能定義一個主鍵,其他也能識別各個tuple的候選主鍵(candidate key)就謂之替代鍵(alternate key)。例如表11.16中,如果attribute(課程代號,學號)是主鍵,則attribute(課程代號,姓名)就是替代鍵。 圖11.5是表11.16中各attribute的功能相依圖。在這個圖中,可以發現"學號"功能相依於"姓名",並不完全功能相依於(課程代號,姓名)。"姓名"功能相依於"學號",並不完全功能相依於(課程代號,學號)。 根據Codd教授的定義,如果某個attribute是替代鍵的一部份,則該attribute可以不必完全功能相依於主鍵。根據這個定義,表11.16是滿足第三正規化的。 2018/11/28
Boyce/Codd正規化(2/2) 表11.16成績資料表 姓名 學號 課程代號 成績 李景維 M9903 IM01 Null IM02 85 吳致賢 B9901 BM01 BM02 BM03 EE01 張志中 M0300 93 姓名 課程代號 學號 成績 圖11.5 表11.16的功能相依圖 表11.16 顯然存在資料重複的問題,例如吳致賢從企管系轉到工管系,學號由B9901改成I9805,則表11.16中有4個tuples的學號欄位要修改。又如果李景維要多修一門課,則必須重複輸入他的學號。 2018/11/28
Boyce/Codd正規化(簡稱BCNF) 資料表中的determinant都必須是candidate key。 所謂candidate key: 前面解釋過,是也能用來識別各個tuple的attribute。 所謂determinant: 是指一種attribute,若有別的attribute功能相依於它,則這類attribute就謂之determinant,即X→Y中的X就是determinant。表11.16中,姓名和學號都是determinants,因為“姓名→學號”,而且“學號→姓名”。 但是兩者在表11.16中都不是candidate key,因為無法用姓名或學號來識別各個tuple,所以表11.16是不滿足Boyce/Codd正規化的。 從圖11.5中將學號和姓名分離出來,可以得到圖11.6,根據圖11.6作出來的資料表就會滿足Boyce/Codd正規化,見表11.17和11.18。 2018/11/28
Boyce/Codd正規化(簡稱BCNF) 表11.17成績資料表 表11.18學生資料表 學號 課程代號 成績 姓名 M9903 IM01 Null 李景維 IM02 85 吳致賢 B9901 BM01 張志中 M0300 BM02 BM03 EE01 93 課程代號 學號 成績 姓名 圖11.6 表11.16的功能相依圖 表11.17只有一個determinant,即主鍵,而沒有其他的candidate key, 所以滿足BCNF。表11.18有兩個determinants,即姓名和學號。 這兩個determinants在表11.18中都是candidate key, 所以表11.18也滿足BCNF。 2018/11/28
第四正規化(1/3) 如果某高中教數學課的老師有三位:陳立、沈赫哲,所有教育部規定的教科書都是教材,有:南一書局、龍騰書局、台灣書局等書局出版的三個版本,即不管哪位老師都要教所有部訂的教材。 英文也一樣,老師有徐薇、何嘉仁和殷非凡,教科書的版本有:遠東書局、復興書局等兩個版本。 還有一個限制就是,教數學的老師只教數學,教英文的老師也只教英文,不會教別的科目。將這些資料製作成表11.19。 表11.19課程資料表 課程 老師 教科書 數學 陳立 沈赫哲 南一書局 龍騰書局 台灣書局 英文 徐薇 何嘉仁 殷非凡 遠東書局 復興書局 2018/11/28
第四正規化(2/3) 很顯然地表11.19不是正規化的資料表,但是容易就可以將表11.19轉換成第一正規化的資料表,如表11.20。 表11.20 課程資料表 課程 老師 教科書 數學 陳立 南一書局 龍騰書局 台灣書局 沈赫哲 英文 殷非凡 遠東書局 復興書局 徐薇 何嘉仁 很顯然地表11.19不是正規化的資料表,但是容易就可以將表11.19轉換成第一正規化的資料表,如表11.20。 2018/11/28
第四正規化(3/3) 表11.20其實已經是一個BCNF的資料表,乍看之下,或許會覺得奇怪。此表的課程不是determinant,因為由課程無法決定唯一的一位老師,也無法決定唯一的一種教科書。很明顯的,老師和教科書都不是determinant。表11.20只有一個determinant,那就是由所有欄位組成的attribute(課程,老師,教科書),亦即是此表的主鍵。 比照BCNF的定義,此表確實滿足BCNF的定義。這種由所有欄位組成的主鍵謂之all key。 表11.20中資料重複的很厲害,造成這種現象的原因,無法用功能相依的性質來解釋,而是因為多值相依(multivalued dependency)。:在一個資料表中,存在三個attributes A、B、C,對A的任一個值可以決定多個B的值和多個C的值,不會和別的A值重複,而不只一個B的值可以決定C的值,也不只一個C的值可以決定B的值,則稱B和C多值相依於A。 以此例來說,由數學課可以知道有哪些數學老師和數學教材,不會和英文課的老師和教材搞混。注意,數學課的老師和出版書局和英文課的老師和出版書局都不一樣。但是對某一位數學老師來說,不是只有他會用三個書局出版的版本,另外的數學老師也會用這三個書局出版的版本。 這種多值相依的關係寫成A→→B,A→→C,即B和C多值相依於A。 功能相依是多值相依的一個特例,即A的任一個值都可以決定唯一的一個B的值。17 2018/11/28
第四正規化(fourth normal form) 要消除表11.20中資料重複出現的情形須藉助第四正規化(fourth normal form,簡稱4NF) 第四正規化(fourth normal form):沒有多值相依的BCNF資料表謂之第四正規化的資料表。 所以要得到第四正規化的資料表,須先造出BCNF的資料表,然後將BCNF的資料表切割成沒有多值相依的資料表。例如A→→B,A→→C,即B和C多值相依於A,則將A和B形成一個資料表,將A和C形成另一個資料表,就解除了B和C多值相依於A的問題。 表11.21課程老師資料表 表11.22課程書局資料表 課程 老師 教科書 數學 陳立 南一書局 沈赫哲 龍騰書局 英文 殷非凡 台灣書局 徐薇 遠東書局 何嘉仁 復興書局 2018/11/28
連環資料表 連環限制(circular constraint): 若有三個tuples,其中一個tuple在第一欄和第二欄的值為A和B,另一個tuple在第二欄和第三欄的值為B和C,第三個tuple在第一欄和第三欄的值為A和C,則資料表中必須要有一個tuple在第一欄、第二欄、第三欄位的值分別為A、B、C。 例如表11.23,此表和表11.19不同的地方是,教國文的老師也可以教英文,教英文的老師也可以教國文。如果此表也要求要滿足連環限制,即有一個tuple有“國文”和“徐薇”,另外一個tuple有“徐薇”和“龍騰書局”,還有一個tuple有“國文”和“龍騰書局”,則此資料表中就必須有一個tuple含有“國文、徐薇、龍騰書局”。 我們稱這種對欄位內容有連環限制的資料表為連環資料表。如果表11.23少了第4個tuple,則這個資料表就不滿足連環限制,也就不是連環資料表了。 表11.23 課程資料表 課程 老師 教科書 國文 徐薇 南一書局 英文 龍騰書局 陳立 2018/11/28
連環資料表的問題(1/2) 環資料表的新增資料問題: 如果我們要在表11.23中新增一筆資料:"英文、陳立、南一書局",如表11.24。 表11.24 課程資料表 課程 老師 教科書 國文 徐薇 南一書局 英文 龍騰書局 陳立 表11.24 是不滿足連環限制的要求的,因為有一個tuple有“英文”和“陳立” (第5個tuple), 英文、陳立、龍騰書局“這筆資料,以維持新增後的資料表仍然是連環資料表。 也因為如此,所以增添了連環資料表新增資料的困難。 2018/11/28
連環資料表的問題(2/2) 連環資料表的刪除資料問題: 連環資料表的修改資料問題: 如果在表11.23中要刪除第4個tuple:“國文、徐薇、龍騰書局”,前面討論過,會使表11.23不滿足連環資料表的要求。為了要維持連環資料表的要求,勢必在前3個tuples中任意再刪除一個tuple。原來只要刪掉一筆資料,卻連帶的刪掉數筆資料,所以也造成了刪除資料的困難。 連環資料表的修改資料問題: 若要將表11.23中的第4個tuple:"國文、徐薇、龍騰書局"修改成"英文、陳立、南一書局",首先新的資料表就不滿足連環資料表的要求。因為前面解釋過,第4個tuple是表11.23不可或缺的。再者,因為有"英文、南一書局"(修改過後的第4個tuple),又有一個tuple是"英文、徐薇"(第2個tuple),還有一個tuple是"徐薇、南一書局"(第1個tuple),所以還要增加一筆"英文、徐薇、南一書局"。由此可以看出,修改連環資料表變得非常困難。 2018/11/28
projection運算和join運算(1/2) 所謂資料表的projection,就是從資料表中取出一些欄位形成一個新的資料表,且在新的資料表中,去掉重複的tuple。例如在表11.23做課程和老師欄位的projection,即取出表11.23第一欄和第二欄的資料,取得的資料有(國文,徐薇)(國文,陳立)(英文,徐薇)(國文,徐薇),其中第1筆和第4筆資料一模一樣,因此去掉其中一筆,所得的結果如表11.25。相同地,做老師和教科書欄位的projection,則如表11.26。做教科書和課程欄位的projection,則如表11.27。 所謂資料表的join,就是將不同的資料表,透過指定的attributes,做合併的動作。我們以表11.25和表11.26來說明合併的方式。如果表11.25和表11.26是透過老師這個attribute做合併,則表11.25的(國文,徐薇)和表11.26的(徐薇,南一書局)可以合併成(國文,徐薇,南一書局),因為這兩筆資料中的老師這個attribute的值是相同的。表11.25的(國文,徐薇)和表11.26的(陳立,龍騰書局)是不可以合併的,因為這兩筆資料中的老師這個attribute的值是不相同的。 2018/11/28
projection運算和join運算(2/2) 最後將所有合併的結果去掉重複的資料,得到的資料表如表11.28。表11.28和表11.23的資料不完全相同,因為在表11.28中多出了(英文,徐薇,南一書局)這筆資料,這是違背資料表無損切割(nonloss decomposition)的原則。 表11.25 課師表 表11.26 師教表 表11.27 教課表 課程 老師 教科書 國文 徐薇 南一書局 陳立 龍騰書局 英文 表11.28 合併表 課程 老師 教科書 國文 徐薇 南一書局 龍騰書局 陳立 英文 2018/11/28
第五正規化 表11.28和表11.23的資料不完全相同,因為在表11.28中多出了(英文,徐薇,南一書局)這筆資料,這是違背資料表無損切割(nonloss decomposition)的原則。 無損切割(nonloss decomposition):資料表切割後,若經由join可還原成原來的資料表,即原有的資料不可以變得更少,也不可以變得更多,則謂之無損切割。 合併相依(join dependency):若資料表R1、R2、…、Rn為資料表R的projections,且R可由R1、R2、…、Rn做join運算而得,則稱R合併相依於R1、R2、…、Rn。 第五正規化(fifth normal form,簡稱5NF):一個4NF的連環資料表,若其projections:R1、R2、…、Rn滿足合併相依(join dependency),則R1、R2、…、Rn謂之此連環資料表的第五正規化資料表。 前面說明過表11.25和表11.26,並不是一組滿足合併相依的projections。但是加上表11.27,這三個資料表就可組成表11.23的合併相依projections。 2018/11/28
第五正規化(1/2) 解決了連環資料表的新增資料問題: 如果我們要在表11.25到表11.27中新增一筆資料:"英文、陳立、南一書局",則將"英文、陳立"加進表11.25,將"陳立、南一書局"加進表11.26,將"南一書局、英文"加進表11.27,如表11.29到表11.31。 表11.29 課師表 表11.30 師教表 表11.31 教課表 課程 老師 教科書 國文 徐薇 南一書局 陳立 龍騰書局 英文 表11.32 課程資料表 課程 老師 教科書 國文 徐薇 南一書局 龍騰書局 陳立 英文 由表11.29到表11.31經過join運算, 所得到的資料表由於滿足合併相依於表11.29到表11.31,自然是一個連環資料表,如表11.32。 2018/11/28
第五正規化(2/2) 解決了連環資料表的刪除資料問題: 解決了連環資料表的修改資料問題: 如果要刪除“國文、徐薇、龍騰書局”,則在表11.25中要刪除“國文、徐薇”,在表11.26中要刪除“徐薇、龍騰書局”,在表11.27中要刪除“龍騰書局、國文”,如表11.33到表11.35。 解決了連環資料表的修改資料問題: 若要將"國文、徐薇、龍騰書局"修改成"英文、陳立、南一書局",則表11.25的"國文、徐薇"要改成"英文、陳立",表11.26的"徐薇、龍騰書局"要改成"陳立、南一書局",表11.27的"龍騰書局、國文"要改成"南一書局、英文",如表11.36到表11.38,這三個資料表join的結果仍然會滿足連環資料表的要求。 表11.33 課師表 表11.34 師教表 表11.35 教課表 課程 老師 教科書 國文 陳立 徐薇 南一書局 英文 龍騰書局 表11.36 課師表 表11.37 師教表 表11.38 教課表 課程 老師 教科書 英文 陳立 徐薇 南一書局 國文 龍騰書局 2018/11/28