1.9.6.2 การสร้างความสัมพันธ์แบบกลุ่ม -ต่อ-กลุ่ม
ให้พิจารณาความสัมพันธ์ระหว่างตารางผลิตภัณฑ์และตารางใบสั่งซื้อ
ใบสั่งซื้อหนึ่งใบอาจมีผลิตภัณฑ์สินค้าได้มากกว่าหนึ่งรายการ ในทางตรงกัน
ข้าม ผลิตภัณฑ์สินค้ารายการหนึ่งอาจปรากฏในใบสั่งซื้อได้หลายใบ ดังนั้นแต่ละระเบียนในตาราง
ใบสั่งซื้อจึงอาจมีหลายระเบียนในตารางผลิตภัณฑ์ และในแต่ละระเบียนของตารางผลิตภัณฑ์ก็อาจ
มีหลายระเบียนในตารางใบสั่งซื้อ ความสัมพันธ์เช่นนี้เรียกว่าความสัมพันธ์แบบกลุ่ม-ต่อ-กลุ่ม เนื่องจากผลิตภัณฑ์หนึ่งอาจอยู่ในใบสั่งซื้อหลายใบ และใบสั่งซื้อหนึ่งก็อาจมีผลิตภัณฑ์สินค้าหลาย
รายการ ให้สังเกตว่าเมื่อต้องการตรวจหาความสัมพันธ์แบบกลุ่ม-ต่อ-กลุ่มในตาราง สิ่งสำคัญคือ
ต้องพิจารณาความสัมพันธ์ของทั้งสองด้าน
หัวเรื่องของสองตาราง ได้แก่ ใบสั่งซื้อและผลิตภัณฑ์ มีความสัมพันธ์แบบ
กลุ่ม-ต่อ-กลุ่ม ซึ่งเป็นปัญหา เมื่อต้องการที่จะเข้าใจปัญหาดังกล่าว ให้ลองนึกภาพว่าจะเกิดอะไรขึ้น
ถ้าจะพยายามสร้างความสัมพันธ์ระหว่างสองตารางด้วยการเพิ่มเขตข้อมูลหมายเลขผลิตภัณฑ์ลงใน
ตารางใบสั่งซื้อ เมื่อต้องการมีผลิตภัณฑ์มากกว่าหนึ่งรายการต่อใบสั่งซื้อหนึ่งใบ เราต้องใช้ระเบียน
ในตารางใบสั่งซื้อมากกว่าหนึ่งระเบียนต่อใบสั่งซื้อหนึ่งใบ ต้องทำซ้ำแถวข้อมูลการสั่งซื้อแต่ละแถ
ที่สัมพันธ์กับใบสั่งซื้อใบเดียว ผลที่ได้คือการออกแบบที่ขาดประสิทธิภาพซึ่งจะนำไปสู่ข้อมูลที่ไม่
ถูกต้อง ซึ่งจะพบปัญหาเดิมถ้าเอาเขตข้อมูล ID ใบสั่งซื้อไปใส่ในตารางผลิตภัณฑ์ เมื่อตาราง
ผลิตภัณฑ์มีระเบียนสำหรับผลิตภัณฑ์แต่ละอย่างมากกว่าหนึ่งระเบียน จะแก้ปัญหานี้อย่างไร
คำตอบคือการสร้างตารางที่สามขึ้น ซึ่งมักจะเรียกว่าตารางเชื่อมต่อ (Junction
table) ซึ่งจะแตกความสัมพันธ์แบบกลุ่ม-ต่อ-กลุ่มลงเป็นความสัมพันธ์แบบหนึ่ง-ต่อ-กลุ่มจำนวน
สองความสัมพันธ์ ให้คุณแทรกคีย์หลักจากแต่ละตารางลงในตารางที่สาม ผลที่ได้คือตารางที่สามจะ
บันทึกแต่ละรายการหรืออินสแตนซ์ของความสัมพันธ์ไว้
รูปที่ 1-19 ตารางเชื่อมต่อ (Junction table) คือตารางรายละเอียดใบสั่งซื้อ
ระเบียนในตารางรายละเอียดใบสั่งซื้อแต่ละระเบียนจะแทนรายการหนึ่ง
บรรทัดของใบสั่งซื้อ คีย์หลักของตารางรายละเอียดใบสั่งซื้อประกอบด้วยเขตข้อมูลสองเขต
คือ Foreign Key จากตารางใบสั่งซื้อและตารางผลิตภัณฑ์ การใช้เขตข้อมูล ID ใบสั่งซื้ออย่างเดียว
ไม่เพียงพอที่จะเป็ นคีย์หลักของตารางนี้ เนื่องจากใบสั่งซื้อหนึ่งใบสามารถมีรายการได้หลายบรรทัด ID ใบสังซือจะซำกนทุกบรรทัดของใบสังซือ ่ ้ ้ ั ่ ้ ดังนั้นเขตข้อมูลนี้จึงมีค่าซ้ำกัน การใช้เขต
ข้อมูล หมายเลขผลิตภัณฑ์อย่างเดียวก็ไม่เพียงพอเช่นกัน เนื่องจากผลิตภัณฑ์สินค้าหนึ่งรายการอาจ
ปรากฏในใบสั่งซื้อหลายต่อหลายใบ แต่ถ้าใช้พร้อมกันทั้งสองเขตข้อมูลก็จะให้ค่าที่ไม่ซ้ำกันสำหรั
แต่ละระเบียน
ในฐานข้อมูลยอดขายผลิตภัณฑ์นั้น ตารางใบสั่งซื้อและตารางผลิตภัณฑ์จะไม่
สัมพันธ์กันและกันโดยตรง แต่จะสัมพันธ์กันโดยอ้อมผ่านตารางรายละเอียดใบสั่งซื้อ
ความสัมพันธ์แบบกลุ่ม-ต่อ-กลุ่มระหว่างใบสั่งซื้อและผลิตภัณฑ์จะแสดงอยู่ในฐานข้อมูลโดยใช้
ความสัมพันธ์แบบหนึ่ง-ต่อ-กลุ่ม จำนวนสองความสัมพันธ์คือ
ตารางใบสั่งซื้อและตารางรายละเอียดใบสั่งซื้อมีความสัมพันธ์แบบหนึ่ง-ต่อ-
กลุ่ม ใบสั่งซื้อแต่ละใบสามารถมีรายการบรรทัดได้มากกว่าหนึ่งรายการ แต่รายการบรรทัดแต่ละ
รายการจะเชื่อมต่อกับใบสั่งซื้อเพียงหนึ่งใบเท่านั้น
ตารางผลิตภัณฑ์และตารางรายละเอียดใบสั่งซื้อมีความสัมพันธ์แบบหนึ่ง-ต่อ-
กลุ่ม ผลิตภัณฑ์แต่ละรายการสามารถมีบรรทัดรายการหลายบรรทัดที่สัมพันธ์อยู่ด้วยกัน แต่บรรทัด
ของรายการแต่ละบรรทัดจะอ้างอิงถึงผลิตภัณฑ์เพียงหนึ่งรายการเท่านั้น
จากตารางรายละเอียดใบสั่งซื้อ คุณสามารถกำหนดให้มีผลิตภัณฑ์ทั้งหมดใน
ใบสั่งซื้อเฉพาะใบ นอกจากนี้คุณยังสามารถกำหนดให้ใบสั่งซื้อทุกใบมีผลิตภัณฑ์ใดผลิตภัณฑ์หนึ่ง
โดยเฉพาะได้
หลังจากรวมตารางรายละเอียดใบสั่งซื้อแล้ว รายการของตารางและเขตข้อมูล
อาจมีลักษณะดังต่อไปนี้
รูปที่ 1-20 รายการของตารางและเขตข้อมูล เมื่อมีตารางรายละเอียดใบสั่งซื้อ
0 ความคิดเห็น:
แสดงความคิดเห็น