| วัตถุประสงค์ของการทำให้เป็นบรรทัดฐาน มีดังนี้ |
|
รูปแบบบรรทัดฐาน (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 เข้าไปรีเลชั่นนี้มีรหัสผู้ผลิตเป็นคีย์หลัก
หากพิจารณาดูแล้วจะเห็นว่ารีเลชั่น Supplier 1 นี้ อยู่ในรูปแบบบรรทัดฐานขั้นที่ 2 แล้ว คือ ไม่มีค่าของข้อมูลซ้ำกันและขณะเดียวกัน ค่าของแอททริบิวต์ที่ไม่ได้เป็นคีย์หลักอื่นๆสามารถระบุค่าได้โดยค่าของแอททริบิวต์ที่เป็นคีย์หลัก เช่นถ้าทราบว่ารหัสผู้ผลิตคือ SI จะสามารถทราบเลยว่า ผู้ผลิตนั้นๆชื่ออะไร อยู่ที่จังหวัดใดและอยู่ในจังหวัดที่ถูกจัดอันดับไว้เป็นอันดับเท่าไร รีเลชั่นนี้ไม่มีคีย์คู่แข่ง เพราะว่าไม่มีคีย์อื่นที่มีคุณสมบัติเป็นคีย์หลักได้เช่นเดียวกับรหัสผู้ผลิต ถึงแม้ว่าชื่อจังหวัดสามารถจะระบุการจัดอันดับของผู้ผลิต แต่ไม่สามารถระบุชื่อของผู้ผลิตได้ชัดเจนเช่นในกรณีของชื่อจังหวัดที่อยู่กรุงเทพชื่อของผู้ผลิตอาจเป็นSeri หรือ Orapin ก็ได้ ซึ่งไม่สามารถกำหนดชัดเจนว่าชื่ออะไร แอททริบิวต์ City จึงไม่มีคุณสมบัติเป็นคีย์หลักหรือคีย์คู่แข่งนอกจากนี้จะพบว่ามีความสัมพันธ์ระหว่างแอททริบิวต์ที่ไม่ได้เป็นคีย์หลักอยู่ นั่นคือ แอททริบิวต์ชื่อจังหวัด (City) และแอททริบิวต์การจัดอันดับของผู้ผลิต(Rating ) โดยแอททริบิวต์ชื่อจังหวัดสามารถระบุค่าการจัดอันดับความสะดวกในการขนส่งสินค้า ซึ่งเป็นความสัมพันธ์ระหว่างค่าของแอททริบิวต์แบบทรานซิทีฟ (TransitiveDependency)หากรีเลชั่นใดมีคุณสมบัติดังกล่าว จะก่อให้เกิดความผิดพลาดที่เกิดจากการเพิ่ม หรือลบหรือปรับปรุงข้อมูลได้ เช่นก. ความผิดพลาดที่เกิดจากการปรับปรุงข้อมูล (Update Anomaly) หากมีการแก้ไขการจัดอันดับของจังหวัดของจังหวัดของผู้ผลิตเนื่องจากความสะดวกในการขนส่งที่เปลี่ยนแปลงไป จะต้องทำการแก้ไขข้อมูลหลายทูเพิล ซึ่งอาจจะเกิดปัญหาการแก้ไขไม่ครบถ้วน อันจะก่อให้เกิดความไม่ตรงกันของข้อมูลได้ข. ความผิดพลาดที่เกิดจากการลบข้อมูล (Delete Anomaly)หากมีการลบข้อมูลการจัดอันดับของจังหวัดของผู้ผลิต จะทำให้ข้อมูลการจัดอันดับของจังหวัดนั้นหายไปจากฐานข้อมูลเช่น หากลบทูเพิลของรหัสผู้ผลิต S5 จะไม่มีข้อมูลของผู้ผลิตที่อยู่ที่จังหวัดปทุมธานีว่าถูกจัดอันดับอยู่ที่อันดับที่เท่าไร ด้วยเหตุผลที่แอททริบิวต์ชื่อจังหวัดไม่มีคุณสมบัติเป็นคีย์หลักในรีเลชั่น Supplier 1 แต่สามารถกำหนดค่าของแอททริบิวต์การจัดอันดับได้ ซึ่งอาจก่อให้เกิดปัญหาความผิดพลาดจากการเพิ่ม ปรับปรุงหรือลบข้อมูลการขจัดปัญหาดังกล่าวจะทำได้โดยการ แตกรีเลชั่น Supplier1เป็นสองรีเลชั่น (Decomposition) โดยแยกแอททริบิวต์ที่ถูกกำหนดค่ากับแอททริบิวต์ที่เป็นตัวกำหนดค่า(Determinant)ออกเป็นรีเลชั่นใหม่ และกำหนดให้แอททริบิวต์ที่เป็นตัวกำหนดค่า (Determinant) เป็นคีย์หลักของรีเลชั่นใหม่ดังนี้ SUPPLIER (SNO,SNAME,CITY) CITY(CITY,RATING)รีเลชั่น Supplier ประกอบด้วยแอททริบิวต์ (SNO,SNAME,CITY) มี SNO เป็นคีย์หลักโดยมี CITY เป็นคีย์นอกที่อ้างอิงถึงแอททริบิวต์ CITY ที่อยู่ในรีเลชั่น CITY ประกอบด้วยแอททริบิวต์(City,Rating) และมี City เป็นคีย์หลัก วิธีการแตกรีเลชั่น(Decomposition) ที่กล่าวมาข้างต้นจะต้องทำตามขั้นตอนดังนี้คือ ประการแรก ให้นำแอททริบิวต์ทึ่ถูกกำหนดค่ากับแอททริบิวต์ที่เป็นตัว กำหนดค่าแยกออกเป็นรีเลชั่นใหม่และ ประการที่สองคือกำหนดให้แอททริบิวต์ที่เป็นตัวกำหนดค่าเป็นคีย์หลักของรีเลชั่นใหม่นั้นอย่างไรก็ตามในบางครั้งผู้ออกแบบเค้าร่างของฐานข้อมูลพยายามแตกรีเลชั่นที่มีแอททริบิวต์มากๆออกเป็นหลายรีเลชั่นโดยไม่ได้ปฎิบัติตามวิธีการที่กล่าวมาแล้วข้างต้นซึ่งจะทำให้เกิดปัญหาการแตกฐานข้อมูลที่ไม่เหมาะสมได้(Bad Decomposition) ตัวอย่างเช่น หากแตกรีเลชั่นของ Supplier 1 เป็นดังนี้ รีเลชั่น Supplier (SNO SNAME CITY) มีSNO เป็นคีย์หลัก รีเลชั่น Supplier 2 (SNO,RATING) มี SNOเป็นคีย์หลัก
จากรูป การแตกรีเลชั่นจากตัวอย่างนี้ดูเหมือนจะแก้ปัญหาความผิดพลาดที่อาจจะเกิดขึ้นจากการเพิ่ม ลบ หรือปรับปรุงข้อมูลได้ เพราะได้แตกรีเลชั่นออกเป็นสองรีเลชั่น และอยู่ในรูปแบบบรรทัดฐานขั้นที่ 3 แล้ว แต่การแตกรีเลชั่นทั้งสองข้อที่จะก่อให้เกิดความผิดพลาดขึ้นได้อีกเช่นกัน จากตัวอย่างนี้จะเห็นว่าการเพิ่มชื่อจังหวัดและการจัดอันดับของจังหวัดใหม่จะทำไม่ได้จนกว่าจะมีผู้ผลิตรายใดอยู่ที่จังหวัดที่จะเพิ่มชื่อและจัดอันดับนั้นรีเลชั่น Supplier และรีเลชั่น Supplier 2 เป็นรีเลชั่นที่ไม่มีความเป็นอิสระจากกัน ทั้งนี้เพราะจังหวัดเป็นตัวกำหนดการจัดอันดับ
รูปแบบบรรทัดฐานขั้นที่ 4
รีเลชั่นนี้จะอยู่ในรูปแบบบรรทัดฐานขั้นที่ 4 ก็ต่อเมื่อ "รีเลชั่นนั้นๆ อยู่ในรูปแบบ BCNF และเป็นรีเลชั่นที่ไม่มีความสัมพันธ์ในการระบุค่าของแอททริบิวต์แบบหลายค่า" โดยที่ แอททริบิวต์ที่ถูกระบุค่าหลายค่าเหล่านี้ไม่มีความสัมพันธ์กัน (Independently Multivalued Dependency) รีเลชั่นที่ต้องผ่านการทำให้อยู่ในรูปแบบบรรทัดฐานขั้นที่4นี้จะต้องมีแอททริบิวต์อย่างน้อยสามแอททริบิวต์ จากรูป เป็นรีเลชั่นที่ประกอบด้วยแอททริบิวต์รหัสผู้ผลิต (Sno) รหัสโครงการที่สั่งผลิต (Pjno) และชื่อจัหวัดที่โรงงานของผู้ผลิต ตั้งอยู่ (City) โดยกำหนดให้ผู้ผลิตหนึ่งผลิตให้หลายโครงการ และผู้ผลิตหนึ่งๆ มีโรงงานตั้งอยู่ที่หลายจังหวัด (City)
ทำให้อยู่ในรูปแบบบรรทัดฐาน BCNF โดยให้ทุกแอททริบิวต์ ประกอบกันเป็นคีย์หลัก
รีเลชั่น SPJC ประกอบด้วยแอททริบิวต์รหัสผู้ผลิต (Sno) ซึ่งมีความ สัมพันธ์ ในการระบุค่าแอททริบิวต์รหัสโครงการที่สั่งผลิต(Pjno) และแอททริบิวต์จังหวัดที่โรงงานของผู้ผลิตตั้งอยู่ (City) ได้หลายค่า รีเลชั่น SPJC อยู่ในรูปแบบ BCNF เมื่อมีแอททริบิวต์ทุกแอททริบิวต์ เป็นคีย์ นอกจากนี้ รหัสผู้ผลิต (SNO) มีความสัมพันธ์ในการระบุค่า ของรหัสโครงการที่สั่งผลิต (PJNO) แบบหลายค่า (SNO->-> PJNO) ในขณะเดียวกัน รหัสผู้ผลิต (SNO) ก็มีความสัมพันธ์ในการระบุค่า แบบหลายค่ากับชื่อจังหวัดที่ผู้ผลิตตั้งอยู่ (CITY) การที่แอททริบิวต์ ทั้งสองไม่มีความสัมพันธ์กันแต่มาอยู่ในรีเลชั่นเดียวกัน จะก่อให้เกิด ความซ้ำซ้อนของข้อมูลเกิดขึ้น เพราะค่าของชื่อจังหวัดจะต้องปรากฏ ในรีเลชั่นซ้ำกันเพื่อให้ข้อมูลในแต่ละทูเพิลมีข้อมูลครบถ้วนถึงแม้ว่ารีเลชั่น SPJC จะอยู่ในรูปแบบของBCNFโดยมีแอททริบิวต์ทุกแอททริบิวต์ประกอบกันเป็นคีย์หลักก็ตาม รีเลชั่นนี้ก็ยังมีปัญหาแฝงอยู่เช่นกัน ปัญหาความผิดพลาดที่เกิดจากการเพิ่ม ลบ หรือปรับปรุงข้อมูล มีโอกาสที่เกิดขึ้นมากมาย เช่น หากผู้ผลิตรหัส S2 ย้ายโรงงานRAYONG ไปอยู่จังหวัดอื่น ก็ต้องทำการแก้ไขข้อมูลหลายทูเพิล หรือความผิดพลาดในการเพิ่มข้อมูล อาจทำไม่ได้เช่นการเก็บข้อมูลที่จังหวัด ที่ตั้งของผู้ผลิตคนใหม่ ที่ยังไม่เคยได้รับงานโครงการใด ก็จะทำไม่ได้ เป็นต้น สามารถแก้ปัญหารีเลชั่น โดยแบ่งออกเป็น 2 รีเลชั่นคือ รีเลชั่น SPJ ประกอบด้วย แอททริบิวต์ SNO และ PJNO และมีแอททริบิวต์ทั้งสอง ประกอบกันเป็นคีย์หลักดังนี้
รีเลชั่น SC ประกอบด้วยแอททริบิวต์ SNO และ CITY และมีแอททริบิวต์ทั้งสองประกอบกันเป็นคีย์หลัก ดังนี้
รูปแบบบรรทัดฐานขั้นที่ 5
รีเลชั่นหนึ่ง ๆ จะอยู่ในรูปแบบบรรทัดฐานขึ้นที่ 5 หรือเรียกว่า Project-JoinNormal Form (PJ/NF) ก็ต่อเมื่อ "รีเลชั่นนั้นอยู่ในรูปแบบบรรทัดฐานขึ้นที่ 4 และเป็นรีเลชั่นที่มีคีย์หลักเป็นคีย์ผสมที่ประกอบด้วยแอททริบิวต์ตั้งแต่ 3 แอททริบิวต์เป็นต้นไป หากมีการแตกรีเลชั่นออกเป็นรีเลชั่นย่อย 3 รีเลชั่น (หรือมากกว่า) (Projection) ซึ่งเกิดจากการจับคู่แอททริบิวต์แต่ละคู่ของรีเลชั่น เดิมเป็นคีย์ผสมและเมื่อทำการเชื่อมโยงรีเลชั่นย่อยทั้งหมด (Join) จะไม่ก่อให้เกิดข้อมูลใหม่ที่ไม่เหมือนรีเลชั่นเดิม" จากรูป รีเลชั่น SPP ประกอบด้วยแอททริบิวต์ชื่อผู้ผลิต (SNAME) ชื่อสินค้า (PNAME) และชื่อโครงการ (PJNAME)โดยมีแอททริบิวต์ทั้ง 3 เป็นคีย์หลัก
รีเลชั่น SPP จะอยู่ในรูปแบบบรรทัดฐานขั้นที่ 4 แต่ก็ประสบปัญหาในการปรับปรุงแก้ไขข้อมูล เช่น การลบข้อมูล ของทูเพิลที่ 3 ข้อมูลของชื่อผู้ผลิต ชื่อ WANIDA ก็จะหายไปจากฐานข้อมูลหรือหากมีการเปลี่ยนชื่อสินค้าใด สินค้าหนึ่ง ก็จะต้องทำการปรับปรุงหลายทูเพิล
เพื่อหลีกเลี่ยงปัญหาดังกล่าว จึงทำการแตกรีเลชั่น SPP เป็น 3 รีเลชั่นย่อย (Projection) โดยในแต่ละรีเลชั่นย่อย จะประกอบด้วยแอททริบิวต์แต่ละคู่เป็นคีย์ผสมของรีเลชั่นย่อย ดังรูป
เมื่อแตกรีเลชั่น SPP ออกเป็นรีเลชั่น SP และ PPJ และ PJS แล้ว หากนำ ทั้ง 3 รีเลชั่นมาเชื่อมโยงกันจะมีข้อมูลเหมือนในรีเลชั่น SPP ดังนั้นเมื่อ มีการแตกรีเลชั่นออกมา และมีการเชื่อมโยงรีเลชั่นย่อยนั้นใหม่ หาก ไม่มีข้อมูลที่แตกต่างไปจากรีเลชั่นเดิม ก็จะสามารถแตกรีเลชั่นนั้นได้ แต่ถ้าหากแตกเป็นรีเลชั่นย่อยแล้วเกิดข้อมูลไม่เหมือนกับรีเลชั่นเดิมก็ให้ ถือว่ารีเลชั่นเดิมนั้นอยู่ในรูปแบบบรรทัดฐานที่ 5 แล้ว จากตัวอย่าง รีเลชั่น SCPJ เป็นรีเลชั่นที่อยู่ในรูปแบบบรรทัดฐานขั้นที่ 4 โดยมี แอททริบิวต์รหัสผู้ผลิต (SNO) ชื่อจังหวัดของผู้ผลิต (CITY) และรหัส โครงการ (PJNO) ประกอบเป็นคีย์หลัก รีเลชั่นนี้ก็ยังมีปัญหาที่อาจเกิด ความผิดพลาดในการเพิ่มปรับปรุงหรือลบข้อมูลจึงทำการแตก รีเลชั่น SCPJ ออกเป็นรีเลชั่น SC CPJ PJS แต่ก็เกิดปัญหาเมื่อนำทั้ง 3 รีเลชั่นมาเชื่อมโยงกัน ก็จะมีข้อมูลเกินมาคือ S1 RAYONG PJ01 ซึ่งไม่มีในรีเลชั่นเดิม
| 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 |
ไม่มีความคิดเห็น:
แสดงความคิดเห็น