รหัสการสั่งซื้อ

Download Report

Transcript รหัสการสั่งซื้อ

Normalization
ลดความซ้าซ้ อนของข้ อมูลด้ วยการทานอร์ มลั ลลซ์
4122201A ฐานข้ อมูลเบือ้ งต้ น 3(2-2-5)
อ.คณานันท์ คงงาม
1
Normalization
• Normalization เป็ นวิธีที่ใช้ในการปรับโครงสร้างของตาราง
เพื่อให้ได้ตารางที่สามารถเก็บข้อมูลได้โดยไม่มีปัญหาใดๆ
ตามมาภายหลัง โดยให้อยูใ่ นรู ปแบบที่เรี ยกว่า Normal Form
• มีเป้ าหมายหลักคือ การลดความซ้ าซ้อนของข้อมูล และรักษา
ความถูกต้องให้แก่ขอ้ มูล
© Pearson Education Limited 1995, 2005
วัตถุประสงค์ ของ Normalization
• ลดเนื้อที่ในการจัดเก็บข้อมูล
– เนื่องจากกระบวนการ Normalization เป็ นการออกแบบเพื่อลดความ
ซ้ าซ้อนในข้อมูล จึงทาให้เนื้อที่ในการจัดเก็บข้อมูลลดลงด้วย
• ลดปัญหาข้อมูลที่ไม่ถูกต้อง
– เมื่อข้อมูลไม่มีความซ้ าซ้อน จึงทาให้สามารถปรับปรุ งข้อมูลได้จาก
แหล่งข้อมูลเพียงแหล่งเดียว จึงลดปัญหาการปรับปรุ งข้อมูลไม่
ถูกต้องได้ (รวมถึงการเพิม่ ลบ และปรับปรุ งข้อมูล)
© Pearson Education Limited 1995, 2005
Normalization
การ Normalization นี้เป็ นการดาเนินงานอย่างเป็ นลาดับ ที่
กาหนดไว้ดว้ ยกันเป็ นขั้นตอน ตามปัญหาที่เกิดขึ้นในข้นตอนนั้นๆ ซึ่ ง
แต่ละขั้นตอนจะมีชื่อตามโครงสร้างข้อมูลที่กาหนดไว้ดงั นี้
1. ขั้นตอนการทา First Normal Form(1NF)
2. ขั้นตอนการทา Second Normal Form(2NF)
3. ขั้นตอนการทา Third Normal Form(3NF)
4. ขั้นตอนการทา Boyce-Codd Normal Form(BCNF)
5. ขั้นตอนการทา Fourth Normal Form(4NF)
6. ขั้นตอนการทา Fifth Normal Form(5NF)
ขอบเขต
• ในทางปฏิบตั ิการทา Normalization จนถึงระดับที่ 3 (3NF) ก็
สามารถขจัดปัญหาความซ้ าซ้อนของข้อมูลลงได้จนเกือบหมดแล้ว
แต่อาจจะมีความซ้ าซ้อนเกิดขึ้นได้อีกแม้จะพบได้ค่อนข้างน้อย
• ดังนั้นเนื้อหาจึงขอกล่าวถึงการทา Normalization จนถึง 3NF และ
กล่าวถึง BCNF กรณี ที่ตอ้ งการลดความซ้ าซ้อนให้นอ้ ยลงไปอีก
• จะไม่กล่าวถึง 4NF และ 5NF หากนักศึกษาต้องการศึกษาถึง 4NF
และ 5NF สามารถอ่านได้จากหนังสื ออ้างอิง
Function Dependencies
• คือ ฟังก์ชนั่ ที่ข้ ึนตรงต่อกัน
• ค่าของแอตทริ บิวต์หนึ่ง หรื อกลุ่มของแอตทริ บิวต์ที่ถูกนามาใช้
เป็ นคียห์ ลักของรี เลชัน่ นั้น สามารถไประบุค่าแอตทริ บิวต์อื่นๆในทู
เพิลเดียวกันในรี เลชัน่ นั้นได้
• แอตทริ บิวต์ที่เป็ นตัวระบุค่า เรี ยกว่า Determinant
• แอตทริ บิวต์ที่ถูกระบุค่า เรี ยกว่า Dependent
นิยาม ให้ B เป็ นแอทริบิวต์ และ A เป็ นแอทริบิวต์ อกี ตัวหนึ่ง
(ซึ่ง A อาจประกอบด้ วยแอทริบิวต์ มากว่ า 1 ตัวก็ได้ ) และกว่ าว่ า
B เป็ นฟังก์ ชั่นการขึน้ ต่ อกันอยู่กบั A ก็ต่อเมื่อ ค่ าของ A
สามารถใช้ ในการกาหนดค่ าของ B ได้ เพียง 1 ค่ าเสมอ
•
•
•
•
•
สัญลักษณ์ คือ AB
อ่านว่า B มีฟังก์ชนั่ การขึ้นต่อกันอยูก่ บั A
หรื อ B ขึ้นกับ A
เรี ยก A ว่าเป็ นตัวกาหนดค่า Determimant
เรี ยก B ว่าเป็ นตัวถูกกาหนดค่า Depentdent
Ex.FD
•
•
•
•
•
•
ตาราง พนักงาน(รหัสพนักงาน,ชื่อ,ที่อยู,่ เบอร์โทรศัพท์)
พบว่า ชื่อขึ้นกับรหัสพนักงาน
เพราะว่า ถ้ากาหนดรหัสพนักงาน 1 ค่า จะได้ ชื่อ 1 คน เสมอ
แต่ ไม่อาจกล่าวไดว่า รหัสพนักงาน ขึ้นกับ ชื่อ
เพราะ ถ้ากาหนดชื่อ 1 ชื่อ แต่อาจได้รหัสมากว่า 1 ค่า
เช่น สมศักดิ์ ได้รหัส 001 และ 002
First Normal Form : 1NF
1. First Normal Form : 1NF
นิยาม Relation หนึ่งๆ จะอยูใ่ นรู ปแบบ 1NF ก็ต่อเมื่อ
“ค่าของ Attribute ต่างๆ ในแต่ละ Tuple จะมีค่าของข้อมูล
เพียงค่าเดียว นัน่ คือไม่มี Repeating Group และ Multi-valued”
Repeating Group คือ กลุ่มซ้ า กล่าวคือ ค่าของแอทริ บิวต์ของแต่
ละแถวมีขอ้ มูลมากว่า 1 ค่า จะต้องทาการกาจัดปัญหานี้
ออกไป
ตัวอย่ าง 1NF
• การสัง่ ซื้อสิ นค้า(รหัสการสัง่ ซื้อ,วันที่สงั่ ซื้ อ,ชื่อผูส้ งั่ ซื้อ,
รหัสสิ นค้า,จานวนที่สงั่ ซื้ อ)
• รหัสการสัง่ ซื้อ คือ คียห์ ลัก
• รหัสสิ นค้า,จานวนที่สงั่ ซื้ อ คือ Repeating Group (กลุ่มซ้า)
รหัสการสั่ งซื้อ วันที่สั่งซื้อ
ชื่อผู้สั่งซื้อ
สมพงษ์
OR01 01/03/57
รหัสสิ นค้ า
P001
P002
จานวนทีส่ ั่ งซื้อ
30
50
วิธีการทาให้ อยู่ในรูปแบบ 1NF
• 1. กาจัด repeating group (กลุ่มซ้ า)
• 2. เพิม่ คียห์ ลัก
• 3. นาคียห์ ลักจากกลุ่มซ้ า มารวมกับคียห์ ลักเดิม
ตัวอย่ าง 1NF
• การสัง่ ซื้อสิ นค้า(รหัสการสัง่ ซื้อ,วันที่สงั่ ซื้ อ,ชื่อผูส้ งั่ ซื้อ,
รหัสสิ นค้า,จานวนที่สงั่ ซื้ อ)
• การสัง่ ซื้อสิ นค้า(รหัสการสัง่ ซื้อ, รหัสสิ นค้า,วันที่สงั่ ซื้อ,ชื่อผู้
สัง่ ซื้อ,จานวนที่สงั่ ซื้อ)
ตัวอย่ าง 1NF
รหัสการสั่ งซื้อ วันที่สั่งซื้อ
ชื่อผู้สั่งซื้อ
สมพงษ์
OR01 01/03/57
รหัสสิ นค้ า
P001
P002
รหัสการสั่ งซื้อ รหัสสิ นค้ า
OR01
P001
OR01
P002
ชื่อผู้สั่งซื้อ
สมพงษ์
สมพงษ์
จานวนทีส่ ั่ งซื้อ
30
50
วันที่สั่งซื้อ
จานวนทีส่ ั่ งซื้อ
01/03/57
30
01/03/57
50
Second Normal Form (2NF)
2. Second Normal Form : 2NF
Relation หนึ่งๆ จะอยูใ่ นรู ปแบบ 2NF ก็ต่อเมื่อ
“1. Relation นั้นๆ ต้องอยูใ่ นรู ปแบบ 1NF
2. Attribute ทุกตัวที่ไม่ได้เป็ นคียห์ ลัก จะต้องมีความสัมพันธ์
กับ Attribute ที่เป็ นคียห์ ลักทั้งหมด(Fully Functional
Dependency) ไม่ใช่แค่ส่วนใดส่ วนหนึ่งของคียห์ ลัก หรื อ
กล่าวง่ายๆ ว่า ไม่มี Partial Dependency เกิดขึ้น”
วิธีการทาให้ อยู่ในรูปแบบ 2NF
•
•
•
•
1. สร้างตารางใหม่เพิม่
2. นาคอลัมน์ที่มีปัญหาไปใส่ ในตารางที่สร้างเพิม่
3. เลือกคียห์ ลักของตารางที่สร้างใหม่
4. แอทริ บิวต์ใดในตารางเดิมเมื่อนาไปใส่ ในตารางใหม่ ให้ตดั
ออกจากตารางเดิม ยกเว้น ส่ วนของคียห์ ลัก คงไว้ในตารางเดิม
• ข้อสังเกต มีจานวนตารางเพิ่มขึ้น แต่แอทริ บิวต์ในตารางลดลง
ตัวอย่ าง 2 NF
• การสัง่ ซื้อ (รหัสการสัง่ ซื้อ,วันที่สงั่ ,รหัสพนักงาน,รหัสสิ นค้า,ชื่อ
สิ นค้า,จานวนที่สงั่ ซื้อ,ราคา)
• จากข้อมูลข้างต้น พบว่า มี Repeating Group คือ รหัสสิ นค้า ,
ชื่อสิ นค้า,จานวนที่สงั่ ซื้ อ,ราคา
• ดังนั้น เลือก รหัสสิ นค้าเป็ น คียห์ ลักใน Repeating Group จะ
ลดตารางทีอ่ ยู่ในรู ป 1 NF ดังนี้
• การสัง่ ซื้ อ (รหัสการสัง่ ซื้ อ, รหัสสิ นค้า,วันที่สงั่ ,รหัสพนักงาน,
ชื่อสิ นค้า,จานวนที่สงั่ ซื้ อ,ราคา)
ตัวอย่ าง 2 NF ต่ อ….
• การสัง่ ซื้อ (รหัสการสัง่ ซื้อ, รหัสสิ นค้า,วันที่สงั่ ,รหัสพนักงาน,
ชื่อสิ นค้า,จานวนที่สงั่ ซื้ อ,ราคา) 1NF
• พิจารณาใน 2 NF โดยเขียนฟังก์ชนั่ การขึ้นต่อกันระหว่างแอทริ
บิวต์กบั คียห์ ลัก พบว่า
การสัง่ ซื้อ --> วันที่สงั่ ,รหัสพนักงาน
รหัสสิ นค้า --> ชื่อสิ นค้า
• จากข้อมูลข้างต้น พบว่า เกิดการขึ้นต่อกันเพียงบางส่ วนระหว่าง
คียห์ ลักกับแอทริ บิวต์ จึงยังไม่อยูใ่ น 2NF ต้องสร้างตารางเพิ่ม
ตัวอย่ าง 2 NF ต่ อ….
• สิ นค้า(รหัสสิ นค้า,ชื่อสิ นค้า)
• การสัง่ (รหัสการสัง่ ,รหัสสิ นค้า,จานวนที่สั่งซื้ อ)
• รายละเอียดการสัง่ ซื้อสิ นค้า(รหัสการสัง่ ,วันที่สงั่ ,รหัสพนักงาน)
Third Normal Form : 3NF
3. Third Normal Form : 3NF
Relation หนึ่งๆ จะอยูใ่ นรู ปแบบ 3NF ก็ต่อเมื่อ
“1. Relation นั้นๆ ต้องอยูใ่ นรู ปแบบ 2NF
2. Attribute ทุกตัวที่ไม่ได้เป็ นคียห์ ลัก ไม่มีคุณสมบัติในการ
กาหนดค่าของ Attribute อื่นที่ไม่ใช่คียห์ ลัก หรื อกล่าวง่ายๆ
ว่า ไม่มี Transitive Dependency เกิดขึ้น”
•
•
•
•
วิธีการทาให้ อยู่ในรูปแบบ 3 NF
1. สร้างตารางเพิ่ม
2. นาแอทริ บิวต์ที่มีปัญหามาใส่ ในตารางใหม่
3. เลือกคียห์ ลัก
4. คอลัมน์ใดที่ยา้ ยจากตารางเดิมไปใส่ ในตารางใหม่ให้ตดั ออก
จากตารางเดิม
• 5. นาคียห์ ลักในข้อ 3 ไปใส่ ในตารางเดิม
• ข้อสังเกต ได้จานวนตารางเพิ่ม,แอทริ บิวต์ในตารางลดลง,คีย ์
นอกเกิดขึ้นในตารางเดิม
ตัวอย่ าง 3 NF
• สมาชิก(รหัสสมาชิก, ชื่อสมาชิก,ที่อยูส่ มาชิก,รหัสประเภท
สมาชิก,ชื่อประเภทสมาชิก)
• พิจารณาแล้ว พบว่า มี Transitive Dependency ระหว่างแอทริ บิวต์
รหัสสมาชิก -->รหัสประเภทสมาชิก
ชื่อประเภทสมาชิก
• จากข้อมูลข้างต้น พบว่า รหัสประเภทสมาชิก เป็ นตัวถ่ายทอดไป
ยัง ชื่อประเภทสมาชิก ดังนั้น ต้องทาให้อยูใ่ นรู ป 3 NF ดังนี้
ตัวอย่ าง 3 NF ต่ อ..
• สมาชิก(รหัสสมาชิก, ชื่อสมาชิก,ที่อยูส่ มาชิก,รหัสประเภท
สมาชิก,ชื่อประเภทสมาชิก)
ประเภทสมาชิก(รหัสประเภทสมาชิก,ชื่อประเภทสมาชิก)
สมาชิก(รหัสสมาชิก,ชื่อสมาชิก,ที่อยูส่ มาชิก,รหัสประเภทสมาชิก)
แสดงขั้นตอนของการทา Normalization
Entity
ที่มีขอ้ มูลซ้ าซ้อน
1NF
2NF
3NF
กาจัดกลุ่มข้อมูลซ้ าซ้อน
กาจัด Partial
Dependency
กาจัด Transitive
Dependency
Boyce/Codd Normal Form : BCNF
4. Boyce/Codd Normal Form : BCNF
Relation หนึ่งๆ จะอยูใ่ นรู ปแบบ BCNF ก็ต่อเมื่อ
1. Relation นั้นๆ ต้องอยูใ่ นรู ปแบบ 3NF
2. แอทริ บิวต์ที่เป็ น Determenant จะเป็ นคียค์ ู่แข่ง
Boyce/Codd Normal Form : BCNF
ในบางกรณี รีเรชัน่ ที่อยูใ่ นรู ปแบบ 3 NF แล้วยังมีโอกาสที่จะเกิด
ข้อผิดปกติจากการจัดการข้อมูล ถ้าเกิดว่ามีเงื่อนไขต่อไปนี้
1. รี เลชัน่ นั้นมีคียค์ ู่แข่งมากว่า 1 ชุด
2. คียค์ ู่แข่งเหล่านั้นประกอบด้วยแอทริ บิวต์หลายตัวรวมกัน
3. คียค์ ู่แข่งที่เป็ นประเภท “Composite Key”
ตัวอย่ าง....Boyce/Codd Normal Form : BCNF
สมาชิก(รหัสสมาชิก,เลขประจาตัวผูเ้ สี ยภาษี,ชื่อสมาชิก,ที่อยู)่
รหัสสมาชิก เลขประจาตัวผู้เสี ยภาษี
M001 98302982822
M002 24487373820
ชื่อสมาชิก
ทีอ่ ยู่
สมพงษ์ ใจร้าย 11/2 เอกมัย
สมชาย ใจดี 3/45 สายไหม
พิจารณา
1. รหัสสมาชิก --> เลขประจาตัวผูเ้ สี ยภาษี, ชื่อสมาชิก,ที่อยู่
2. เลขประจาตัวผูเ้ สี ยภาษี --> รหัสสมาชิก , ชื่อสมาชิก,ที่อยู่
3. รหัสสมาชิก <---> เลขประจาตัวผูเ้ สี ยภาษี
Boyce-Codd normal form (BCNF)
• ลักษณะ 3NF ทีล่ ม่ ใช่ BCNF
– สั งเกตว่ ายังมี Attribute หนึ่งยังสามารถระบุค่า Attribute
ที่เป็ นส่ วนหนึ่งของ Primary key (C  B)
Boyce/Codd Normal Form : BCNF
เช่น หากเลือก S# และ P# เป็ นคียห์ ลักแล้วจะเกิดปั ญหา
ใน Relation นี้คือ SNAME จะมีคุณสมบัติในการระบุค่าของ
Attribute S# ได้
S#
SNAME
P#
QTY
Boyce/Codd Normal Form : BCNF
S#
SNAME
P#
QTY
ดังนั้น Relation SUPPLIER3 ต้องทาการแตกรี เลชันออก โดยแยก attribute ที่
สามารถระบุค่าของ CK แยกเป็ นอีกรี เลชันหนึ่ง คือ
ORDER2(SNAME, P#, QTY)
SUPPLIER4(SNAME , S#)
Boyce-Codd normal form (BCNF)
แบบฝึ กหัด
รหัส
สมาชิก
รหัสความ
ชานาญ
ประเภท
ความชานาญ
คานาหน้า
ชื่อ
ชื่อ
นามสกุล
อายุ
รหัสกลุ่ม รหัสเมือง
รหัสผู้
ควบคุม
จงวิเคราะห์และจัดทา Normalization ระบบการลงทะเบียนของนักศึกษา ให้มีความ
ซ้ าซ้อนน้อยที่สุด
รหัส นศ.
ภาคเรียน
ที่
รหัสวิชา
ชื่อวิชา
4501
1/45
A01
คณิตศาสตร์ คอมฯ
1/45
A03
2/45
4502
4503
4506
ประเภท
วิชา
ชื่อ
ประเภท
หน่ วยกิต
เกรด
02
ชีพบังคับ
3
F
ภาษาไทย
01
พืน้ ฐาน
3
C
A01
คณิตศาสตร์ คอมฯ
02
ชีพบังคับ
3
D
2/45
A04
ภาษาอังกฤษ1
01
พืน้ ฐาน
3
D+
1/45
A01
คณิตศาสตร์ คอมฯ
02
ชีพบังคับ
3
B
1/45
A04
ภาษาอังกฤษ1
01
พืน้ ฐาน
3
C
2/45
A02
ระบบฐานข้ อมูล
03
ชีพเลือก
3
B
2/45
A05
โปรแกรมสาเร็จรู ป1
02
ชีพบังคับ
3
D
1/45
A06
การสื่ อสารข้ อมูล
01
พืน้ ฐาน
3
A
1/45
A04
ภาษาอังกฤษ1
03
ชีพเลือก
3
C
2/45
A05
โปรแกรมสาเร็จรู ป1
02
ชีพบังคับ
3
D
1/45
A03
ภาษาไทย
01
พืน้ ฐาน
3
B+
1/45
A04
ภาษาอังกฤษ1
01
พืน้ ฐาน
3
C