| วัตถุประสงค์ของการทำให้เป็นบรรทัดฐาน มีดังนี้ |
|
รูปแบบบรรทัดฐาน (Normal Form)
รูปแบบบรรทัดฐานทีใช้ในการกำหนดแอททริบิวต์ที่เหมาะสม ในรีเลชั่นแบ่งออกเป็นดังนี้
รูปแบบบรรทัดฐานขั้นที่ 1
รีเลชั่นหนึ่งๆจะอยู่ในรูปแบบบรรทัดฐานขั้นที่ 1 ก็ต่อเมื่อ "ค่า
ของแอททริบิวต์หนึ่งในแต่ละทูเพิลจะมีค่าของข้อมูลเพียงค่าเดียวหากรีเลชั่น
ใดไม่มีคุณสมบัติดังกล่าวข้างต้นจะต้องทำการปรับปรุงให้อยู่ในรูปแบบบรรทัด
ฐานขั้นที่หนึ่งโดยการแยกกลุ่มข้อมูลที่ซ้ำกันเป็นรีเลชั่นใหม่และกำหนดให้
เป็นแอททริบิวต์ที่เป็นตัวกำหนดค่าของกลุ่มข้อมูลที่ซ้ำกันนี้( Multivalued
Attribute) เป็นคีย์หลักของรีเลชั่นใหม่"
Relation A
|
sno
|
sname
|
city
|
pno
|
qty
|
| S1 | Seri | Bangkok | P1 P2 P3 P4 | 200 400 200 300 |
| S2 | Wanda | Rayong | P1 P2 | 400 300 |
| S3 | Somhai | Rayong | P2 | 200 |
S4
|
Orapan
|
Bangkok
|
P2
|
200
|
Relation A
|
| sno | sname | city | pno | qty |
| S1 | Seri | Bangkok | P1 | 300 |
| S1 | Seri | Bangkok | P2 | 200 |
| S1 | Seri | Bangkok | P3 | 400 |
| S1 | Seri | Bangkok | P4 | 200 |
| S2 | Wanda | Rayong | P1 | 300 |
| S2 | Wanda | Rayong | P2 | 400 |
| S3 | Somchai | Rayong | P2 | 200 |
| S4 | Orapan | Bangkok | P2 | 200 |
- ความผิดพลาดที่เกิดจากการเพิ่มข้อมูล (Insert Anomaly) จากรี เลชั่นนี้ จะเห็นว่าการที่เพิ่มข้อมูลของผู้ผลิตจะทำได้ต่อเมื่อผู้ผลิตรายนั้นได้มี การส่งสินค้าไปให้ผู้ซื้อรีเลชั่น แต่จะไม่ แสดงรายละเอียดของสินค้าของสินค้าผู้ผลิต s5 ที่อยู่ จ. เลย ถ้าไม่มีการส่งสินค้า ปัญหาคือ การกำหนด attribute ที่เป็นคีย์หลักของรีเลชั่นนี้ เป็นการกำหนดที่ไม่เหมาะสม จากกฏความบูรณภาพของเอนทิตี้ (The Entity Integrity Rule)โดยที่รหัสสินค้า(pno)จะเป็นค่าว่าง หากมีเพียงข้อมูลของผู้ผลิตแต่ไม่ เคยสั่งสินค้า
- ความผิดพลาดที่เกิดจากการลบข้อมูล (Delete Anomaly) ใน การลบข้อมูลบางทูเพิลทิ้งไปจะลบทั้งข้อมูลผู้ผลิตและข้อมูล การส่งสินค้า เช่นการลบข้อมูลทูเพิลรหัสผู้ผลิต s3 และรหัสสินค้า p2 จะทำให้ข้อมูลของผู้ผลิต s3 หายจากฐานข้อมูล ปัญหาของรีเลชั่นนี้คือ รีเลชั่นนี้ประกอบด้วย attribute ที่เกินเงื่อนไขในการใช้งาน ( มี attribute มากเกินไปโดยที่ข้อมูลของบาง attribute อาจไม่จำเป็นใช้งานแต่มาผูกติดกับ attrbute ที่ต้องการใช้งาน )
- ความผิดพลาดที่เกิดจากการปรับปรุงข้อมูล(Update Anomaly) การ ปรับปรุงข้อมูลของรีเลชั่น จะทำให้เกิดความความยุ่งยากและเสียเวลา รวมถึงอาจก่อให้เกิดความผิดพลาดที่ข้อมูลไม่เหมือนกัน เช่น การปรับปรุงข้อมูลใน s1 โดยเปลื่ยนชื่อจังหวัดจาก Bangkok เป็น Ayudtaya ซึ่งการปรับเปลื่ยนข้อมูลนี้ จะต้องค้นหารหัสผู้ผลิต s1 ทุกทูเพิลมาปรับปรุง ทำให้เสียเวลาและอาจเกิดความผิดพลาดที่ผู้ผลิตรหัส S1 บางทูเพิลไม่ได้ถูกเปลื่ยนเป็นชื่อจังหวัดใหม่ปัญหาที่เกิดขึ้นของรีเลชั่น สามารถแก้ไขโดยการแตกรีเลชั่น(Decomposition) ออกเป็น 2 รีเลชั่น คือ Supplier,OrderSupplier ประกอบด้วย Attribute Sno,Sname,City โดยมี Attribute Sno เป็น Primary keyOrder ประกอบด้วย Attribute Sno,Pno,City โดยมี Attribute SnoและPno เป็น Primary key ร่วมกัน
รูปแบบบรรทัดฐานขั้นที่ 2
รีเลชั่นหนึ่งๆ จะอยู่ในรูปแบบบรรทัดฐานขั้นที่ 2 ก็ต่อเมื่อ "รี
เลชั่นนั้นๆอยู่ในรูปแบบบรรทัดฐานขั้นที่ 1
และมีคุณสมบัติอีกประการหนึ่งคือแอทริบิวต์ทุกแอททริบิวต์ที่ไม่ได้เป็นคีย์
หลักจะต้องมีความสัมพันธ์ระหว่างค่าของแอทริบิวต์แบบฟังก์ชั่นกับคีย์
หลัก(Fully Functional Dependency)
กล่าวอีกนัยหนึ่งคือค่าของแอททริบิวต์ที่ไม่ได้เป็นคีย์หลักจะสามารถระบุค่า
โดยแอททริบิวต์ที่เป็นคีย์หลัก
แอททริบิวต์ทั้งหมดที่ประกอบกันเป็นคีย์หลัก" ในกรณีที่คีย์หลักเป็น
คีย์ผสม จากรีเลชั่น Supplier และ Order
รีเลชั่นทั้งสองอยู่ในรูปแบบบรรทัดฐานขั้นที่ 2 แล้ว ในรีเลชั่น Supplier
มีรหัสผู้ผลิตเป็นคีย์หลัก เช่น เมื่อทราบค่า รหัสผู้ผลิต S1
ก็จะสามารถทราบค่าของชื่อและจังหวัดของผู้ผลิตคือ Seri อยู่ที่จังหวัด
Bangkok หรือในรีเลชั่น Order จำนวนการส่งสินค้า (QTY)
จะถูกระบุโดยรหัสผู้ผลิตและรหัสสินค้า ดังนั้น
ค่าของแอททริบิวต์อื่นๆที่ไม่ได้เป็นคีย์หลักของรีเลชั่น Supplier และ
Order สามารถระบุโดยค่าของแอททริบิวต์ที่เป็นคีย์หลัก
รูปแบบบรรทัดฐานขั้นที่ 3
รีเลชั่นหนึ่งๆจะอยู่ในรูปแบบบรรทัดฐานขั้นที่ 3 (3NF) ก็ต่อเมื่อ “รี
เลชั่นนั้นๆอยู่ในรูปแบบบรรทัดฐานขั้นที่ 2
ละมีคุณสมบัติอีกประการหนึ่งคือแอททริบิวต์ที่ไม่ได้เป็นคีย์หลักไม่มี
คุณสมบัติในการกำหนดค่าของแอททริบิวต์อื่นที่ไม่ใช่คีย์หลัก” จากรูป
รีเลชั่น Supplier 1 จะคล้ายคลึงกับรีเลชั่น Supplier
ที่เคยกล่าวมาข้างต้นเพียงแต่เพิ่มแอททริบิวต์ Rating
เข้าไปรีเลชั่นนี้มีรหัสผู้ผลิตเป็นคีย์หลัก | SNAMESUPPLIER 1 |
SNO
|
SNAME
|
CITY
|
RATING
|
S1
| SERI |
BANGKOK
|
2
|
S2
| WANIDA |
RAYONG
|
3
|
S3
| SOMCHAI |
RAYONG
|
3
|
S4
| ORAPIN |
BANGKOK
|
2
|
S5
| TANACHOTE |
PATUMTANE
|
1
|
SUPPLIER
|
SNO
|
SNAME
|
CITY
|
| S1 | SERI | BANGKOK |
| S2 | WANIDA | RAYONG |
| S3 | SOMCHAI | RAYONG |
| S4 | ORAPIN | BANGKOK |
| S5 | TANACHOTE | PATUMTANE |
SUPPLIER2
|
SNO
|
SNAME
|
S1
|
2
|
S2
|
3
|
S3
|
3
|
S4
|
2
|
S5
|
1
|
รูปแบบบรรทัดฐานขั้นที่ 4
รีเลชั่นนี้จะอยู่ในรูปแบบบรรทัดฐานขั้นที่ 4 ก็ต่อเมื่อ "รีเลชั่นนั้นๆ อยู่ในรูปแบบ BCNF และเป็นรีเลชั่นที่ไม่มีความสัมพันธ์ในการระบุค่าของแอททริบิวต์แบบหลายค่า" โดยที่ แอททริบิวต์ที่ถูกระบุค่าหลายค่าเหล่านี้ไม่มีความสัมพันธ์ กัน (Independently Multivalued Dependency) รีเลชั่นที่ต้องผ่านการทำให้อยู่ในรูปแบบบรรทัดฐานขั้นที่4นี้จะต้องมีแอ ททริบิวต์อย่างน้อยสามแอททริบิวต์ จากรูป เป็นรีเลชั่นที่ประกอบด้วยแอททริบิวต์รหัสผู้ผลิต (Sno) รหัสโครงการที่สั่งผลิต (Pjno) และชื่อจัหวัดที่โรงงานของผู้ผลิต ตั้งอยู่ (City) โดยกำหนดให้ผู้ผลิตหนึ่งผลิตให้หลายโครงการ และผู้ผลิตหนึ่งๆ มีโรงงานตั้งอยู่ที่หลายจังหวัด (City)
Sno
|
Pjno
|
City
|
| S1 | Pj01 Pj02 | Bangkok Samuthprakarn |
| S2 | Pj03 Pj04 Pj05 | Rayong Chonbure |
Sno
|
Pjno
|
City
|
S1
|
Pj01
|
Bangkok
|
S1
|
Pj01
|
Samuthprakarn
|
S1
|
Pj02
|
Bangkok
|
S1
|
Pj02
|
Samuthprakarn
|
S2
|
Pj03
|
Rayong
|
S2
|
Pj05
|
Chonbure
|
S2
|
Pj04
|
Rayong
|
S2
|
Pj04
|
Chonbure
|
S2
|
Pj05
|
Rayong
|
S2
|
Pj05
|
Chonbure
|
SNO
|
PJNO
|
S1
|
PJ01
|
S1
|
PJ02
|
S2
|
PJ03
|
S2
|
PJ04
|
S2
|
PJ05
|
SNO
|
CITY
|
S1
|
BANGKOK
|
S1
|
SAMUTHPRAKARN
|
S2
|
RAYONG
|
S2
|
CHONBURI
|
RELATION SPP
|
| SNAME | PNAME | PJNAME |
|---|---|---|
SERI
|
PEN
|
PROJ2
|
SERI
|
TABLE
|
PROJ1
|
WANIDA
|
PEN
|
PROJ1
|
SERI
|
PEN
|
PROJ1
|
เพื่อหลีกเลี่ยงปัญหาดัง กล่าว จึงทำการแตกรีเลชั่น SPP เป็น 3 รีเลชั่นย่อย (Projection) โดยในแต่ละรีเลชั่นย่อย จะประกอบด้วยแอททริบิวต์แต่ละคู่เป็นคีย์ผสมของรีเลชั่นย่อย ดังรูป
| SNAME | PNAME |
| SERI | PEN |
| SERI | TABLE |
| WANIDA | PEN |
| PNAME | PJNAME |
| PEN | PROJ2 |
| TABLE | PROJ1 |
| PEN | PROJ1 |
| PJNAME | SNAME |
| PROJ2 | SERI |
| PROJ1 | SERI |
| PROJ1 | WANIDA |
| SNAME | PNAME | PJNAME |
| SERI | PEN | PROJ2 |
| SERI | TABLE | PROJ1 |
| WANIDA | PEN | PROJ1 |
| SERI | PEN | PROJ1 |
เมื่อแตกรีเลชั่น SPP ออกเป็นรีเลชั่น SP และ PPJ และ PJS แล้ว หากนำ ทั้ง 3 รีเลชั่นมาเชื่อมโยงกันจะมีข้อมูลเหมือนในรีเลชั่น SPP ดังนั้นเมื่อ มีการแตกรีเลชั่นออกมา และมีการเชื่อมโยงรีเลชั่นย่อยนั้นใหม่ หาก ไม่มีข้อมูลที่แตกต่างไปจากรีเลชั่นเดิม ก็จะสามารถแตกรีเลชั่นนั้นได้ แต่ถ้าหากแตกเป็นรีเลชั่นย่อยแล้วเกิดข้อมูล ไม่เหมือนกับรีเลชั่นเดิมก็ให้ ถือว่ารีเลชั่นเดิมนั้นอยู่ในรูปแบบบรรทัด ฐานที่ 5 แล้ว จากตัวอย่าง รีเลชั่น SCPJ เป็นรีเลชั่นที่อยู่ในรูปแบบบรรทัดฐานขั้นที่ 4 โดยมี แอททริบิวต์รหัสผู้ผลิต (SNO) ชื่อจังหวัดของผู้ผลิต (CITY) และรหัส โครงการ (PJNO) ประกอบเป็นคีย์หลัก รีเลชั่นนี้ก็ยังมีปัญหาที่อาจเกิด ความผิดพลาดในการเพิ่มปรับปรุงหรือลบ ข้อมูลจึงทำการแตก รีเลชั่น SCPJ ออกเป็นรีเลชั่น SC CPJ PJS แต่ก็เกิดปัญหาเมื่อนำทั้ง 3 รีเลชั่นมาเชื่อมโยงกัน ก็จะมีข้อมูลเกินมาคือ S1 RAYONG PJ01 ซึ่งไม่มีในรีเลชั่นเดิม
RELATION SCPJ
|
| SNO |
CITY
| PJNO |
| S1 | BANGKOK | PJ01 |
| S1 | RAYONG | PJ02 |
| S3 | RAYONG | PJ01 |
RELATION SC
|
SNAME
|
PNAME
|
| SERI | PEN |
| SERI | TABLE |
| WANIDA | PEN |
PENRELATION CPJ
|
| PNAME | PJNAME |
| PEN | PROJ2 |
| TABLE | PROJ1 |
| PEN | PROJ1 |
RELATION PJS
|
PJNAME
|
SNAME
|
PROJ2
|
SERI
|
PROJ1
|
SERI
|
PROJ1
|
WANIDA
|
| SNAME | PNAME | PJNAME |
| SERI | PEN | PROJ2 |
| SERI | TABLE | PROJ1 |
| WANIDA | PEN | PROJ1 |
| SERI | PEN | PROJ1 |
ไม่มีความคิดเห็น:
แสดงความคิดเห็น