วันอาทิตย์ที่ 2 พฤศจิกายน พ.ศ. 2557

รูปแบบบรรทัดฐาน

แนวคิดในการทำรีเลชั่นให้อยู่ในรูปแบบบรรทัดฐานถูกคิดค้นโดย อี.เอฟ.คอดด์เป็นกระบวนการที่นำเค้าร่างของรีเลชั่นมาทำให้อยู่ในรูปแบบบรรทัดฐาน(normal from)

วัตถุประสงค์ของการทำให้เป็นบรรทัดฐาน มีดังนี้
  1. เพื่อลดเนื้อที่ในการเก็บข้อมูลการทำให้เป็นบรรทัดฐานเป็นการลดความซ้ำซ้อนของข้อมูลในรีเลชั่น
  2. เพื่อลดปัญหาที่ข้อมูลไม่ถูกต้อง(Inconsistency)เนื่องจากข้อมูลในรีเลชั่นหนึ่งจะมีข้อมูลไม่ซ้ำกัน เมื่อมีการปรับปรุงข้อมูลก็จะปรับปรุงทูเพิลนั้นๆครั้งเดียวไม่ต้องปรับปรุงหลายแห่ง
  3. เป็นการลดปัญหาที่เกิดจากการเพิ่ม ปรับปรุงและลบข้อมูล

รูปแบบบรรทัดฐาน (Normal Form)
รูปแบบบรรทัดฐานทีใช้ในการกำหนดแอททริบิวต์ที่เหมาะสม ในรีเลชั่นแบ่งออกเป็นดังนี้

รูปแบบบรรทัดฐานขั้นที่ 1
รีเลชั่นหนึ่งๆจะอยู่ในรูปแบบบรรทัดฐานขั้นที่ 1 ก็ต่อเมื่อ "ค่าของแอททริบิวต์หนึ่งในแต่ละทูเพิลจะมีค่าของข้อมูลเพียงค่าเดียวหากรีเลชั่นใดไม่มีคุณสมบัติดังกล่าวข้างต้นจะต้องทำการปรับปรุงให้อยู่ในรูปแบบบรรทัดฐานขั้นที่หนึ่งโดยการแยกกลุ่มข้อมูลที่ซ้ำกันเป็นรีเลชั่นใหม่และกำหนดให้เป็นแอททริบิวต์ที่เป็นตัวกำหนดค่าของกลุ่มข้อมูลที่ซ้ำกันนี้( Multivalued Attribute) เป็นคีย์หลักของรีเลชั่นใหม่"

Relation A
sno
sname
city
pno
qty
S1SeriBangkokP1 P2 P3 P4200 400 200 300
S2WandaRayongP1 P2400 300
S3SomhaiRayongP2200
S4
Orapan
Bangkok
P2
200
สมมุติให้รีเลชั่น A เป็นรีเลชั่นที่ประกอบด้วยAttribute ของ entity ผู้ผลิต และ entity การส่งของ โดยจะเห็นว่าในรีเลชั่น จะมีรหัสของผู้ผลิต s1,s2,s3,s4 และมีรหัสสินค้าหลายค่า วิธีแก้ไขปัญหานี้คือ การไส่ข้อมูลของ s1,s2,s3,s4 ลงไปในทุก รหัสสินค้า โดยผลการใส่ข้อมูลดังกล่าวนี้จะทำให้รหัสผู้ผลิต (sno) ไม่ใช่คีย์หลัก แต่คีย์หลักจะประกอบด้วยรหัสผู้ผลิตและ รหัสสินค้า (sno,pno)
Relation A
snosnamecitypnoqty
S1SeriBangkokP1300
S1SeriBangkokP2200
S1SeriBangkokP3400
S1SeriBangkokP4200
S2WandaRayongP1300
S2WandaRayongP2400
S3SomchaiRayongP2200
S4OrapanBangkokP2200
อย่างไรก็ตาม อาจมีความผิดพลาดบางอย่างที่อาจเกิดขึ้นกับ ข้อมูลนี้อยู่ เช่น
  1. ความผิดพลาดที่เกิดจากการเพิ่มข้อมูล (Insert Anomaly) จากรีเลชั่นนี้ จะเห็นว่าการที่เพิ่มข้อมูลของผู้ผลิตจะทำได้ต่อเมื่อผู้ผลิตรายนั้นได้มีการส่งสินค้าไปให้ผู้ซื้อรีเลชั่น แต่จะไม่ แสดงรายละเอียดของสินค้าของสินค้าผู้ผลิต s5 ที่อยู่ จ. เลย ถ้าไม่มีการส่งสินค้า ปัญหาคือ การกำหนด attribute ที่เป็นคีย์หลักของรีเลชั่นนี้ เป็นการกำหนดที่ไม่เหมาะสม จากกฏความบูรณภาพของเอนทิตี้ (The Entity Integrity Rule)โดยที่รหัสสินค้า(pno)จะเป็นค่าว่าง หากมีเพียงข้อมูลของผู้ผลิตแต่ไม่เคยสั่งสินค้า
  2. ความผิดพลาดที่เกิดจากการลบข้อมูล (Delete Anomaly) ในการลบข้อมูลบางทูเพิลทิ้งไปจะลบทั้งข้อมูลผู้ผลิตและข้อมูล การส่งสินค้า เช่นการลบข้อมูลทูเพิลรหัสผู้ผลิต s3 และรหัสสินค้า p2 จะทำให้ข้อมูลของผู้ผลิต s3 หายจากฐานข้อมูล ปัญหาของรีเลชั่นนี้คือ รีเลชั่นนี้ประกอบด้วย attribute ที่เกินเงื่อนไขในการใช้งาน ( มี attribute มากเกินไปโดยที่ข้อมูลของบาง attribute อาจไม่จำเป็นใช้งานแต่มาผูกติดกับ attrbute ที่ต้องการใช้งาน )
  3. ความผิดพลาดที่เกิดจากการปรับปรุงข้อมูล(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 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เป็นคีย์หลัก
SUPPLIER
SNO
SNAME
  CITY
S1SERI BANGKOK
S2WANIDARAYONG
S3SOMCHAIRAYONG
S4ORAPIN BANGKOK
S5TANACHOTE PATUMTANE

SUPPLIER2 
SNO
SNAME
S1
 2
S2
3
S3
3
S4
2
S5
 1
จากรูป การแตกรีเลชั่นจากตัวอย่างนี้ดูเหมือนจะแก้ปัญหาความผิดพลาดที่อาจจะเกิดขึ้นจากการเพิ่ม ลบ หรือปรับปรุงข้อมูลได้ เพราะได้แตกรีเลชั่นออกเป็นสองรีเลชั่น และอยู่ในรูปแบบบรรทัดฐานขั้นที่ 3 แล้ว แต่การแตกรีเลชั่นทั้งสองข้อที่จะก่อให้เกิดความผิดพลาดขึ้นได้อีกเช่นกัน จากตัวอย่างนี้จะเห็นว่าการเพิ่มชื่อจังหวัดและการจัดอันดับของจังหวัดใหม่จะทำไม่ได้จนกว่าจะมีผู้ผลิตรายใดอยู่ที่จังหวัดที่จะเพิ่มชื่อและจัดอันดับนั้นรีเลชั่น Supplier และรีเลชั่น Supplier 2 เป็นรีเลชั่นที่ไม่มีความเป็นอิสระจากกัน ทั้งนี้เพราะจังหวัดเป็นตัวกำหนดการจัดอันดับ

รูปแบบบรรทัดฐานขั้นที่ 4 
รีเลชั่นนี้จะอยู่ในรูปแบบบรรทัดฐานขั้นที่ 4 ก็ต่อเมื่อ "รีเลชั่นนั้นๆ อยู่ในรูปแบบ BCNF และเป็นรีเลชั่นที่ไม่มีความสัมพันธ์ในการระบุค่าของแอททริบิวต์แบบหลายค่า"  โดยที่ แอททริบิวต์ที่ถูกระบุค่าหลายค่าเหล่านี้ไม่มีความสัมพันธ์กัน (Independently Multivalued Dependency) รีเลชั่นที่ต้องผ่านการทำให้อยู่ในรูปแบบบรรทัดฐานขั้นที่4นี้จะต้องมีแอททริบิวต์อย่างน้อยสามแอททริบิวต์ จากรูป เป็นรีเลชั่นที่ประกอบด้วยแอททริบิวต์รหัสผู้ผลิต (Sno) รหัสโครงการที่สั่งผลิต (Pjno) และชื่อจัหวัดที่โรงงานของผู้ผลิต ตั้งอยู่  (City) โดยกำหนดให้ผู้ผลิตหนึ่งผลิตให้หลายโครงการ และผู้ผลิตหนึ่งๆ มีโรงงานตั้งอยู่ที่หลายจังหวัด (City)
Sno
Pjno
City
S1Pj01 Pj02Bangkok Samuthprakarn
S2Pj03 Pj04  Pj05Rayong Chonbure
ทำให้อยู่ในรูปแบบบรรทัดฐาน BCNF โดยให้ทุกแอททริบิวต์ ประกอบกันเป็นคีย์หลัก
SPJC 
  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
รีเลชั่น SPJC ประกอบด้วยแอททริบิวต์รหัสผู้ผลิต (Sno) ซึ่งมีความ สัมพันธ์ ในการระบุค่าแอททริบิวต์รหัสโครงการที่สั่งผลิต(Pjno) และแอททริบิวต์จังหวัดที่โรงงานของผู้ผลิตตั้งอยู่ (City) ได้หลายค่า รีเลชั่น SPJC อยู่ในรูปแบบ BCNF เมื่อมีแอททริบิวต์ทุกแอททริบิวต์ เป็นคีย์ นอกจากนี้ รหัสผู้ผลิต (SNO) มีความสัมพันธ์ในการระบุค่า ของรหัสโครงการที่สั่งผลิต (PJNO) แบบหลายค่า (SNO->-> PJNO) ในขณะเดียวกัน รหัสผู้ผลิต (SNO) ก็มีความสัมพันธ์ในการระบุค่า แบบหลายค่ากับชื่อจังหวัดที่ผู้ผลิตตั้งอยู่ (CITY) การที่แอททริบิวต์ ทั้งสองไม่มีความสัมพันธ์กันแต่มาอยู่ในรีเลชั่นเดียวกัน  จะก่อให้เกิด ความซ้ำซ้อนของข้อมูลเกิดขึ้น เพราะค่าของชื่อจังหวัดจะต้องปรากฏ ในรีเลชั่นซ้ำกันเพื่อให้ข้อมูลในแต่ละทูเพิลมีข้อมูลครบถ้วนถึงแม้ว่ารีเลชั่น SPJC จะอยู่ในรูปแบบของBCNFโดยมีแอททริบิวต์ทุกแอททริบิวต์ประกอบกันเป็นคีย์หลักก็ตาม  รีเลชั่นนี้ก็ยังมีปัญหาแฝงอยู่เช่นกัน  ปัญหาความผิดพลาดที่เกิดจากการเพิ่ม ลบ หรือปรับปรุงข้อมูล มีโอกาสที่เกิดขึ้นมากมาย เช่น หากผู้ผลิตรหัส S2 ย้ายโรงงานRAYONG ไปอยู่จังหวัดอื่น ก็ต้องทำการแก้ไขข้อมูลหลายทูเพิล หรือความผิดพลาดในการเพิ่มข้อมูล อาจทำไม่ได้เช่นการเก็บข้อมูลที่จังหวัด ที่ตั้งของผู้ผลิตคนใหม่  ที่ยังไม่เคยได้รับงานโครงการใด ก็จะทำไม่ได้ เป็นต้น  สามารถแก้ปัญหารีเลชั่น โดยแบ่งออกเป็น 2 รีเลชั่นคือ  รีเลชั่น SPJ ประกอบด้วย แอททริบิวต์ SNO และ PJNO และมีแอททริบิวต์ทั้งสอง ประกอบกันเป็นคีย์หลักดังนี้
SPJ 
SNO
PJNO
S1
PJ01
S1
PJ02
S2
PJ03
S2
PJ04
S2
PJ05
รีเลชั่น SC ประกอบด้วยแอททริบิวต์ SNO และ CITY และมีแอททริบิวต์ทั้งสองประกอบกันเป็นคีย์หลัก  ดังนี้

SC 
SNO
CITY
S1
BANGKOK
S1
SAMUTHPRAKARN
S2
RAYONG
S2
CHONBURI

รูปแบบบรรทัดฐานขั้นที่ 5 
รีเลชั่นหนึ่ง ๆ จะอยู่ในรูปแบบบรรทัดฐานขึ้นที่ 5 หรือเรียกว่า Project-JoinNormal Form (PJ/NF) ก็ต่อเมื่อ "รีเลชั่นนั้นอยู่ในรูปแบบบรรทัดฐานขึ้นที่ 4 และเป็นรีเลชั่นที่มีคีย์หลักเป็นคีย์ผสมที่ประกอบด้วยแอททริบิวต์ตั้งแต่ 3 แอททริบิวต์เป็นต้นไป  หากมีการแตกรีเลชั่นออกเป็นรีเลชั่นย่อย 3 รีเลชั่น (หรือมากกว่า) (Projection) ซึ่งเกิดจากการจับคู่แอททริบิวต์แต่ละคู่ของรีเลชั่น  เดิมเป็นคีย์ผสมและเมื่อทำการเชื่อมโยงรีเลชั่นย่อยทั้งหมด (Join) จะไม่ก่อให้เกิดข้อมูลใหม่ที่ไม่เหมือนรีเลชั่นเดิม" จากรูป รีเลชั่น SPP ประกอบด้วยแอททริบิวต์ชื่อผู้ผลิต (SNAME)  ชื่อสินค้า (PNAME) และชื่อโครงการ (PJNAME)โดยมีแอททริบิวต์ทั้ง 3 เป็นคีย์หลัก
 RELATION SPP
SNAMEPNAMEPJNAME
SERI 
PEN
PROJ2
SERI
TABLE
PROJ1
WANIDA
PEN
PROJ1
SERI
PEN
PROJ1
รีเลชั่น SPP จะอยู่ในรูปแบบบรรทัดฐานขั้นที่ 4 แต่ก็ประสบปัญหาในการปรับปรุงแก้ไขข้อมูล เช่น การลบข้อมูล ของทูเพิลที่ 3 ข้อมูลของชื่อผู้ผลิต ชื่อ WANIDA ก็จะหายไปจากฐานข้อมูลหรือหากมีการเปลี่ยนชื่อสินค้าใด สินค้าหนึ่ง ก็จะต้องทำการปรับปรุงหลายทูเพิล
เพื่อหลีกเลี่ยงปัญหาดังกล่าว จึงทำการแตกรีเลชั่น SPP เป็น 3 รีเลชั่นย่อย (Projection) โดยในแต่ละรีเลชั่นย่อย  จะประกอบด้วยแอททริบิวต์แต่ละคู่เป็นคีย์ผสมของรีเลชั่นย่อย ดังรูป
รีเลชั่น 1 : SP
SNAME PNAME
 SERIPEN
 SERITABLE
WANIDAPEN

รีเลชั่น 2 : PPJ 
PNAMEPJNAME
PENPROJ2
TABLEPROJ1
PENPROJ1
  
รีเลชั่น 3 : PJS
PJNAME      SNAME
PROJ2SERI
PROJ1SERI
PROJ1WANIDA

รีเลชั่น SPP
SNAMEPNAMEPJNAME
SERIPENPROJ2
SERITABLEPROJ1
WANIDAPENPROJ1
SERIPENPROJ1

เมื่อแตกรีเลชั่น 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
S1BANGKOKPJ01
S1RAYONGPJ02
S3RAYONGPJ01


RELATION SC
SNAME
PNAME
SERIPEN
SERITABLE
WANIDAPEN

PENRELATION CPJ
PNAME PJNAME
PENPROJ2
TABLEPROJ1
PENPROJ1


RELATION PJS
PJNAME
SNAME
PROJ2 
SERI
PROJ1
SERI
PROJ1 
WANIDA

SNAMEPNAMEPJNAME
SERIPENPROJ2
SERITABLEPROJ1
WANIDAPENPROJ1
SERIPENPROJ1



ไม่มีความคิดเห็น:

แสดงความคิดเห็น