1.9.6.2 การสร้างความสัมพันธ์แบบกลุ่ม -ต่อ-กลุ่ม

1.9.6.2 การสร้างความสัมพันธ์แบบกลุ่ม -ต่อ-กลุ่ม



ให้พิจารณาความสัมพันธ์ระหว่างตารางผลิตภัณฑ์และตารางใบสั่งซื้อ


ใบสั่งซื้อหนึ่งใบอาจมีผลิตภัณฑ์สินค้าได้มากกว่าหนึ่งรายการ ในทางตรงกัน ข้าม ผลิตภัณฑ์สินค้ารายการหนึ่งอาจปรากฏในใบสั่งซื้อได้หลายใบ ดังนั้นแต่ละระเบียนในตาราง ใบสั่งซื้อจึงอาจมีหลายระเบียนในตารางผลิตภัณฑ์ และในแต่ละระเบียนของตารางผลิตภัณฑ์ก็อาจ มีหลายระเบียนในตารางใบสั่งซื้อ ความสัมพันธ์เช่นนี้เรียกว่าความสัมพันธ์แบบกลุ่ม-ต่อ-กลุ่ม เนื่องจากผลิตภัณฑ์หนึ่งอาจอยู่ในใบสั่งซื้อหลายใบ และใบสั่งซื้อหนึ่งก็อาจมีผลิตภัณฑ์สินค้าหลาย รายการ ให้สังเกตว่าเมื่อต้องการตรวจหาความสัมพันธ์แบบกลุ่ม-ต่อ-กลุ่มในตาราง สิ่งสำคัญคือ ต้องพิจารณาความสัมพันธ์ของทั้งสองด้าน

หัวเรื่องของสองตาราง ได้แก่ ใบสั่งซื้อและผลิตภัณฑ์ มีความสัมพันธ์แบบ กลุ่ม-ต่อ-กลุ่ม ซึ่งเป็นปัญหา เมื่อต้องการที่จะเข้าใจปัญหาดังกล่าว ให้ลองนึกภาพว่าจะเกิดอะไรขึ้น ถ้าจะพยายามสร้างความสัมพันธ์ระหว่างสองตารางด้วยการเพิ่มเขตข้อมูลหมายเลขผลิตภัณฑ์ลงใน ตารางใบสั่งซื้อ เมื่อต้องการมีผลิตภัณฑ์มากกว่าหนึ่งรายการต่อใบสั่งซื้อหนึ่งใบ เราต้องใช้ระเบียน ในตารางใบสั่งซื้อมากกว่าหนึ่งระเบียนต่อใบสั่งซื้อหนึ่งใบ ต้องทำซ้ำแถวข้อมูลการสั่งซื้อแต่ละแถ ที่สัมพันธ์กับใบสั่งซื้อใบเดียว ผลที่ได้คือการออกแบบที่ขาดประสิทธิภาพซึ่งจะนำไปสู่ข้อมูลที่ไม่ ถูกต้อง ซึ่งจะพบปัญหาเดิมถ้าเอาเขตข้อมูล ID ใบสั่งซื้อไปใส่ในตารางผลิตภัณฑ์ เมื่อตาราง ผลิตภัณฑ์มีระเบียนสำหรับผลิตภัณฑ์แต่ละอย่างมากกว่าหนึ่งระเบียน จะแก้ปัญหานี้อย่างไร

คำตอบคือการสร้างตารางที่สามขึ้น ซึ่งมักจะเรียกว่าตารางเชื่อมต่อ (Junction table) ซึ่งจะแตกความสัมพันธ์แบบกลุ่ม-ต่อ-กลุ่มลงเป็นความสัมพันธ์แบบหนึ่ง-ต่อ-กลุ่มจำนวน สองความสัมพันธ์ ให้คุณแทรกคีย์หลักจากแต่ละตารางลงในตารางที่สาม ผลที่ได้คือตารางที่สามจะ บันทึกแต่ละรายการหรืออินสแตนซ์ของความสัมพันธ์ไว้
 
รูปที่ 1-19 ตารางเชื่อมต่อ (Junction table) คือตารางรายละเอียดใบสั่งซื้อ


ระเบียนในตารางรายละเอียดใบสั่งซื้อแต่ละระเบียนจะแทนรายการหนึ่ง บรรทัดของใบสั่งซื้อ คีย์หลักของตารางรายละเอียดใบสั่งซื้อประกอบด้วยเขตข้อมูลสองเขต คือ Foreign Key จากตารางใบสั่งซื้อและตารางผลิตภัณฑ์ การใช้เขตข้อมูล ID ใบสั่งซื้ออย่างเดียว ไม่เพียงพอที่จะเป็ นคีย์หลักของตารางนี้ เนื่องจากใบสั่งซื้อหนึ่งใบสามารถมีรายการได้หลายบรรทัด ID ใบสังซือจะซำกนทุกบรรทัดของใบสังซือ ่ ้ ้ ั ่ ้ ดังนั้นเขตข้อมูลนี้จึงมีค่าซ้ำกัน การใช้เขต ข้อมูล หมายเลขผลิตภัณฑ์อย่างเดียวก็ไม่เพียงพอเช่นกัน เนื่องจากผลิตภัณฑ์สินค้าหนึ่งรายการอาจ ปรากฏในใบสั่งซื้อหลายต่อหลายใบ แต่ถ้าใช้พร้อมกันทั้งสองเขตข้อมูลก็จะให้ค่าที่ไม่ซ้ำกันสำหรั แต่ละระเบียน

ในฐานข้อมูลยอดขายผลิตภัณฑ์นั้น ตารางใบสั่งซื้อและตารางผลิตภัณฑ์จะไม่ สัมพันธ์กันและกันโดยตรง แต่จะสัมพันธ์กันโดยอ้อมผ่านตารางรายละเอียดใบสั่งซื้อ ความสัมพันธ์แบบกลุ่ม-ต่อ-กลุ่มระหว่างใบสั่งซื้อและผลิตภัณฑ์จะแสดงอยู่ในฐานข้อมูลโดยใช้ ความสัมพันธ์แบบหนึ่ง-ต่อ-กลุ่ม จำนวนสองความสัมพันธ์คือ

ตารางใบสั่งซื้อและตารางรายละเอียดใบสั่งซื้อมีความสัมพันธ์แบบหนึ่ง-ต่อ- กลุ่ม ใบสั่งซื้อแต่ละใบสามารถมีรายการบรรทัดได้มากกว่าหนึ่งรายการ แต่รายการบรรทัดแต่ละ รายการจะเชื่อมต่อกับใบสั่งซื้อเพียงหนึ่งใบเท่านั้น

ตารางผลิตภัณฑ์และตารางรายละเอียดใบสั่งซื้อมีความสัมพันธ์แบบหนึ่ง-ต่อ- กลุ่ม ผลิตภัณฑ์แต่ละรายการสามารถมีบรรทัดรายการหลายบรรทัดที่สัมพันธ์อยู่ด้วยกัน แต่บรรทัด ของรายการแต่ละบรรทัดจะอ้างอิงถึงผลิตภัณฑ์เพียงหนึ่งรายการเท่านั้น

จากตารางรายละเอียดใบสั่งซื้อ คุณสามารถกำหนดให้มีผลิตภัณฑ์ทั้งหมดใน ใบสั่งซื้อเฉพาะใบ นอกจากนี้คุณยังสามารถกำหนดให้ใบสั่งซื้อทุกใบมีผลิตภัณฑ์ใดผลิตภัณฑ์หนึ่ง โดยเฉพาะได้

หลังจากรวมตารางรายละเอียดใบสั่งซื้อแล้ว รายการของตารางและเขตข้อมูล อาจมีลักษณะดังต่อไปนี้ 
 
รูปที่ 1-20  รายการของตารางและเขตข้อมูล เมื่อมีตารางรายละเอียดใบสั่งซื้อ

0 ความคิดเห็น:

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