Home
Education
Classroom
Knowledge
Blog
TV
ธรรมะ
กิจกรรม
โครงการทรูปลูกปัญญา

แบบจำลองข้อมูลเชิงลำดับชั้น (Hierarchical Data Model)

Posted By Plookpedia | 21 เม.ย. 60
2,677 Views

  Favorite

แบบจำลองข้อมูลเชิงลำดับชั้น (Hierarchical Data Model) 

      ส่วนใหญ่องค์กรต่าง ๆ จะมีโครงสร้างเป็นแบบลำดับชั้นซึ่งข้อมูลขององค์กรเหล่านี้จะมีความเหมาะสมกับแบบจำลองข้อมูลเชิงลำดับชั้น (Hierarchical Data Model) มากที่สุดปรากฏว่าไม่มีหลักฐานหรือเอกสารอย่างเป็นทางการที่อธิบายถึงแบบจำลองข้อมูลนี้  อย่างไรก็ตามมีระบบการจัดการฐานข้อมูลในสมัยก่อนหลายระบบที่พัฒนาโดยใช้โครงสร้างการเก็บข้อมูลแบบลำดับชั้น ตัวอย่างเช่น ระบบมาร์สที่ ๖ (MARS VI) ระบบไอเอ็มเอส (IMS) ระบบ ๒๐๐๐ ของ เอ็มอาร์ไอ (MRI's System-2000) เป็นต้น

 

ระบบฐานข้อมูล
ตัวอย่างการแสดงโครงสร้างแบบจำลองข้อมูลเชิงลำดับชั้น 

 

      โครงสร้างข้อมูลพื้นฐานของแบบจำลองข้อมูลนี้ประกอบด้วย ๒ ชนิด คือ ระเบียน (Record) และ ความสัมพันธ์แบบพ่อกับลูก (Parent- Child Relationship : PCR) ระเบียน คือ กลุ่มค่าของข้อมูลของเอนทิตี (entity) หนึ่ง ๆ หรือของความสัมพันธ์ (relationship) ระหว่างเอนทิตีซึ่งระเบียนข้อมูลชนิดเดียวกันเมื่อนำมารวมกลุ่มกันก็จะเรียกว่า ชนิดระเบียน (Record Type) สำหรับคำว่าเอนทิตีนั้น เป็นคำเฉพาะที่ใช้ในสาขาฐานข้อมูล หมายถึง วัตถุใด ๆ ทั้งที่เป็นนามธรรมและรูปธรรมที่บรรจุไว้เป็นข้อมูลซึ่งประกอบด้วยคุณสมบัติ (attribute) ต่าง ๆ ตัวอย่างเช่น ฐานข้อมูลของบริษัทผู้ผลิตอาจจะประกอบด้วยเอนทิตีพนักงาน แผนก โครงการ ชิ้นส่วนที่ผลิต ผู้จัดส่งวัตถุดิบ โกดัง เป็นต้น โดยที่เอนทิตีพนักงานอาจจะมีคุณลักษณะที่ประกอบด้วย ชื่อ นามสกุล เลขประจำตัวบัตร ประชาชน วันเกิด ที่อยู่ เบอร์โทรศัพท์ ตำแหน่ง เป็นต้น 
      ส่วนความสัมพันธ์แบบพีซีอาร์ (PCR) นั้นเป็นความสัมพันธ์ระหว่าง ๒ ระเบียนใด ๆ แบบ ๑ ต่อมาก (one-to-many : 1:N) โดยที่ชนิดระเบียนที่เป็นพ่อกับชนิดระเบียนที่เป็นลูกนั้นจะมีหน้าที่และบทบาทแตกต่างกันโดยสิ้นเชิงจึงไม่สามารถสลับกันเป็นพ่อเป็นลูกได้ซึ่งข้อจำกัดนี้ส่งผลให้แบบจำลองข้อมูลแบบลำดับชั้นไม่สามารถนำไปใช้งานกับฐานข้อมูลจำนวนมากได้ ตัวอย่าง ของชนิดระเบียนและความสัมพันธ์แบบพ่อกับลูก ได้แก่ ระเบียนภาควิชา ระเบียนนักศึกษา และระเบียนอาจารย์ และความสัมพันธ์แบบพ่อกับลูก ๒ ความสัมพันธ์ ได้แก่ (ภาควิชา นักศึกษา) และ (ภาควิชา อาจารย์) โดยที่ระเบียนภาควิชาเป็นพ่อในทั้งสองความสัมพันธ์  สำหรับความสัมพันธ์ (ภาควิชา นักศึกษา) หมายถึง ความสัมพันธ์ที่ว่า นักศึกษาคนใดสังกัดในภาควิชาใดโดยที่ภาควิชาหนึ่ง ๆ จะมีนักศึกษาได้หลายคน (ความสัมพันธ์แบบ ๑ ต่อมาก) และนักศึกษาคนหนึ่งจะสังกัดได้เพียง ๑ ภาควิชาเท่านั้น ส่วนความสัมพันธ์ (ภาควิชา อาจารย์) นั้นก็มีความหมายในลักษณะเดียวกันแต่ละภาควิชา จะมีอาจารย์ในสังกัดได้หลายคนและอาจารย์แต่ละคนจะสังกัดได้เพียง ๑ ภาควิชาเท่านั้น

 

ระบบฐานข้อมูล
ตัวอย่างการใช้ความสัมพันธ์แบบเสมือนพ่อกับลูก

 

      ข้อจำกัดของความสัมพันธ์แบบพ่อกับลูกแบบทิศทางเดียวนี้จะแทนความสัมพันธ์แบบ ๑ ต่อมากเท่านั้น สำหรับความสัมพันธ์แบบ ๑ ต่อ ๑ เราก็ใช้หลักการเดิมเพียงแต่ต้องระบุเงื่อนไขเพิ่มเติมเข้าไปที่ระเบียนลูก (child record) ว่ามีได้เพียง ๑ ค่าต่อ ๑ ระเบียนพ่อ (parent record) เท่านั้น อย่างไรก็ตามยังมีปัญหาที่แก้ไขยากอีก ได้แก่

      ๑. ความสัมพันธ์แบบมากต่อมาก (many-to-many : M:N)

      ๒. ชนิดระเบียนอันหนึ่งเป็นระเบียนลูกในหลาย ๆ ความสัมพันธ์แบบพ่อกับลูก  

      ๓. ความสัมพันธ์ระหว่างหลาย ๆ ชนิดระเบียนโดยที่ชนิดระเบียนมีมากกว่า ๒ ชนิดขึ้นไป 


      สำหรับกรณีแรกและกรณีที่ ๒ นั้นสามารถแก้ไขได้ด้วยการทำซ้ำข้อมูลจริงในระเบียน (record occurences) ของชนิดระเบียนลูกในทุก ๆ ความสัมพันธ์แต่สำหรับปัญหาในกรณีที่ ๓ นั้นไม่สามารถแก้ไขได้ด้วยวิธีการเดียวกัน  อย่างไรก็ตามการทำซ้ำมีข้อเสีย คือ สิ้นเปลืองเนื้อที่หน่วยความจำในการจัดเก็บและมีปัญหาในเรื่องความถูกต้องของข้อมูลอีกด้วยเนื่องจากมีข้อมูลระเบียนเดียวกันอยู่หลายแห่งเมื่อมีการเปลี่ยนแปลงรายละเอียดภายในระเบียนจะต้องแน่ใจว่าทุกระเบียนได้เปลี่ยนแปลงค่าเป็นค่าใหม่หมดแล้วซึ่งบางครั้งผู้แก้ไขข้อมูลอาจพลั้งเผลอทำให้ข้อมูลระเบียนเดียวกันที่ต่ออยู่กับคนละความสัมพันธ์มีรายละเอียดต่างกัน  ดังนั้นจึงได้มีการนำเสนอวิธีแก้ปัญหาเหล่านี้ด้วยการใช้ความสัมพันธ์แบบเสมือนพ่อกับลูก (Virtual Parent-Child Relationship : VPCR) ซึ่งเป็นความสัมพันธ์ระหว่างระเบียนชนิดเสมือนลูก (Virtual Child Type) และระเบียนชนิดเสมือนพ่อ (Virtual Parent Type) โดยที่ระเบียนเสมือนลูก คือ ระเบียนชนิดที่มีตัวชี้ (pointer) ชี้ไปยังระเบียนอีกชนิดหนึ่งที่เป็นระเบียนเสมือนพ่อ อันที่จริงแล้ววิธีการของพีซีอาร์และวีพีอาร์นั้นเหมือนกันในแง่คิดแต่ทว่าแตกต่างกันในขั้นตอนการพัฒนาใช้งาน คือ พีซีอาร์จะใช้ลำดับเชิงลำดับชั้น (hierarchical sequence) ส่วนพีซีอาร์มักจะสร้างด้วยการใช้ตัวชี้ (pointer)

ข้อบังคับของแบบจำลองข้อมูลเชิงลำดับชั้น 

๑. ไม่มีข้อมูลจริงของระเบียนใด ๆ ยกเว้นรากต้นไม้ (root) ที่จะดำรงอยู่ได้โดยไม่ติดอยู่กับระเบียนพ่อ หมายความว่า 

  • ระเบียนลูกไม่สามารถใส่เข้าไปได้ถ้าไม่นำไปต่ออยู่กับระเบียนพ่อ 
  • ระเบียนลูกสามารถถูกยกเลิกได้แต่ถ้ายกเลิกระเบียนพ่อระเบียนลูกทั้งหมดจะต้องถูกยกเลิกด้วย 
  • กฎทั้งหมดข้างต้นนั้นไม่รวมระเบียนเสมือนลูกและระเบียนเสมือนพ่อ 

๒. ถ้าระเบียนลูกมีระเบียนพ่อตั้งแต่ ๒ ตัวขึ้นไปจากระเบียนชนิดเดียวกันระเบียนลูกจำเป็นต้องทำซ้ำภายในแต่ละระเบียนพ่อ 
๓. ถ้าระเบียนลูกมีระเบียนพ่อตั้งแต่ ๒ ตัวขึ้นไปจากระเบียนต่างชนิดกันสามารถเป็นได้ก็ต่อเมื่อมีพ่อตัวจริงได้ ๑ ชนิด ส่วนที่เหลือนั้นจะต้องเป็นเสมือนพ่อ (virtual parent) ทั้งหมด

ภาษาจัดดำเนินการแบบจำลองข้อมูลเชิงลำดับชั้น 

      เป็นภาษาสำหรับจัดการข้อมูลแบบครั้งละระเบียน (record-at-a-time) เป็นภาษาขั้นต่ำซึ่งคำสั่งในภาษานี้จะต้องติดอยู่กับคำสั่งของภาษาโปรแกรมคอมพิวเตอร์ทั่ว ๆ ไป ภาษาใดภาษาหนึ่ง เช่น ภาษาปาสกาลและภาษาซี เป็นต้น ภาษานี้จะต้องมีบริเวณที่เรียกว่า บริเวณทำงานของผู้ใช้ (User Work Area : UWA) ซึ่งเป็นบริเวณในภาษาโปรแกรมคอมพิวเตอร์ทั่วไปใช้สำหรับกำหนดโครงสร้างและลักษณะของตัวแปรต่าง ๆ ของข้อมูลทั้งหมดที่มีอยู่ในฐานข้อมูล 
คำสั่งหลักของภาษาจัดดำเนินการของแบบจำลองนี้ คือ 

  • คำสั่งนำออกมา (Get) เพื่อดึงข้อมูลจากฐานข้อมูลมาไว้ที่ตัวแปรที่เกี่ยวข้องกันในบริเวณทำงานของผู้ใช้เพื่อจัดการต่อไป คำสั่งนี้มีคำสั่งย่อย ๆ ได้แก่ นำระเบียนแรกออกมา (Get First) นำระเบียนถัดไปออกมา (Get Next) นำระเบียนถัดไปภายใต้พ่อเดียวกันออกมา (Get Next Within Parent) นำระเบียนตามเส้นทางความสัมพันธ์ออกมา (Get Path)
  • คำสั่งเพิ่ม (Insert) เพื่อจัดเก็บระเบียนใหม่ลงในฐานข้อมูล 
  • คำสั่งลบ (Delete) เพื่อยกเลิกหรือลบระเบียนที่เป็นระเบียนปัจจุบัน (Current Record) ออกจากฐานข้อมูล 
  • คำสั่งแทนที่ (Replace) เพื่อเปลี่ยนแปลงค่าบางค่าของระเบียนปัจจุบัน
  • คำสั่งนำออกมาและถือไว้ (Get Hold) เพื่อดึงระเบียนออกมาและทำให้เป็นระเบียนปัจจุบันเพื่อจะได้ทำการยกเลิกหรือเปลี่ยนแปลงค่าต่อไป

ตัวอย่าง (ใช้ร่วมกับภาษาปาสกาล)
เป็นคำสั่งขอดูเงินเดือนของอาจารย์ชื่อ "สมศักดิ์" นามสกุล "รักชาติไทย" สมมติว่าในฐานข้อมูลนี้มีอาจารย์ที่ชื่อและนามสกุลดังกล่าวนี้เพียงท่านเดียวเท่านั้น 

      $GET FIRST อาจารย์ WHERE อาจารย์. ชื่อ :='สมศักดิ์' : อาจารย์.นามสกุล :='รักชาติไทย'; 
      if DB_STATUS = 0 then begin 
      writeln (อาจารย์.ชื่อ, อาจารย์.เงินเดือน); 
      end; 
      else writeln ('NO RECORD FOUND');
เว็บไซต์ทรูปลูกปัญญาดอทคอมเป็นเพียงผู้ให้บริการพื้นที่เผยแพร่ความรู้เพื่อประโยชน์ของสังคม ข้อความและรูปภาพที่ปรากฏในบทความเป็นการเผยแพร่โดยผู้ใช้งาน หากพบเห็นข้อความและรูปภาพที่ไม่เหมาะสมหรือละเมิดลิขสิทธิ์ กรุณาแจ้งผู้ดูแลระบบเพื่อดำเนินการต่อไป
  • Posted By
  • Plookpedia
  • 15 Followers
  • Follow