290 likes | 449 Views
Normalization. 353352 – Special Problem (DB) Choopan Rattanapoka choopanr @ kmutnb.ac.th. การออกแบบฐานข้อมูล. InfoFilm (type, title , airtime, year, studioName , studioLocation ) ออกแบบโดยนำทุกอย่างรวมกันในตารางเดียว. ปัญหา : redundancy and anomalies. Data Redundancy
E N D
Normalization 353352 – Special Problem (DB) ChoopanRattanapoka choopanr@kmutnb.ac.th
การออกแบบฐานข้อมูล • InfoFilm(type, title, airtime, year, studioName, studioLocation) • ออกแบบโดยนำทุกอย่างรวมกันในตารางเดียว
ปัญหา: redundancy and anomalies • Data Redundancy • รายละเอียดของฟิลม์ถูกเก็บหลายครั้ง ถ้าฟิลม์นั้นอยู่ในหลายประเภทของฟิลม์ • ที่อยู่ของผู้ผลิตฟิลม์อยู่เก็บหลายครั้ง ถ้าผู้ผลิตนั้นผลิตหลายฟิลม์ • Modification/insertion anomalies • การแก้ไขต่างๆ เช่น ที่อยู่ของผู้ผลิตฟิลม์จะต้องแก้ไขหลายที่ซึ่งอาจจะทำให้มีปัญหาเกี่ยวกับความถูกต้องของข้อมูล • Deletion anomalies • การลบข้อมูลบางแถวอาจทำให้สูญเสียข้อมูลบางอย่างเช่น อาจจะทำให้ที่อยู่ของผู้ผลิตฟิลม์หาย
Decomposition • เป้าหมาย: ต้องการจะแยกความสัมพันธ์RAเป็นความสัมพันธ์ย่อย R1, R2, ... RNซึ่งเมื่อนำความสัมพันธ์ย่อยนี้มารวมกันจะต้องเท่ากับความสัมพันธ์เดิมคือRA • จะใช้ naturaljoinระหว่างความสัมพันธ์ย่อย เพื่อนำค่าต่างๆของความสัมพันธ์หลักคืนมา • R1 R2 ….. RN= RA
FunctionalDependencies • กำหนดให้X และY, เป็น2 attributes (หรือ กลุ่มของ attribute) ที่อยู่ในความสัมพันธ์เดียวกัน • เราใช้X → Y, ถ้าค่าของX เป็นตัวกำหนดค่าของ Y
Example : FunctionalDependencies InfoFilm(type, title, airtime, year, studioName, studioLocation) สมมุติให้ชื่อหนัง (title) และชื่อผู้ผลิตหนัง (studioName) ไม่มีชื่อซ้ำกัน • title → type • title → airtime • title → year • title → studioName • title → studioLocation • studioName → studioLocation
Canonical CoverFc • Canonical Cover (Fc) คือ subset ย่อยที่สามารถใช้กฎ transitivity เพื่อจะสร้าง functional dependancyอื่นๆ ได้ • ในset ของ functional dependancyจะต้องมี canonicalcoverเสมอ
Example : Canonical Cover กำหนด Functional Dependency (F) ต่อไปนี้จงหา Fc F =numFilm→ title numFilm → airtime numFilm → numStudio numStudio→ studioName numFilm → studioName numFilm→ studioLocation numStudio→ studioLocation ซ้ำ
Example : Canonical Cover F= numFilm→ title numFilm → airtime numFilm → numStudio numStudio→ studioName numFilm → studioName numFilm → studioLocation numStudio→ studioLocation CanonicalConverคือ: numFilm→ title numFilm → airtime numFilm → numStudio numStudio→ studioName numStudio→ studioLocation
Normal forms 1NF 2NF 3NF BCNF 4NF 5NF แต่ละ normal form ที่ตำแหน่งI จะมีกฎเข้มงวดกว่า normal form ที่ตำแหน่ง I - 1 จุดประสงค์:การกำหนดมาตรฐานและทำให้การสร้าง schema ง่ายขึ้น โดยไม่มีข้อมูลซ้ำ และ ปัญหาในการ update ข้อมูล
1NF : the first normal form • Definition :ความสัมพันธ์จะอยู่ในรูป 1NF ถ้าทุก attribute จะมีค่าแค่ค่าเดียว ความสัมพันธ์นี้ไม่เป็น 1NF เพราะ attribute acteurมีมากกว่า 1 ค่า
การทำความสัมพันธ์ให้เป็น 1NF • สร้าง attribute เพิ่มขึ้น : • รอบหนัง(numFilm, numClient, period) • รอบหนัง(numFilm, numClient, startTime, endTime)
การทำความสัมพันธ์ให้เป็น 1NF • 2. สร้างความสัมพันธ์ใหม่ : • Studio(name, filmTitle) • Studio(name) • Film(name, filmTitle)
2NF : the second normal form • Definition:ความสัมพันธ์จะเป็น 2NF ก็ต่อเมื่อ • ความสัมพันธ์นี้เป็น 1NF • ทุก attributeที่ไม่มีขึ้นอยู่กับ key ห้ามไปขึ้นอยู่กับส่วนหนึ่งของ key • Objectif • รับประกันไม่มีข้อมูลซ้ำ • รับประกันว่า attribute จะขึ้นอยู่กับ key เท่านั้นและไม่ขึ้นอยู่กับบางส่วนของ key
Example : 2NF Actor(numFilm, numArtist, title, salary) • Canonical Cover : • numFilm, numArtist→ salary • numFilm → title
Example : 2NF Actor(numFilm, numArtist, title, salary) • Canonical Cover : • numFilm, numArtist→ salary • numFilm → title ผิดกฎ
การทำ 2NF สร้างความสัมพันธ์ใหม่: • Actor (numFilm, numArtist, title, salary) • Actor (numFilm, numArtist, salary) • Film (numFilm, title)
3NF : the third normal form • Definition:ความสัมพันธ์จะเป็น 3NF ก็ต่อเมื่อ • ความสัมพันธ์นี้เป็น 2NF • ทุก attribute ที่ไม่ได้ขึ้นอยู่กับ key ห้ามไปขึ้นอยู่กับ attribute ที่ไม่ใช่ key • เป้าหมาย • รับประกันไม่มีการซ้ำกันของข้อมูล • มั่นใจได้ว่าค่าต่างๆ จะขึ้นกับ key เท่านั้น
Example : 3NF Film (numFilm, title, numStudio, studioName) • Canonical Cover: • numFilm → title • numFilm → numStudio • numStudio → studioName
Example : 3NF Film (numFilm, title, numStudio, studioName) • Canonical Cover: • numFilm → title • numFilm → numStudio • numStudio → studioName (ผิดกฎ)
การทำความสัมพันธ์ให้เป็น 3NF สร้างความสัมพันธ์ใหม่ : Film (numFilm, title, numStudio, studioName) • Film (numFilm, title, numStudio) • Studio (numStudio, studioName)
BCNF : Boyce-Codd normal form • Definition:ความสัมพันธ์จะเป็น BCNFก็ต่อเมื่อด้านซ้ายของ functional dependency เป็น candidate key
Example : BCNF Localisation (cru, pays, region, quality) Cru : ที่ปลูก Pays : ชื่อย่านที่ปลูก Region : ชื่อเมืองที่ปลูก Quality : คุณภาพ • Canonical Cover : • cru, pays → region • cru, pays → quality • region→ pays
BCNF : exemple Localisation (cru, pays, region, quality) • Canonical Cover: • cru, pays → region • cru, pays → quality • region→ pays (ผิดกฎ) Crus (cru, pays, quality) Region(region, pays)
Exercise 1 Student(ID, name, age, address, foodCost, subject, lecturer, grade) • ID :รหัสประจำตัวนักศึกษา • foodCost:ราคาอาหารกลางวัน{T1, T2, T3} แล้วแต่อายุของนักศึกษา • subject :วิชาที่ลงทะเบียนเรียน • lecturer :อาจารย์ที่สอนวิชานั้น • จงหา Caninocal Cover ของความสัมพันธ์ Student
จาก Exercise 1 จาก Canonical Cover ที่ได้ถามว่าอยู่ในรูป • 1NF • 2NF • 3NF • BCNF หรือไม่ • จงทำให้ความสัมพันธ์นี้อยู่ในรูป BCNF
Exercise 2 จงทำให้ความสัมพันธ์ต่อไปนี้ ให้อยู่ในรูป 3NF InfoFilm(type, title, airtime, year, studioName, studioLocation) • กำหนดให้: • title ของฟิลม์ไม่มีชื่อซ้ำกัน • studioNameก็ไม่มีการซ้ำกัน